segunda-feira, 24 de dezembro de 2007

Evolução

É com imenso prazer que anuncio uma versão funcional (não completa) do jogo do galo.
MenteGalo (BETA)

Esta versão inicial serve o propósito de "DEMO". Neste ponto estou a recrutar "beta testers", e se aceitarem o desafio enviem comentários para esta publicação com bugs encontrados ou sugestões.

Os progressos têm sido lentos dado que ando na época de frequências académicas e tenho um projecto "TOP SECRET" que estou a concluir. Mas quero ver se tenho o modo "impossível" a funcionar até o final de 2007. Uma vez concluído este modo vou passar à fase de "cosmética", entretanto ficam com uma versão visualmente pobre do jogo.

A implementação.
O modo "Dois Jogadores" foi o primeiro a ser implementado, ficou pronto à cerca de um mês atrás. O motor é relativamente simples, programei uma callback para o evento de click nos movieclips das casas, cada jogada implica que uma variável alterne entre o jogador 1 e 2, verifica em seguida se algum dos jogadores ganhou ou se empataram.
A matriz:
Uma matriz 3*3 controla o quadro do jogo, as comparações são feitas por intermédio de multiplicações. Esta operação é útil no sentido em que posso utilizar as propriedades do elemento neutro e absorvente para determinar o resultado de uma linha ou coluna do quadro.
A matriz assume exclusivamente os seguintes valores:
1 - Jogador 1 marcou uma "bola" no elemento.
2 - Jogador 2 marcou uma "cruz" no elemento.
0 - Não foi efectuada nenhuma jogada no elemento
ex:

A situação exemplificada na imagem resulta na matriz [{2,2,1},{1,0,2},{0,0,0}]
aplicando uma multiplicação á primeira linha: matriz[0][0] * matriz[0][1] * matriz[0][2] retorna o valor 4, que é insignificante, os resultados que interessam é 1 e 8, dado que determinam que jogador ganhou.
Uma vez esgotadas todas as possibilidades do jogo (Empate por preenchimento de todas as casas possíveis do jogo ou vitória de um dos jogadores), são actualizados os valores da pontuação de cada um dos jogadores, e o jogo é reiniciado.

Estes conceitos são aplicados nos restantes modos, e cada folha da árvore de soluções (jogador vs CPU) tem uma destas matrizes na sua estrutura.

Modo Jogador VS CPU
- Simples
Não é computada nenhuma solução para este nível, o programa limita-se a fazer jogadas aleatórias, até que o jogo termine. O algoritmo está programado para que as jogadas incidam sobre posições vazias(0) da matriz do jogo.

- Médio
Neste nível o programa recorre a uma árvore que se estende à profundidade de dois níveis/jogadas, procura a jogada mais sensata (Perde, Ganha e Aleatória)
- Ganha: O pc calculou que nesta jogada ele ganha.
- Perde: O pc calculou que na próxima jogada (humano) ele perde
- Aleatória: O pc não encontrou situações acima mencionadas e por isso joga ao acaso


- Impossível
Está em fase de desenvolvimento, a abordagem em que estava a trabalhar não vai de encontro ao algoritmo MinMax e vou ter de voltar a analisar e proceder a alterações. Tenho de optimizar o processo de cálculo e avaliação de pesos, nesta abordagem o programa entra num ciclo de computação de 9 níveis que demora cerca de 7 segundos, um programa que recorre a este tipo de algoritmo para calcular as soluções demora em média 1 segundo.

Modo Online:
Quero implementar a possibilidade de jogar online com outros jogadores por intermédio da tecnologia XMLsocket, mas só vou trabalhar nessa funcionalidade depois de Janeiro de 2008.

Agradecia que contribuíssem com comentários sobre o jogo.
Abraço e bom natal, caso leiam isto amanha (25 Dezembro)