Java Xadrez - jogo  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
sfing
JavaChild
[Avatar]

Membro desde: 01/11/2007 14:57:00
Mensagens: 103
Offline

Estou tentando criar um jogo de xadrez em java, alguém poderia ajudar a criar os movimentos das peças ?



[WWW]
Veronicaaa
JavaTeenager
[Avatar]

Membro desde: 30/05/2006 18:55:12
Mensagens: 189
Localização: Porto Alegre - RS
Offline

Olá.
Em primeiro lugar, você conhece os movimentos reais e legais do Xadrez? Outra, você pensou na notação que irá utilizar para endereçar cada casa? A mais utilizada é a algébrica.
E as inúmeras aberturas de um jogo Xadrez? Pelo que vi da sua classe Peao você diz que o primeiro movimento vai ser com o peão, é isso mesmo? Nem sempre isso é verdade...Você pode começar o jogo saindo com o cavalo, ou você vai obrigar o jogador a sempre iniciar o jogo com o peão do rei?
Implementar um jogo de xadrez, nâo deve ser muito facil, por isso as regras do jogo tem que estar fluindo para você.
Minha opinião.

OCP JP 6.0
rafaelglauber
GUJ Master
[Avatar]

Membro desde: 07/09/2007 23:05:20
Mensagens: 1065
Localização: Feira de Santana
Offline

dê uma olhada no projeto jose veja se tem algo que te ajude: http://jose-chess.sourceforge.net/
sfing
JavaChild
[Avatar]

Membro desde: 01/11/2007 14:57:00
Mensagens: 103
Offline

As regras e movimentações conheço muito bem, o meu maior problema é ter tempo para o desenvolvimento, pois trabalho com programação e como todo mundo já sabe estudar e trabalhar e ainda namorar não se sobra muito tempo !!!

Quero mesmo alguém para ajudar a fazer os movimento, não é que não saiba ...


Se alguém estiver a disposição ... á ajuda será muito bem vinda !!!


[WWW]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Google por xadres e encontrara MUITOS projetos em C. Dai passar para Java would be a piece of cake. Só tem um PORÉM:

sfing wrote:..., o meu maior problema é ter tempo para o desenvolvimento, pois trabalho com programação e como todo mundo já sabe estudar e trabalhar e ainda namorar não se sobra muito tempo !!!


Fazer um jogo de xadrês é MUITO difícil. Já tentei fazer um e desisti devido ao alto grau de complexidade. Envolve várias áreas de conhecimento. Não basta saber programar bem e saber jogar bem xadrês. É preciso ser muito bom em algoritmos que normalmente não são ensinados a fundo na faculdade.

[]s
Luca


Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Olá

Luca wrote:Fazer um jogo de xadrês é MUITO difícil.


Depende. Pelo jeito, o sfing quer apenas fazer um programa para mover as peças; nesse caso, a maior complexidade será desenhar as peças na tela. Porém, se ele quiser implementar a inteligência do jogo, para jogar contra o computador... Difícil é, mas não impossível. Sugiro o sfing pesquisar sobre o algoritmo MINIMAX com Alfa-Beta Pruning, e seria bom implementá-los com um jogo de tabuleiro mais simples, como damas, trilha ou mesmo jogo-da-velha, para depois se sentir capaz de implementar a inteligência de um jogo de xadrez.

Abraços

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

Proteu Alcebidiano
JavaEvangelist
[Avatar]

Membro desde: 23/06/2006 14:38:34
Mensagens: 391
Localização: Cidadão do Mundo
Offline

Nesse artigo um algoritmo para xadrez é mencionado:


[...]
an existing chess algorithm implementation was used, more
specifically the GNU GPL Chessterfield implementation
(see [5]). Alternative implementations can be integrated
relatively simply since a generic interface is used to
communicate with the algorithm.


T+

Glaucio G. de M. Melo
Don't run Alone.
[gm]² on forecasting
The world is parallel, and yet most often we program real-world applications in sequential programming languages. This is unnecessarily difficult. (Joe Armstrong).
[MSN]
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Vejam esses links interessantíssimos do site GameDev:

Chess Programming Part I: Getting Started
Chess Programming Part II: Data Structures
Chess Programming Part III: Move Generation
Chess Programming Part IV: Basic Search
Chess Programming Part V: Advanced Search
Chess Programming Part VI: Evaluation Functions

Muita atenção quando for escrever uma função de avaliação da melhor jogada. Seu algoritmo pode estar redondo, mas o computador efetuará jogadas burras caso a função de avaliação não seja bem escolhida.

Abraços

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Eu concordo com o Luca.

Mesmo implementar só os movimentos é uma tarefa bastante árdua. Explico os motivos:

1. Parte dos movimentos só são possíveis dependendo das jogadas anteriores. Exemplo:
1.1. O Roque só pode ser feito se o rei o a torre nunca se movimentaram;
1.2. O peão só pode comer "en passant" se, na jogada anterior, o peão do adversário tiver movimentado duas casas;

2. É difícil identificar certas situações de empate forçado:
2.1. Para o empate por repetição consecutiva do tabuleiro, é necessário guardar e comparar o tabuleiro a cada jogada do jogo;
2.2. É necessário um bom algoritmo para detectar o "empate por cheque infinito";

