Jump to content

Archived

This topic is now archived and is closed to further replies.

wanderao18

xadrez - java

Recommended Posts

to com um roblema 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

 

 

 

anexo 1

 

 

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().

 

 

 

 

 

 

 

 

 

código do cavalo :

 

 

 

 

/**

* 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" );

 

}

}

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.