| Logado como Visitante | Grupo "Visitantes" Está vendo: Forum | Quarta, 05/02/2025, 3:11 PM | RSS |
Anime Mugen


[ Novas Mensagens · Membros · Regras · Buscar · RSS ]
  • Página 1 de 1
  • 1
Moderador do fórum: lMDl  
Inteligência Artificial
EquinócioData: Segunda, 24/01/2011, 2:41 PM | Mensagem # 1
Iniciante
Grupo: Usuários
Mensagens: 12
Awards: 0
Reputação: 0
Status: Offline
Olá pessoal!

Estou postando um tutorial de inteligência artificial, espero que gostem! smile

===================
= --------------------------------------- =
= Inteligência Artificial =
= by: Equinócio - 13/07/2004 =
= Modificado em - 03/03/2006 =
= --------------------------------------- =
= e-mail: igyur@yahoo.com =
= --------------------------------------- =
==========================

AVISO:
--------------------------------------------------------------------------------------
- Este tutorial visa o auxílio para criar Inteligência Artificial em chars de MUGEN.

- Se você quiser pode hospedar este tutorial em seu site. Não precisa me pedir.

--------------------------------------------------------------------------------------

Introdução:
-----------

O que será mostrado neste tutorial é válido tanto para IA no CMD quanto para IA no CNS. Você não precisa ser um grande conhecedor em CMD ou CNS para elaborar uma IA.
É importante, porém, que você saiba as regras a serem obedecidas no CMD. Saber fazer
comandos, ordená-los de forma adequada e conhecer alguns Sctrls e Triggers é importante para o entendimento do Tutorial e também da IA.
A IA compreende uma seqüência de comandos para ativá-la e as rotinas que serão executadas de acordo com as imposições estabelecidas pelos Triggers.

=====================================================
Seqüência de Comandos:
----------------------

A Seqüência de Comandos da IA deve vir antes dos comandos do seu personagem.
Eles são os primeiros a aparecer no CMD. Estes comandos devem ser exclusivos
do computador, pois caso contrário, se um jogador humano (você) acioná-los sem querer,
o seu personagem terá "vida própria" e passará a jogar sozinho, sem
que você tenha o controle dele.

-> Em alguns chars a Seqüência de Comandos vem entre ou depois dos comandos
do personagem. Façamos da maneira mais fácil, que é colocar
os comandos da IA no início do CMD.

Exemplo:

;===================
;= ---------------------------- =
;= KFM's Commands =
;= File for M.U.G.E.N =
;= ---------------------------- =
;===================

[Command]
name = "CPU_1"
command = F, F, F, F, F, F
time = 1

[Command]
name = "CPU_2"
command = a, a, a, a, a, a
time = 1

[Command]
name = "CPU_3"
command = D, U, D, U, D, U
time = 1

[Command]
name = "CPU_4"
command = F, x, F, B, y, B
time = 1

[Command]
name = "CPU_5" -> Nome do comando. Poderia ser "IA_5" ou qualquer outro que você quisesse. Para facilitar as coisas agora e depois, sugiro que coloque o mesmo nome
nos comandos, mudando apenas o número, como vê no exemplo.

command = c, z, c, z, c, z -> Comando a ser executado pelo computador.
O número de dígitos serve também para garantir a exclusividade da IA, a fim de que um jogador humano (você) não possa acioná-la. Por este motivo, dê preferência a
comandos com elevado número de dígitos. Algo entre 6 a 12 dígitos, por exemplo.

time = 1 -> Tempo para executá-lo. Somente uma máquina pode executar este comando em tão pouco tempo.
1 game-tick = 1/60 = 0,01666... segundo!!!
Isto é, portanto, humanamente impossível de ser realizado.

De acordo com a probabilidade, quanto mais comandos como estes forem colocados,
maior a chance de a IA ser ativada em menos tempo. Varia muito o número de comandos,
pois há programadores que colocam 15 e outros que colocam cerca de 50 comandos para a IA.

=====================================================
Setando uma Variável:
---------------------