3. É trabalhoso implementar regras para garantir que um movimento que ponha o rei em risco não ocorrerá.

Não disse que nada é impossível. A maior parte das coisas aqui, nem sequer exige uma lógica complexa. Mas é um trabalho árduo, envolve muitos detalhes e demorado.

É obrigatório implementar um jogo de xadrez?

This message was edited 1 time. Last update was at 17/11/2007 09:05:43


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Schuenemann
GUJ Ranger

Membro desde: 13/01/2005 12:31:27
Mensagens: 854
Offline

Isso não é lá tão difícil, Vini.

1.1. O Roque só pode ser feito se o rei o a torre nunca se movimentaram;
1.2. O peão só pode comer "en passant" se, na jogada anterior, o peão do adversário tiver movimentado duas casas;

Um boolean para guardar se essas 3 peças já se moveram e se a jogada anterior foi um peão andando duas casas.
No servidor FICS, o servidor envia essas informações a cada jogada, para que o cliente saiba se pode fazer essa jogada.

2.1. Para o empate por repetição consecutiva do tabuleiro, é necessário guardar e comparar o tabuleiro a cada jogada do jogo;
2.2. É necessário um bom algoritmo para detectar o "empate por cheque infinito";

Existe empate por xeque infinito? Acho que cai no empate por repetição (que não precisa ser consecutiva) ou empate por 50 lances.

Eu acho mais difícil o movimento das peças, detectar se existe uma peça bloqueando o caminho, se a jogada deixa o rei em xeque, etc. Já vi uma biblioteca Java pra isso; não lembro o nome, mas tenho certeza que você acha no google.


Sobre um computador jogar xadrez (que deve MUITO difícil), existe um opensource e muito forte, o Crafty. Já o vi derrotando mestre.
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

ViniGodoy wrote:Eu concordo com o Luca.


Há muitos anos atrás pensei em desenvolver um jogo de xadrês para treinar algumas aberturas. Procurando na Internet achei vários engines open source em C. Estudando um pouquinho deles percebi que a complexidade é bastante grande e que eu não conseguiria fazer como projetinho de fim de semana e ainda levar minha vida normal que na época incluia velejar e correr.

Se o cara quiser dedicar muitas horas por dia durante um bom tempo e se conseguir dividir as tarefas com pelo menos mais 2 desenvolvedores, acho viável usar o que já existe em C para converter para Java.

Sozinho nas horas vagas é melhor ele escolher um jogo mais fácil.

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Pessoal

Todos nós concordamos que um jogo de xadrez não é trivial a ponto de ser feito em um fim de semana (na verdade, nem mesmo o jogo-da-velha é). Entretanto, jogos de xadrez já são construídos há muito tempo, e já existem vários algoritmos e estratégias consolidadas para implementá-lo. Ou seja, não é nada EXTREMAMENTE difícil: nada que um pouco de estudo e organização não ajudem.

Quem se interessar, leia os links que passei, e procure estudar os algoritmos e as estruturas de dados envolvidas.

Abraços

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

ffranceschi
JavaChild
[Avatar]

Membro desde: 23/08/2006 11:07:21
Mensagens: 130
Offline

Ja ouvi falar que quando o Kasparov jogou contra o Deep Blue, todas as partidas deles estavam cadastradas e o computador saberia jogar exatamente o que jogar contra cada lance ele fazia. Entao na ultima partida ele jogou de pretas uma defesa que ele nunca tinha jogado, tentando "enganar" o computador, mas ele errou um lance DUVIDOSO (que acredita-se que ele entregou mesmo).
Xadrez talvez pra implementar é melhor voce sempre jogar de preta, pq ela que defini todas as linhas de defesa que quer jogar, ai fica menos menos dificil pra implementar

Fernando Franceschi
Blog - http://ffranceschi.wordpress.com/
Twitter - http://twitter.com/ffranceschi1
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Schuenemann wrote:Isso não é lá tão difícil, Vini.


Conforme eu falei ali em cima, a questão exatamente ser difícil, mas de ser trabalhoso. E o colega disse que estava sem tempo.

Veja o caso da jogada en-passant. Você não deve guardar somente "um boolean se andou duas na última jogada". Mas também o turno em que o peão andou duas casas. Afinal, a lance en-passant só pode ocorrer na jogada seguinte ao movimento. Além disso, o peão a ser comido estará ao lado do peão que come (e não na diagonal, como seria na maior parte das jogadas). Ou seja, provavelmente haverá um if só para tratar essa situação.

Eu mesmo já desenvolvi um jogo de xadrez completinho, com o movimento de cada uma das peças, mas quase sem IA (era só com base em busca heurística mesmo). Detectava também o fim de jogo, finais possíveis, fazia contagem de lances, etc. Nenhuma das lógicas é realmente difícil, mas se você quiser caprichar é realmente trabalhoso.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Schuenemann wrote:Isso não é lá tão difícil, Vini.
Existe empate por xeque infinito? Acho que cai no empate por repetição (que não precisa ser consecutiva) ou empate por 50 lances.


Tem razão. Aqui eu confundi. É a mesma situação mesmo.

Na verdade, a outra situação de empate que eu não me recordava é quando em 50 movimentações não tiver acontecido nenhuma captura de peça ou movimento do peão.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team