Jogo de Xadrez

29 respostas
guisantogui

Gente estou pensando em implementar um simples jogo de xadrez em 2D mesmo, mas na modelagem me surgiu uma dúvida como eu vou fazer para fazer as peças se movimentarem, tipo pensei em usar uma matriz e colocar os Objetos “Peças” la dentro, mas como eu posso implementar o metodo “anda()” de cada “Peça” ??

29 Respostas

renamed

Eu faria algo do tipo.

abstract class Peca{ public abstract void anda(/*Parâmetros*/); /*Outros métodos*/ }

class Rei extends Peca{/*código aqui*/} class Peao extends Peca{/*código aqui*/} class Cavalo extends Peca{/*código aqui*/} class Torre extends Peca{/*código aqui*/}

guisantogui

Sim sim, eu pensei em algo bem parecido, e as peças teriam um enum para definir a cor, acho que já sei como andar, tipo mas tipo o cavalo vai ter 8 tipos de anda diferente =S o rei mais 8 o peão 2 a rainha 8 tb, a torre 4 (todos contando para frente e para traz) será que naum tem como agregar tudo em um só? Mas como? :?

Acho q o problema é definir como saber se essa peça pode ir para aquela posição da sua posição atual!!?

renamed

Embora tenha várias formas de andar, todo seguem um padrão…

O cavalo só anda em L
O rei só anda uma casa pra qualquer direção
etc etc

Sua função andar deve receber a origem e o destino e verificar se sua peça pode seguir aquele caminho.
Você deverá ter uma classe Tabuleiro que efetivamente deve fazer sua peça andar.

guisantogui

Então essa classe tabuleiro vai ser onde eu vou guardar a matriz com todas as peças instanciadas, certo? Mas já tenho outro problema como eu vou verificar o checkMate? tipo o rei tem q estar cercado e sem possibilidade de fugir, essa vai ser $#&*$(F

ViniGodoy

Não tem muita saída. Vai acabar tendo que implementar as regras específicas de cada peça.

Pior do que isso, é quando vc tiver que implementar as jogadas combinadas como o roque.
E as jogadas especiais como comer “en passant”.

renamed

Pois é, não existe jogo de xadrez “fácil” hehehe

ViniGodoy

O checkmate direto é até simples. O difícil é detectar o empate por cheque perpétuo.

guisantogui

ViniGodoy:
Não tem muita saída. Vai acabar tendo que implementar as regras específicas de cada peça.

Pior do que isso, é quando vc tiver que implementar as jogadas combinadas como o roque.
E as jogadas especiais como comer “en passant”.

Bah vinny tinha esquecido completamente disso!!

Acho q vou fazer um jogo de Damas :lol:
ehwehuwheuww

Bom, “hands to work”

guisantogui

Para interface eu pensei em fazer uma frame com varios paineis (o numero de casas do tabuleiro = numero de paineis) e dai eu só setava a imagem nos paineis para fazer o movimento, será q fica legal?

luizlopes

guisantogui,

achei interessante o seu projeto, recentemente fiz um joguinho de damas mas praticamente nem criei uma gui, só criei testes e implementei.

A sua idéia de interface (gui) parece ser conveniente, mas a principio vc deve se preocupar é com a interface lógica, pois essa é a raiz do projeto. Se você estiver interessado posso enviar o meu projeto de damas pra você ver, não sei se ajuda muito…

guisantogui

Claro q aceito, afinal todo material é bm vindo ainda mais pq estou dando os “segundos” passos no JAVA =D

luizlopes

legal, se pãs vc cria uma gui pra mim :smiley:

tb sou iniciante, como que eu envio o projeto pra vc? por e-mail?

guisantogui

Pode ser, [E-MAIL REMOVIDO PELA MODERAÇÃO] mande mp!

=D

guisantogui

Vou continuar com a modelagem quando eu começar a implementação do joguinho de Xadrez eu volto ao guj para pedir socorro :smiley:

Abdon

Nunca se esquecendo de verificar o empate por repetição de lances por três vezes consecutivos tb!

Tb existe outra condição de empate de quando as peças no tabuleiro são insuficientes para um xeque mate (tipo rei x rei)

ViniGodoy

Removi seu e-mail ali atrás, gui. Lembre-se que o fórum é público e os softwares para mandar SPAM e lixo no seu e-mail procuram por endereços perdidos na rede. O recurso de MP está aí para isso. :slight_smile:

guisantogui

Gente estive pensando, esse meu xadrez só vai servir para se jogar humano X humano, é muito complicado implementar um algoritmo que me permita jogar humano X computador ?? (ou seja a parte do computador neh) :B

vlw!

guisantogui

guisantogui:
Gente estive pensando, esse meu xadrez só vai servir para se jogar humano X humano, é muito complicado implementar um algoritmo que me permita jogar humano X computador ?? (ou seja a parte do computador neh) :B

vlw!

Deve ser dificil mesmo, já q ninguem respondeu! :?

ViniGodoy

guisantogui:
Gente estive pensando, esse meu xadrez só vai servir para se jogar humano X humano, é muito complicado implementar um algoritmo que me permita jogar humano X computador ?? (ou seja a parte do computador neh) :B

Oi, desculpa não responder. Deixei para responder depois e acho que acabei arquivando o e-mail do tópico no meu gmail.

Olha, para fazer uma IA virtualmente imbatível para amadores, é até simples. Você pode facilmente fazer o computador prever duas ou três jogadas, e quem joga xadrez só de “alegre” já vai ter muitas dificuldades em bater. Você faz isso através de uma árvore de decisão, e de uma busca minimax.

