Criei uma IA invencivel (até agora é o que parece...) para o jogo da velha.
Se alguém conseguir derrotar o computador, por favor poste como fez para derrota-lo. Afinal, quero construir uma IA invencivel mesmo. :)
Fiz um jogo da Velha em C++ com 2 opções de jogo.
· Jogador contra Jogador (mesmo computador...)
ou
· Jogador contra Computador
Divirtam-se!
Quero ver quem vence o computador hein... :P
[1] Comentário enviado por birilo em 12/05/2005 - 08:52h
Fala cara....
Eu fiz uma vez um algoritmo pra jogo da velha com uma IAzinha vagabunda (tem até um script no site)...
To fazendo outro um pouco melhor... realmente invencível
Olha a idéia, trabalha-se com árvores.
Inicialmente tem-se 9 nós, simbolizando as 9 casas livres do jogador. Ou seja, as 9 posições onde o computador possa marcar, e ainda vencer. Cada um desses 9 nós, terá 8 nós filhos, que serão as 8 jogadas aonde o Jogador pode marcar. Desses 8 nós, cada um terá 7 filhos, que será as posições que o computador pode marcar, e que poderá ganhar ou empatar.... e assim vai. O importante é que a arvore só contenha caminhos das posições aonde poderá ocorrer a vitória/empate da IA
Deste modo, o computador irá conhecer todas as jogadas possíveis, e no pior caso, a árvore terá 9! nós.
O interessante dessa inteligência (na verdade é um brute-force) é que é realmente impossível do jogador ganhar, visto que aquelas jogadas que se fazem nos 2 cantos, e depois no meio, para ter duas possibilidades de vitória, é inicialmente barrada pela IA. E qualquer outro tipo de jogada, é barrada mais facilmente ainda...
Ainda não coloquei o algoritmo aqui, porque está com problema pra calcular a árvore. Mas breve estará disponível... Mas fica a idéia pra quem quiser "filosofar" no assunto...
Não entendi muito bem seu metódo para desenvolver a IA, se for possÃvel me contatar e me explicar um pouco mais sobre ela, ficarei muito feliz e agradecido.
Me interesso bastante pelo conhecimento, seja ele qual for, e IA realmente chama minha atenção, se você quiser desenvolver algum projeto baseado no assunto, ficaria feliz em ajuda-lo.
Podes me contatar por MSN e por e-mail.
Meu MSN: tn_negri@hotmail.com
Meu e-mail: hunzinho@gmail.com
[3] Comentário enviado por birilo em 12/05/2005 - 16:49h
Então cara....
Na verdade a minha idéia original era fazer um algoritmo para xadrez. Não deu. Tipo, ficou algo como 64 elevado a N, onde n é o número de jogadas necessárias para acabar o jogo....Incrívelmente grande o número de nós necessários.
Tentei com damas, mas ficou algo muito grande também, dae reduzi para um jogo da velha.....
Então, ser brute-force significa que ela é inteligente por força bruta, ou seja: Não existe bem uma IA. Por exemplo, os nossos algoritmos precisam verificar todas as jogadas possíveis, para achar uma solução. Um algoritmo com IA não iria verificar posições "inúteis".
Tem um código fonte q um cara fez de monografia sobre IA no xadrez, usando algoritmos genéticos... Eu não intendo nda disso, mas a idéia do cara dá pra pegar no artigo... dê uma procurada no google.
Qdo tiver mais informações te contato... Não cheguei a testar seu código, pq to sem linux aqui, mas essa semana ainda eu testo e te digo oq achei...
Esta IA está com defeito, tem várias brechas para ganhar do computador.
No update tem a IA arrumada e está em SDL (modo gráfico) utilizando Mouse e tudo mais. Está bem melhor..
[5] Comentário enviado por fredwind em 01/10/2005 - 11:32h
pow kra eu ja percbi q c gosta de um joguinho da velha!!!! ja vi alguns códigos q vc posta por aqui!! kra eu sou iniciante em linguagem C, mas sou louquinho pra criar um jogo desses, acho q c pode me ajudar. Num pode? eu qria umas diks, qria começar com um código pequeno!!! me da uma mã kra!!! me manda um email faloww!!! valeuuuu!!
[8] Comentário enviado por vinicius.nsilva em 01/10/2006 - 11:04h
E ai cara beleza????
to precisando fazer um jogo da velha tb com o uso de IA,
porem eu não consigo entender a medar do algoritimo
que faz a busca pela melhor escolha! vc teria algo para colaborar
no meu programa???
[9] Comentário enviado por gustavofiorese em 23/04/2009 - 19:51h
E ai Beleza galera!!
Galera to precisando muito do codigo fonte do jogo da velha em fortran, Trabalho de faculdade é foda, a UFES ainda utiliza FORTRAN, nos cursos de engenharia civil.
Eu gostei muito do seu jogo brohter, com o cumputador invencivel, se vcs puderem me ajudar agraço muito, o nivel do seu jogo é otimo!
[10] Comentário enviado por gustavofiorese em 23/04/2009 - 19:57h
E ai Beleza galera!!
Galera to precisando muito do codigo fonte do jogo da velha em fortran, Trabalho de faculdade é foda, a UFES ainda utiliza FORTRAN, nos cursos de engenharia civil.
Eu gostei muito do seu jogo brohter, com o cumputador invencivel, se vcs puderem me ajudar agraço muito, o nivel do seu jogo é otimo!
[11] Comentário enviado por jomarumu em 03/01/2010 - 17:05h
KKKKKKKKK
Só empate.
É bem chato não perder e nem ganhar, mas é um ótimo software, mostra a capacidade de um simples código ser tão bom (ou melhor) quanto um humano.
O código funciona perfeitamente.
Parabéns.
[12] Comentário enviado por xoshy em 20/06/2010 - 20:30h
Eu sempre achei que o mais difícil de uma IA é torná-la VENCÍVEL (exceto para jogos muito complexos, como o xadrez), pois é fácil para um computador analisar todas as possibilidades e avaliar qual é a melhor, mas em que momento ele não irá escolher a melhor e deixar o pobre humano ganhar? Isto ser aleatório não tem graça, tem que ser possível escolher a "força" da IA. E isso eu não tenho ideia ainda de como fazer.
[13] Comentário enviado por matheusftboy em 05/01/2011 - 22:35h
estou trabalhando num projeto semelhante, porém em python, e estou pensando em fazer algo usando árvores minimax como estrutura principal de decisão, e queria saber se alguém já fez isso em python e se tem como simular (ou implementar de fato) uma minimax em python
[14] Comentário enviado por heldercarvalho em 19/12/2014 - 20:05h
Sei vai ser dificil alguém me responder, pois estes postes são de muito tempo atrás. Mas preciso dar AI a este código do jogo da velha abaixo para meu projeto para meu projeto. Por favor se alguém quebrar essa pra estarei super grato.
// the loop routine runs over and over again forever:
void loop()
{ char comando;
int conta;
if (Serial.available() > 0) //verifica se algo foi enviado para a porta serial
{ comando = Serial.read(); //ler a porta serial
if (comando == 'N') //verifica ser foi enviado 'N' para inciar novo jogo
{ for (conta=0;conta<9;conta++) tabuleiro[conta] = '-'; // incializa tabuleiro
contamarcacao = 0; //zera contador de marcacao
Serial.print('n'); //envia 'n' indicando que inicia novo jogo
}
if ((comando == '#') & (contamarcacao == 0)) joga(); //verifica se eh para iniciar o jogo
if ((comando >= 48) & (comando <= 56) & (tabuleiro[comando-48] == '-')) //verifica se recebeu uma marcaco valida e vazia
{ tabuleiro[comando-48] = 'o'; // adversario devera ser 'o'
contamarcacao = contamarcacao + 1;
if (contamarcacao < 9) joga(); // testa para verificar se ainda nao tiveram 9 marcacoes
}
if (contamarcacao == 9) Serial.print("E"); // testa se tiveram 9 marcacoes, se sim, considera empate
}
}
void joga (void) // realiza uma jogada atraves de sorteio de um numero
{ char marcacao;
do
{ marcacao = random(0,9); //sorteia um numero
} while (tabuleiro[marcacao] != '-'); //repete sorteio ate ter uma marcacao valida
tabuleiro[marcacao] = 'x'; //marca tabuleiro com 'x'
marcacao = marcacao + 48; //marcacao recebe valor em ascii
Serial.print(marcacao); //envia valor pela serial
contamarcacao = contamarcacao + 1;
};