Este procedimento serve para que, ao setar uma variável,
a IA seja acionada durante a luta.
Primeiro deve-se escolher uma variável dentre as 60 disponíveis para acionar a IA.
Geralmente escolhe-se a Var(59), mas você pode escolher a que quiser, contanto que
a mesma não esteja sendo usada no CNS. Dê preferência a uma Var de valor alto,
para que ela não seja resetada entre rounds, estando, neste caso,
com um valor maior ou igual ao do parâmetro IntPersistIndex* no CNS.
Toda variável no início possui valor 0, e para aciná-la deve-se atribuir um valor
a mesma. Peguemos como exemplo a Var(59) e atribuamos a ela o
valor 1 usando o Sctrl VarSet.

OBS*: Você deve mudar o valor do parâmetro IntPersistIndex no CNS.
Se no exemplo a Var é 59, mude para 58. Enfim, basta colocar um valor
inferior a Var escolhida. Fazendo isto ela não resetará entre rounds.

Exemplo:

[Statedef -1]

;-------------------------
; Inteligência Artificial
;==============

[State -1]
type = VarSet
trigger1 = command = "CPU_1"
trigger2 = command = "CPU_2"
trigger3 = command = "CPU_3"
trigger4 = command = "CPU_4"
trigger5 = command = "CPU_5"
trigger6 = command = "CPU_6"
trigger7 = command = "CPU_7"
trigger8 = command = "CPU_8"
trigger9 = command = "CPU_9"
trigger10 = command = "CPU_10"
trigger11 = command = "CPU_11"
trigger12 = command = "CPU_12"
trigger13 = command = "CPU_13"
trigger14 = command = "CPU_14"
trigger15 = command = "CPU_15"
trigger16 = command = "CPU_16"
v = 59
value = 1

Como vê, 16 comandos podem ser acionados pela IA.

Coloque tantos triggers como este quantos forem o número de comandos colocados
na Seqüência de Comandos. Então se você colocou 40 comandos para a IA,
coloque 40 triggers aqui. O básico ao setar uma variável é usar o Trigger
Command, mas você pode usar Triggerall com o Trigger Ctrl, por exemplo.

PS: O que foi dito agora deverá ser feito independente do que optou, pela IA
no CMD ou no CNS. Se você optou pela IA no CMD, faça esta parte logo abaixo de
"[Statedef -1]". Se preferiu fazer a IA no CNS, faça esta parte logo abaixo
de "[Statedef -2]" ou "[Statedef -3]".

=====================================================
Rotinas da IA:
--------------

1º Exemplo: Rotina de Stand Guard
---------------------------------

[State -1, 1]
type = ChangeState
trigger1 = Ctrl
trigger1 = RoundState = 2
trigger1 = var(59) != 0
trigger1 = Random <= 650
trigger1 = P2BodyDist X <= 75
trigger1 = StateType = S
trigger1 = P2MoveType = A
value = 130

Ctrl -> Apenas se tiver o controle.

RoundState = 2 -> Esta rotina só ocorrerá durante a luta em sí, não podendo
ser acionada nem na introdução e nem no desfecho dela.

Var(59) != 0 -> Ela é de ação exclusiva da IA, não podendo ser executada
por um jogador humano.

Random <= 650 -> A probabilidade de isto ocorrer é de 65%. Desta forma, há 35% de chance de o personagem atacar também. Assim ele não fica somente na defesa.

P2BodyDist X <= 75 -> O oponente deve estar a menos de 75 pixels de distância.

StateType = S -> O personagem deve estar em pé, já que a própria
defesa é Stand (130).

P2MoveType = A -> O adversário deve estar atacando.

=====================================

2º Exemplo: Projétil
--------------------

Neste exemplo, o personagem lança um projétil qualquer contra o oponente.

;Esfera de Fogo
[State -1, 2]
type = ChangeState
trigger1 = Ctrl
trigger1 = RoundState = 2
trigger1 = var(59) != 0
trigger1 = p2bodydist X >= 140
trigger1 = Random <= 400
trigger1 = statetype = S
trigger1 = p2statetype != C
value = 1200

