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” ??
Jogo de Xadrez
29 Respostas
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*/}
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!!?
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.
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
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”.
Pois é, não existe jogo de xadrez “fácil” hehehe
O checkmate direto é até simples. O difícil é detectar o empate por cheque perpétuo.
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”
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?
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…
Claro q aceito, afinal todo material é bm vindo ainda mais pq estou dando os “segundos” passos no JAVA =D
legal, se pãs vc cria uma gui pra mim 
tb sou iniciante, como que eu envio o projeto pra vc? por e-mail?
Pode ser, [E-MAIL REMOVIDO PELA MODERAÇÃO] mande mp!
=D
Vou continuar com a modelagem quando eu começar a implementação do joguinho de Xadrez eu volto ao guj para pedir socorro 
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)
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. 
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!
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) :Bvlw!
Deve ser dificil mesmo, já q ninguem respondeu! :?
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.
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!
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.
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.
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! 
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++.
Tchê vou te dizer que antes de ir para a livraria vou ter que dar uma passada no cursinho de inglês :?
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.
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!
Scripts são uma forma.
Outra é cadastrar dados, como a probabilidade de um jogador de determinado tipo preferir essa ou aquela jogada.
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.