por pescadorDigital » Domingo Mai 15, 2005 17:11
Mais uma vez, obrigado pela resposta.
Eu estou a usar threads num trabalho prático em que preciso de implementar um jogo de Damas, toda esta parte já está feita, e, para adiantar mais alguns pormenores que não sei se serão necessário, estou a usar o algoritmo Minimax com cortes alfa-beta mas o programa que estou a usar tem como parâmetros: o tempo e tolerância, tempo é um tempo dentro do qual o programa deve dar uma resposta, tendo ainda mais um pouco de tolerância. Todos os tempos vêm em segundos.
O algoritmo minimax é recursivo e parte de um estado inicial, que pode ser representado por um estado actual do jogo de Damas, e cria uma árvore a partir do qual se pode ter uma ideia de todas as jogadas possíveis. Uma vez que o algoritmo é de profundidade primeiro, terá que ser escolhida uma profundidade máxima. Mas o aspecto mais importante é receber uma jogada ao fim do tempo pedido. Assim, a minha ideia era colocar uma thread para cada jogada inicial, assim por exemplo um movimento de uma peça para a esquerda e todos os seus descendentes são executados por uma thread, uma captura fica para outra thread. Quando cada thread executar o seu trabalho, actualiza uma variável que representa a pontuação máxima para aquela jogada, assim como o movimento ou captura associada à melhor jogada. Como são variáveis a ser usadas por entre todas as variáveis, logo se vê que em princípio terão de ficar dentro de um bloco synchronized para evitar acessos simultâneos. Finalmente, existiria uma tarefa completamente diferente de todas as outras cuja missão seria simplesmente contabilizar o tempo. Existe um método Thread.sleep, penso que se poderia utilizar . A tarefa em si não faria simplesmente nada, quando ela acordasse (terminasse o tempo de "sleep") terminava o programa devolvendo a melhor jogada utilizada até ao momento.