Diferenças em relação ao primeiro exemplo:
- Distância em relação ao oponente em que a IA executará a rotina: X >= 140 (pixels)
- Probabilidade de a rotina ocorrer: 40%, Random <= 400
- Dependendo do projétil, o adversário não pode estar agachado. "P2statetype != C"

Coloquei este segundo exemplo para que você perceba o que é básico em uma rotina.
Triggers que definem controle, distância, probabilidade e estado do personagem são
fundamentais. A criatividade e bom senso do programador definirão o que mais será
colocado na rotina.

-> Se for usar trigger2, 3, 4 e assim por diante, coloque "RoundState = 2"
e "var(59) != 0" em Triggerall. A ordem das rotinas pode ser qualquer uma.
O importante é a chance de ocorrência da rotina (usando-se Random, GameTime,...).

--------------------------------------------------------------------------------------
As rotinas, tanto no CMD como no CNS, são parecidas. Mas há particularidades,
como as que estão logo abaixo.

Rotinas no CMD:
---------------
Assim como a Seqüência de Comandos vem antes dos comandos do seu personagem,
as rotinas da IA também devem vir antes das rotinas do seu char.
Nas rotinas feitas nesse arquivo deve-se usar "State -1".

Rotinas no CNS:
---------------
São parecidas com as do CMD, mas nas rotinas no CNS deve-se usar
"State -2" ou "State -3". Alguns programadores optam por fazer as rotinas em outro
arquivo CNS, mas isto não é regra, apenas para ficar organizado.

Para ser mais claro, em ambos os casos as rotinas vêm logo abaixo do Sctrl VarSet.

Exemplo:

Se fosse no CMD, teríamos:

[Statedef -1]

;-------------------------
; Inteligência Artificial
;==============

.
.
.
trigger13 = command = "CPU_13"
trigger14 = command = "CPU_14"
trigger15 = command = "CPU_15"
trigger16 = command = "CPU_16"
v = 59
value = 1

(Coloque as rotinas a partir daqui, em "State -1")

Se fosse no CNS, teríamos:

[Statedef -2] ou [Statedef -3]

;-------------------------
; Inteligência Artificial
;==============

.
.
.
trigger13 = command = "CPU_13"
trigger14 = command = "CPU_14"
trigger15 = command = "CPU_15"
trigger16 = command = "CPU_16"
v = 59
value = 1

(Coloque as rotinas a partir daqui, em "State -2" ou "State -3")

-> Nas Rotinas, o Sctrl ChangeState é o mais usado, já que é ele
que muda o estado do personagem.
Porém, verifica-se em alguns personagens o uso de Sctrls como
PowerAdd, PowerSet, LifeAdd em seus CMDs.
Sctrls como AssertSpecial, Helper, Explod, HitBy/NotHitBy, Playsnd
são alguns exemplos que podem ser aplicados na IA feita no arquivo CNS.
Lembre-se de colocar em toda rotina, seja qual for o Sctrl,
os triggers "RoundState = 2" e "Var(59) != 0".
Eles são muito importantes (explicado no 1º exemplo de Rotinas da IA).

--------------------------------------------------------------------------------------
Agradecimentos:

- Ixnaydk e Midnight Spirit: por me ensinarem o funcionamento da Inteligência Artificial.

--------------------------------------------------------------------------------------

Espero que o tutorial o auxilie durante a criação de Inteligência Artificial.

Se tiver alguma dúvida, contacte-me por e-mail.

Boa Sorte,

Equinócio.

Mensagem editada por Equinócio - Segunda, 24/01/2011, 4:06 PM
 
carlos8080Data: Segunda, 24/01/2011, 2:48 PM | Mensagem # 2
Criador
Grupo: Usuários
Mensagens: 480
Awards: 0
Reputação: 11
Status: Offline
u.u mt bom te postado aki man ^^
foi atraves desse tuto q eu aprendi a faze AI xD
flws man



------------------------------------Projetos---------------------------------------

C_Itachi - 30%

Hidan Sheet - 5%
 