Agora, para fazer uma IA que faça jogo posicional o problema é muito mais embaixo. Primeiro, você mesmo terá que entender o funcionamento do jogo posicional, entender certinho o valor das peças, e o impacto que cada uma tem no controle do tabuleiro. Ou seja, tem que entender como um profissional enxerga o tabuleiro, fazer o script das aberturas clássicas, e entender sua importância no controle das casas.

Há sempre também a possibilidade de fazer uma IA burra. Escolher uma jogada aleatoriamente na lista de disponíveis, e faze-la. Você até pode ver antes a lista das peças que podem ser tomadas, tomar aleatoriamente as que aumentem a sua pontuação no tabuleiro.

guisantogui

Acho q vamos começar com a burra certo!

Eu ateh pensei em fazer um jogo da velha soh para mim tirar uma base para partir pro Xadrez, acha que é uma boa decisão? ou devo me focar no Chess?
Mais uma pergunta, nunca usei Threads, muito provavelmente irei ter que usar algumas sincronizadas, não? Já ouvi que isso é complicado!
E para fechar comecei a implementação hoje e já me deparei com um problema eu tenho os metodos anda() e come() eu naum terei q passar para eles a matriz atual do tabuleiro para saber onde posso me mover e para onde comer?

PS.: mover e comer por causa da movimentação do peão!
Obrigado!

peczenyj

Seria interessante mostrar o algoritmo de jogos de xadrez de jogos simples como um Atari 2600

http://www.atariage.com/screenshot_page.html?SoftwareLabelID=581

Acho que é uma tabelinha simples de pesos e valores, como os jogos tinham um tamanho reduzido o algoritmo deve ser muito enxuto.

ViniGodoy

guisantogui:
Acho q vamos começar com a burra certo!

Eu ateh pensei em fazer um jogo da velha soh para mim tirar uma base para partir pro Xadrez, acha que é uma boa decisão? ou devo me focar no Chess?
Mais uma pergunta, nunca usei Threads, muito provavelmente irei ter que usar algumas sincronizadas, não? Já ouvi que isso é complicado!
E para fechar comecei a implementação hoje e já me deparei com um problema eu tenho os metodos anda() e come() eu naum terei q passar para eles a matriz atual do tabuleiro para saber onde posso me mover e para onde comer?

PS.: mover e comer por causa da movimentação do peão!
Obrigado!

Dificilmente jogos usam muitas threads. O máximo que você vai ter é uma thread em background, processando.

É uma boa começar por um jogo mais simples sim. O jogo da velha é uma boa, desde que você não tente resolver a IA dele com vários ifs (isso é possível no velha, mas impossível no xadrez). É uma boa para você pelo menos já montar sua classe de árvore, sua busca minimax e já ver a organização geral do programa.

guisantogui

Valeu vini, vou deixar o xadrez hoje e vou tentar modelar e começar a implementação do jogo da velha ainda hoje, vlw pela força de todos! :smiley:

ViniGodoy

Recomendação de livro (não serve para jogos de tabuleiro, mas tenho a impressão que você vai curtir): Programming Game AI By Example. E como diz o nome é “by Example”.

Mas é escrito em C++.

guisantogui

Tchê vou te dizer que antes de ir para a livraria vou ter que dar uma passada no cursinho de inglês :?

ViniGodoy

Já que estamos falando de IA em games, outro grande desafio pode ser fazer uma IA jogadora de xadrez que seja burra, mas que não pareça intencionalmente burra. Ou seja, ela deveria emular os erros feitos por diferentes perfis de jogadores: como principiantes, crianças, ou jogadores iniciantes que já tenham algum conhecimento básico da estrutura do jogo (conhecem algumas aberturas, mas se perdem no meio do jogo, ou são defensivos demais, agressivos demais, etc).

Acreditem, fazer uma IA burra pode ser um trabalho tão ou mais complexo quanto fazer uma IA imbatível. No caso do xadrez, é até fácil fazer uma IA relativamente convincente, principalmente pq a maioria das pessoas que joga não consegue identificar facilmente esses perfis. Mas tente fazer isso com um jogo de ação, como pong, e vc vai ver o trabalhão que dá.

Outro desafio de IA para games é projetar uma IA que seja esperta, mostre todo seu potencial, lute contra o jogador e ainda perca no final. E, claro, perca sem parecer que entregou o jogo.

guisantogui

Apesar de eu já estar bem apavorado com a IA do Xadrez parece ser divertido criar IA’s para os mais diferentes tipos de jogos, mas a maneira correta de se fazer isso não seria com SCRIPT’s, talvez usando PROLOG!

ViniGodoy

Scripts são uma forma.

Outra é cadastrar dados, como a probabilidade de um jogador de determinado tipo preferir essa ou aquela jogada.

ViniGodoy

ehehehe… e a idéia não era te aterrorizar. Mas geralmente minhas turmas de IA ficam com um sorriso bobo na cara e olhos brilhando quando começo a falar sobre fazer uma IA burra, ou uma IA que perca, mas que não pareça entregar o jogo. É como se um novo mundo de possibilidade se abrisse diante deles.

Acho que pq nas faculdades, sempre ensina-se a IA clássica, que busca a perfeição. E em games, usamos uma abordagem mais humanística, baseada no teste de turing. Afinal, ninguém gosta de jogar para só perder.

Criado 1 de julho de 2010
Ultima resposta 14 de jul. de 2010
Respostas 29
Participantes 6