[JAVA] jogo de cartas | ZWAME Fórum
[JAVA] jogo de cartas
Discussão em 'Programação' iniciada por carvaljo2707, 23 de Agosto de 2012. (Respostas: 7; Visualizações: 1558)
carvaljo2707 Power Member
boas, estou a tentar criar um programa em java para jogar copas..
ja criei todas as funções e nesta fase as cartas jogadas sao aleatorias (tendo em conta as regras do jogo)..
na segunda fase queria dar inteligencia ao computador para o utilizador poder jogar contra o computador
o que vou precisar? pelo que li o algoritmo minimax é muito bom , mas aplica-se? que sugestões têm?
Se conseguires integrar Prolog (http://www.din.uem.br/~ia/ferramen/prolog/) com o teu programa, a inteligência vai-se ganhar. Existem bons algoritmos que te vão permitir, de forma acessível, dar a inteligência que pretendes ao jogo.
O algoritmo que referes segue um padrão, salvo erro, em árvore, o que para este fim não me parece o mais adequado, visto que o jogo de copa ser um pouco aleatório (provavelmente até estou enganado):
Algoritmo (Pseudo-cdigo)
profundidade limite atingida
OU Nivel Minimizador
OU Nivel Maximizador }
SE profundidade limite
Calcular valor do estado corrente
Retornar resultado
SE Nivel Minimizador
Aplicar minimax aos sucessores
Retornar Mnimo
SE Nivel Maximizador
Retornar Maximo
podes explicar melhor? aprendi java sozinho e nomes como esses nao me dizem nada ainda xd
Se tiveres tempo, aprende machine learning... é exactamente aquilo que tu queres... o algoritmo proposto penso que seja o chamado unsupervised learning, em que o jogo vai aprendendo com o tempo.
Bem, tens várias maneiras de dar inteligência ao teu jogo, mas eu explico duas:
Como só estás familiarizado com Java, se calhar é mais fácil.
O teu jogo está por turnos, certo? Sempre que começa um novo turno, chamas a função que joga a carta, que em princípio, faz uma jogada manual. Que tal "clonares" essa função, e fazer uma que escolhe uma carta aleatória?
Como é que meterias isto a funcionar em prática? Fácil. Basta quando correres o programa, dar ao utilizador modos de jogo, em que por exemplo, 1 é Player vs Player, e 2 é Player vs CPU. Depois, onde chamas a função que faz a jogada, basta meteres um switch com dois cases, onde 1 é PvP e 2 é PvC.
Na "clonagem" da função, tenta ser o mais simples possível. Podes até criar modos de dificuldade, onde fácil ele faz uma jogada possível e aleatória, ou então crias uma máquina de estados que te permita escolher a carta que é mais indicada nessa jogada. Mete Design Patterns, Minimax ou Decision Algorithms no Google, e tenta ver o que mais se adequa à tua sitaução.
Se quiseres facilitar os turnos, podes usar sockets para fazeres as tuas jogadas. No entanto, isto pode não ser preciso, porque java é Object Oriented. Deves ter um objecto Player prai criado, basta na classe dizeres que o Player é AI com um booleano ou assim, e aquando da sua criação, dizes se é humano ou AI.
Usando Prolog:
Primeiro, precisas de aprender prolog. Mas prolog é algo que facilita a criação de seres inteligentes, visto ser uma linguagem que usa lógica. Eu gosto bastante de prolog, e tenho a dizer que é super fácil de aprender. Prepara-te para recursividade.
No ficheiro .pl apenas crias regras de jogo, e pesquisas, árvores de decisão. Isto porque depois basta ligares o teu código Java ao código de prolog através de communication sockets, coisa que encontras na net a pacotes.
No Java, efectuas as jogadas, as cartas, e etc. No prolog, processas qual a jogada que deve ser feita. Ou seja, imagina o Java como a tua "interface" e o prolog como a tua "lógica".
Nelspike, falaram-me de machine learning , e descobri esta pagina: http://en.wikipedia.org/wiki/List_of_machine_learning_algorithms#Reinforcement_learning
qual é que achas que se adequa mais ao meu jogo? (so um extra, o jogo que estou a fazer é o king, que basicamente funciona como as copas/sueca, mas copas todos conhecem) xd
Com Prolog seria a maneira mais fácil, pelo menos eu acho.. Prolog é fácil de aprender a sua logica, para quem aprendeu java sozinho Prolog não sera nada de outro mundo..
Vai dando noticias do projeto, eu nunca fiz copas gostava de ver como vais por "vs Pc"
o jogo so vai ter modo vs PC xd ainda nao sei nada sobre como por com outros jogadores, nas proximas ferias talvez, natal xd
pelo que li na diagonal prolog envolve inteligencia artificial e logica, cadeiras que vou ter este semestre na faculdade..
eu vou dando noticias, se nao descobri uma maneira facil envolvendo java vou pensar eu num algoritmo e faço