FMitData: Segunda, 24/01/2011, 3:26 PM | Mensagem # 3
Criador
Grupo: Usuários
Mensagens: 706
Awards: 3
Reputação: 18
Status: Offline
mano, muito sinistro O_O
e eu pensava que era dificil u_u'
eu odeio var /FATO.
Mas vou começar a fazer a AI do meu char com esse tutorial
valeu man, e parabéns \o


 
itachi-senseiData: Segunda, 24/01/2011, 3:33 PM | Mensagem # 4
Editor
Grupo: Usuários
Mensagens: 162
Awards: 0
Reputação: 11
Status: Offline
Num li tudo com calma, mas parece ser bem explicado.
Vo tentar faze isso no meu proximo char.


 
ThunderbertData: Segunda, 24/01/2011, 3:53 PM | Mensagem # 5
Criador Iniciante
Grupo: Usuários
Mensagens: 343
Awards: 0
Reputação: 19
Status: Offline
Cara, esse tuto é ótimo *_*
Eu usei mto esse método pra fazer AI o/
Só q o MUGEN 1.0 trouxe uma facilidade mto grande para AI xD
Pra manter o esquema de VAR, ao invés de usar os Triggers com comandos, é só usar um único trigger com AILevel xD
Mas tb dá pra fazer sem VAR no MUGEN 1.0, ao invés de usar a Var como trigger, usa o AILevel como trigger ^^




Vlw MD ²
Vlw Baka-Sennin
Vlw FM ²
 
KazushiData: Segunda, 24/01/2011, 3:56 PM | Mensagem # 6
Editor
Grupo: Usuários
Mensagens: 187
Awards: 1
Reputação: 16
Status: Offline
manolo MD já me ensinou D: -q
but...
man, muito bom :D
ficou bem explicadinho...
enfim, congrats ô/


一志先生 はたけ 白い牙...

 
taylorData: Segunda, 24/01/2011, 4:52 PM | Mensagem # 7
Editor
Grupo: Usuários
Mensagens: 158
Awards: 0
Reputação: 15
Status: Offline
Muito bom o tutorial, eu aprendi com ele, você torno facil fazer uma IA.
Valeus mesmo cara o/
vai ajudar muita gnt aew que ta começaandoo o/


 
TidusData: Segunda, 24/01/2011, 9:38 PM | Mensagem # 8
Criador
Grupo: Administradores
Mensagens: 557
Awards: 0
Reputação: 25
Status: Offline
Quote (Fernandinho_FM)
mano, muito sinistro O_O
e eu pensava que era dificil u_u'
eu odeio var /FATO.
Mas vou começar a fazer a AI do meu char com esse tutorial
valeu man, e parabéns \o

Eu tinha notado que muita gente na AM não fazia AI então pedi ao Equinócio para postar o tutorial dele que eu considero muito bom =]




Conhecimento é a única virtude e ignorância é o único vício.

Twitter - Follow Me
www.jgnetwork.com.br | JG Network - Desenvolvimento em Web.


 
EquinócioData: Segunda, 24/01/2011, 11:11 PM | Mensagem # 9
Iniciante
Grupo: Usuários
Mensagens: 12
Awards: 0
Reputação: 0
Status: Offline
Valeu pessoal. happy

Foi Tidus que, nas nossas conversas no MSN, pediu para que o tutorial de IA fosse postado na Anime Mugen.

E acho muito bom poder ajudar de alguma forma aquela que acredito ser uma grande comunidade de engines programáveis. wink

Precisando, estou aí para ajudar! wink

 
truerockleeData: Segunda, 24/01/2011, 11:46 PM | Mensagem # 10
Editor
Grupo: Usuários
Mensagens: 173
Awards: 0
Reputação: 14
Status: Offline
Show o tuto de AI /o/
Vou tentar usar no meu próximo char *o*
Vlw por postar (;
E vlw ao Tidus por pedir a vc pra postar xD

Ciao ciao i-i


Se pá, foda-se tudo :]
Ñ gostou? Chupa, é de uva ._.
 
Naruto_MDData: Terça, 25/01/2011, 10:55 AM | Mensagem # 11
Criador Iniciante
Grupo: Usuários
Mensagens: 391
Awards: 3
Reputação: 26
Status: Offline
Quote (Kazushi)
manolo MD já me ensinou D: -q

