Javafree
Página Inicial do Fórum > Java Básico

JOGO DE XADREZ



Criar novo tópico   Responder tópico


  1. mrcc72
    Posts:3


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    PESSOAL PRECISO DE AJUDA EU CONSEGUI CRIAR O TABULEIRO, COLOQUEI AS PEÇAS AGORA PRECISO MIVIMENTAR ELAS ALGUEM PODE ME AJUDAR, A PEÇA EM ESPECIAL E O CAVALO

    OBRIGADO


    MARCOS



  1. vfpamp
    Posts:6098


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    E o que está havendo? Algum erro?
    _________________



  1. mrcc72
    Posts:3


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    esse é o codigo eu consigo movimentar mas precisava fazer as regras, tem alguma ideia de como faço para movimentar nas casas corretas, eu preciso fazer esta regra para o cavalo

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;


    public class xadrez extends JFrame implements ActionListener

    {
    int i;

    JButton peca[]=new JButton [65];


    ImageIcon fig1 =new ImageIcon ("c:/j/torre.GIF";
    ImageIcon fig2 =new ImageIcon ("c:/j/cavalo.GIF";
    ImageIcon fig3 =new ImageIcon ("c:/j/bispo.GIF";
    ImageIcon fig4 =new ImageIcon ("c:/j/rei.GIF";
    ImageIcon fig5 =new ImageIcon ("c:/j/rainha.GIF";
    ImageIcon fig6 =new ImageIcon ("c:/j/peao.GIF";
    ImageIcon fig7 =new ImageIcon ("c:/j/branco.GIF";



    xadrez()

    {
    int A=1, B=0, C=0;
    int i=0;

    setTitle("Xadrex";
    setSize(400,400);

    for(i=0;i<65;i++)
    {

    peca= new JButton ();
    peca.addActionListener(this);
    peca[0]= new JButton (fig1);
    peca[0].addActionListener(this);
    peca[1]= new JButton (fig2);
    peca[1].addActionListener(this);
    peca[2]= new JButton (fig3);
    peca[2].addActionListener(this);
    peca[3]= new JButton (fig4);
    peca[3].addActionListener(this);
    peca[4]= new JButton (fig5);
    peca[4].addActionListener(this);
    peca[5]= new JButton (fig3);
    peca[5].addActionListener(this);
    peca[6]= new JButton (fig2);
    peca[6].addActionListener(this);
    peca[7]= new JButton (fig1);
    peca[7].addActionListener(this);
    peca[8]= new JButton (fig6);
    peca[8].addActionListener(this);
    peca[9]= new JButton (fig6);
    peca[9].addActionListener(this);
    peca[10]= new JButton (fig6);
    peca[10].addActionListener(this);
    peca[11]= new JButton (fig6);
    peca[11].addActionListener(this);
    peca[12]= new JButton (fig6);
    peca[12].addActionListener(this);
    peca[13]= new JButton (fig6);
    peca[13].addActionListener(this);
    peca[14]= new JButton (fig6);
    peca[14].addActionListener(this);
    peca[15]= new JButton (fig6);
    peca[15].addActionListener(this);

    peca[48]= new JButton (fig6);
    peca[48].addActionListener(this);
    peca[49]= new JButton (fig6);
    peca[49].addActionListener(this);
    peca[50]= new JButton (fig6);
    peca[50].addActionListener(this);
    peca[51]= new JButton (fig6);
    peca[51].addActionListener(this);
    peca[52]= new JButton (fig6);
    peca[52].addActionListener(this);
    peca[53]= new JButton (fig6);
    peca[53].addActionListener(this);
    peca[54]= new JButton (fig6);
    peca[54].addActionListener(this);
    peca[55]= new JButton (fig6);
    peca[55].addActionListener(this);
    peca[56]= new JButton (fig1);
    peca[56].addActionListener(this);
    peca[57]= new JButton (fig2);
    peca[57].addActionListener(this);
    peca[58]= new JButton (fig3);
    peca[58].addActionListener(this);
    peca[59]= new JButton (fig5);
    peca[59].addActionListener(this);
    peca[60]= new JButton (fig4);
    peca[60].addActionListener(this);
    peca[61]= new JButton (fig3);
    peca[61].addActionListener(this);
    peca[62]= new JButton (fig2);
    peca[62].addActionListener(this);
    peca[63]= new JButton (fig1);
    peca[63].addActionListener(this);
    peca[64]= new JButton ();

    }


    getContentPane().setLayout(new GridLayout(8,);






    for (i=0; i<64; i++)

    {


    if((i%==0)

    {
    C=A;
    A=B;
    B=C;

    }
    if (( i%2)==A)
    {
    peca.setBackground(Color.black);
    }
    else
    {
    peca.setBackground (Color.white);
    }
    getContentPane().add (peca);


    }
    }


    public static void main (String args[])

    {
    JFrame janela=new xadrez();
    janela.show();
    }


    public void actionPerformed (ActionEvent m)


    {

    for(int i=0;i<64;i++)

    {

    if(peca==peca[1])

    {

    peca[64].setIcon(peca[1].getIcon());
    }

    if(peca==peca[18])

    {

    if(m.getSource()==peca[16])

    {

    peca[16].setIcon(peca[64].getIcon());
    // peca[1].setIcon(null);
    // peca[64].setIcon(peca[16].getIcon());
    }

    }

    }


    }


    }



  1. aliothbl
    Posts:27


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Na verdade nao sei nao, mas ajudaria se voce criase algumas interfaces para os comportamentos de cada tipo de peça, acho que esso ajudaria muito pois so seria implementar as interfaces, tem peças que tem varios comportamentos, agora nao acredito que seja uma tarefa facil fazer um jogo de xadrez.



  1. sergiogoff
    Posts:14


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Esse seria um ótimo projeto para se aplicar OO...
    se queres um conselho... cria uma classe ou interface peca e uma classe para cada peca diferente que extenda essa classe base... depois vc pode usar polimorfismo criando um metodo abstrato na classe peca chamado de movimento e fazer com que cada classe implemente esse método...

    comeca ai e vamo v onde vai dar....



  1. lecadf
    Posts:130


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Aos interessados sugiro um estudo do projeto José


    Alessandro
    _________________

    "Aquele que faz uma pergunta é um tolo por cinco minutos; aquele que não faz permanece tolo para sempre"[Provérbio Chinês]
    Extension Points



  1. mrcc72
    Posts:3


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Mas pessoal sobre essas classes que vocês estão falando tem algum exemplo de alguma feita, eu sou iniciante em Java e preciso entregar este trabalho na facu.

    Obrigado por aqueles que responderam



  1. wanderao18
    Posts:2


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    to com umproblema parecido mas eh um pouco diferente !

    tenhu a classe do cavalo que faz com q ele percorra todo o tabuleiro !

    mas naum sei fazer a interface nem nada que existe nesse exercício !


    e o pior eh q eu tenhu q entregá-lo amanha !


    por favor me ajudem !

    tenhu a classe knight e no anexo tem escrito tudo o q deveo implementar!

    desde jah agradeço



  1. wanderao18
    Posts:2


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    1. Crie um programa que use a classe Knight, fornecida, para percorrer um tabuleiro fictício com 5x5 casas com movimentos de um cavalo do xadrez.
    A classe Knight implementa um algoritmo de backtracking para fazer isso
    O Construtor da classe Knight recebe três argumentos, nesta ordem:
    · Um array do tipo int[ ][ ] que corresponde às posições do tabuleiro;
    · Um int com o número de linhas do tabuleiro; e
    · Um int com o número de colunas do tabuleiro.

    Knight(int[][] b,int nr, int nc)

    No final do código fonte da classe Knight há um método main que apresenta um exemplo de como usá-la. A saída deste exemplo é:



    · O programa deverá ter uma interface semelhante a da figura abaixo:



    · Deverá poder rodar como um programa Java ou como um applet.
    · Ao clicar em qualquer casa do tabuleiro a posição deverá ser assumida como a posição inicial do percurso e ser marcada para o usuário com um X;


    · Ao clicar no botão “Mover” a classe Knight deverá ser instanciada e o percurso executado através do método boolean tenta( b, linha, coluna ), onde linha e coluna correspondem a linha e a coluna da posição inicial, no caso da figura acima seria tenta(0,0). Quando não for possível executar o percurso a partir da posição inicial o método tenta retorno false e nada deverá ser feito, caso retorne true o percurso deverá ser apresentado como na figura abaixo. O percurso estará armazenado no array int b[ ][ ], o primeiro argumento do método tenta:



    · O botão “Salvar” deve salvar o percurso no arquivo “Saída.txt”.
    · O botão “Imprimir” deverá imprimir o conteúdo do tabuleiro, apresentando a janela de diálogo para que o usuário possa escolher e configurar a impressora.

    Nota:
    · Baseie-se na solução do exercício 7 para os tratamentos dos eventos dos botões “Salvar” e “Imprimir”.
    · Como sugestão, use um array JTextField[ ][ ] para representar o tabuleiro. Veja como exemplo como um array de int é criado no tabuleiro de inteiros no método main na classe Knight.
    · Como sugestão, crie um tratamento de evento único para o click do mouse sobre o tabuleiro e identifique a casa clicada comparando os elementos do tabuleiro com o que é retornado pelo método ActionEvent.getSource().




    .....................................................



    classe knight...........................

    /**
    * Knight.java
    *
    * Programa que implementa o algoritmo de Niklaus
    * Wirth para a solucao do programa do caminho
    * do cavalo sem qualquer heuristica.
    *
    * by Nelson Monnerat
    * 23/04/2002
    */


    public class Knight{
    int[] rowmove = { 2,1,-1,-2,-2,-1,1,2 };
    int[] colmove = { 1,2,2,1,-1,-2,-2,-1 };

    long count = 0; // contador de passos de recursao
    int nrows;
    int ncols;
    int[][] board;

    /*****************************************************
    Construtor
    *****************************************************/
    Knight(int[][] b,int nr, int nc)
    {
    nrows = nr;
    ncols = nc;
    board = b;
    count = 0;
    }


    /**
    *
    * Método recursivo para achar as possiveis
    * solucoes.
    * by Nelson Monnerat
    * 23/04/2002
    */
    public boolean tenta( int row, int col)
    {
    return tenta(row, col, 1);
    }

    public boolean tenta( int row, int col, int n )
    {
    int newrow;
    int newcol;
    int i;

    count++; // incrementa o contador de recursao

    // assumimos que a tentativa e valida
    board[row][col] = n;

    // verifico se o tabuleiro ja foi percorrido
    if ( n >= nrows*ncols )
    return true;
    else
    {
    // percorremos os possiveis movimentos
    for (i=0; i<8; i++)
    {
    newrow = row + rowmove;
    newcol = col + colmove;

    // verifica se o limite foi alcancado
    // ou se a casa ja foi percorrida
    // ou se o proximo passo e valido
    if ((newrow >= 0) && (newrow < nrows) &&
    (newcol >= 0) && (newcol < ncols) &&
    (board[newrow][newcol] == 0) &&
    // se o tabuleiro ainda nao foi percorrido
    // tenta a mais um palso recursivo
    (tenta( newrow, newcol, n+1 )) )
    return true;

    }
    }

    // caso nao tenhamos encontrado
    // um caminho valido
    // ressetamos a casa
    board[row][col] = 0;
    return false;
    }



    /**
    * Método main exemplo de utilização da classe
    * Knigth
    */
    public static void main( String args[] ){
    int nrows;
    int ncols;
    int col;
    int row;
    int i, j;
    int b[][];

    nrows = 5;
    ncols = 5;



    row = 0;
    col = 0;
    System.out.print("\n\n O tabuleiro tem " + nrows + " linhas." );
    System.out.print("\n O tabuleiro tem " + ncols + " colunas.";
    System.out.print("\n A posicao inicial e:" );
    System.out.print("\n linha: " + row );
    System.out.print("\n coluna:" + col );
    System.out.print("\n\n";

    // cria o tabuleiro de inteiros
    b = new int[nrows][ncols];

    // instancia a classe Knight
    Knight k = new Knight(b, nrows, ncols);

    // tento o percurso
    if ( k.tenta(row,col) ){
    for (i = 0; i < nrows; i++) {
    for( j = 0; j < ncols; j++){
    System.out.print("+-----";
    }
    System.out.printf("+\n|";
    for( j = 0; j < ncols; j++){
    System.out.printf("%4d |",(b)[j]);
    }
    System.out.print("\n";
    }
    for( j = 0; j < ncols; j++){
    System.out.print("+-----";
    }
    System.out.printf("+\n";
    }
    else{
    System.out.print("Nao ha solucao\n";
    }

    System.out.print( " Numero de chamadas recursivas: " + k.count +"\n\n" );

    }
    }




  1. joaocarimo
    Posts:2


    Comment Arrow

    Publicado em: 26/02/2010 06:05:09

    Poderás utilizar o LDAP ou Open LDAP (é base de dados em árvore com uma capacidade de 5000 queries por segundo, é baseado no protocolo X25) e fazer coisas interessantes nesse jogo de xadrez. A vantagem é que o sistema podeerá aprender a ganhar.
    Quanto mais jogar, mais o sistema aprende.

    Mas concordo com o SergioGoff. Deverias estruturar mais o código.
    Subdividir um problema grande em várias partes.
    Torna mais facil e eficiente resolver qualquer problema, e pode ser reutilizado.



  1. Metal Java Full
    Posts:2116


    Comment Arrow

    Publicado em: 26/02/2010 06:20:45

    Acho que o cara nem lembra mais que existe JavaFree...


    _________________



  1. otavionlneto
    Posts:11


    Comment Arrow

    Publicado em: 26/02/2010 08:19:54

    Hum...

    Vou ver se consigo rodar!
    _________________

    "Java Style" c",)

    Meu BloG

    Seguir:
    = MEME
    = BUZZ



  1. joaocarimo
    Posts:2


    Comment Arrow

    Publicado em: 26/02/2010 09:10:37

    [quote="Metal Java Full"]Acho que o cara nem lembra mais que existe JavaFree...


    Pode ser, mas fica a nota para quel quiser ir mais além.



  1. Metal Java Full
    Posts:2116


    Comment Arrow

    Publicado em: 26/02/2010 09:18:00

    [quote="joaocarimo"][quote="Metal Java Full"]Acho que o cara nem lembra mais que existe JavaFree...


    Pode ser, mas fica a nota para quel quiser ir mais além.


    Boa 06... é assim q eu gosto de ver!

    _________________



  1. jvzunino
    Posts:2


    Comment Arrow

    Publicado em: 23/01/2011 01:19:27

    Estou fazendo um jogo de xadrez.
    Disponibilizei o código em:
    http://code.google.com/p/jjchessgame/

    O .jar está em:
    http://www.inf.furb.br/~jvzunino/jars/chess.jar

    As direções das peças já estão validando.
    Capturas estão corretas.

    Falta validar jogada para o jogador não poder colocar seu próprio rei em check.
    Falta verificar check mate.
    Falta validar El-passant.
    Falta validar roque.
    Falta verificar se deu check mate.


    Quem quiser dar uma mão...

    Minha idéia é fazer pra jogar em rede. Já fiz outro jogo pra jogar em rede mas era mais simples.



  1. Relacionados