ironia mod ?

muito bom o tutorial cara, parabens cara e brigado por postar ^^

flws...


Satanás está obtendo êxito por meio da televisão de uma forma impossível através de qualquer outro tipo de invasão demoníaca.
Por meio desse ídolo que fala, ele pode realizar nesta geração o que realizou no jardim do Éden. Mas os sodomitas estão aqui agora - em nossos lares. E somos agora os cegos.
Escritores, atores homossexuais apregoam seu direito maligno bem diante de nossos olhos, e quer você admita ou não, você e todos os outros em sua casa estão debaixo de um ataque sodomita demoníaco. (David Wilkerson)
 
GotagzData: Terça, 25/01/2011, 11:53 PM | Mensagem # 12
Aprendiz Destaque
Grupo: Administradores
Mensagens: 149
Awards: 0
Reputação: 6
Status: Offline
Obrigado por postar aquio, tutorial muito bom, vou colocar ele no site com seus créditos, ok?

Essa IA é aquela fixa né, vc sabe IA que muda com a dificultade colocada no mugen? se sim, é muito complicado?


 
ThunderbertData: Quarta, 26/01/2011, 8:11 AM | Mensagem # 13
Criador Iniciante
Grupo: Usuários
Mensagens: 343
Awards: 0
Reputação: 19
Status: Offline
Gotagz, eu estou usando um esquema no Lucario q estou fazendo q AI muda de acordo com o AILevel, tipo, a diferença nem é mto grande entre um AILevel e outro, mas dá uma pequena diferença xD
Vou postar um code da AI dele pra poder exemplificar
Quote
; AI Cotovelada
[State -1, AI Cotovelada]
Type = ChangeState
Value = 205
TriggerAll = Pos Y = 0
TriggerAll = AILevel
TriggerAll = RoundState = 2
Trigger1 = StateType = S
Trigger1 = Ctrl = 1
Trigger1 = P2BodyDist X <= 50
Trigger1 = Random <= (Ceil((152.0/8.0)*AILevel))-1.0
Trigger2 = StateNO = 201
Trigger2 = MoveContact
Trigger2 = Random <= (Ceil((250.0/8.0)*AILevel))-1.0

Como eu disse num post ali pra trás, existe o Trigger AILevel no MUGEN 1.0, esse trigger retorna o valor atual da dificuldade da AI
O TriggerAll = AILevel vai fazer com q seja possível de ser feito o golpe somente se a AI estiver ativada
O segredo pra esta no Random
Como o AILevel retorna o valor atual da AI, eu posso usá-la para modificar a porcentagem de chance q o golpe poderá ocorrer!
O cálculo q eu fiz foi o seguinte:
((Porcentagem de Chance na AILevel 8/8)*AILevel)-1
O Ceil eu usei para arredondar os valores para baixo, pois não existe Random com valor decimal, os números tb estão todos na forma decimal (tipo 250.0) para q o Mugen possa trabalhar com os números decimais e depois arredondar, o -1 no final é pq o Random vai de 0 a 999, e não de 1 a 1000
Então assim o Random irá ter um valor menor para AILevel menor, ou seja, a AI vai ter menos chance de realizar determinados movimentos em AILevel menor ^^
Espero ter explicado bem xD




Vlw MD ²
Vlw Baka-Sennin
Vlw FM ²
 
GotagzData: Quinta, 27/01/2011, 6:56 AM | Mensagem # 14
Aprendiz Destaque
Grupo: Administradores
Mensagens: 149
Awards: 0
Reputação: 6
Status: Offline
Quote (Thunderbert)
Gotagz, eu estou usando um esquema no Lucario q estou fazendo q AI muda de acordo com o AILevel, tipo, a diferença nem é mto grande entre um AILevel e outro, mas dá uma pequena diferença xD
Vou postar um code da AI dele pra poder exemplificar

Humm.. eu não conhecia esse comando do 1.0, vou testar depois. Obrigado.


 
  • Página 1 de 1
  • 1
Buscar:

Copyright Anime Mugen © 2025 Hospedado por uCoz
Refresh Smileys Manager
Mini-chat