Jogo Dama em Java

12 respostas
F

Ola turma acabei de fazer meu pequeno e simples joguinho de damas com swing.To postando aqui por que gostaria ter um feed-back.As regras são as tradicionais onde si é sempre obrigado a comer seja com dama ou com o peão.Vc escolhe qual a peças que queres movimentar,então aparece a cor verde nos quadrados indicando onde podes andar.Por ser obrigado a comer o jogo não te deixa se movimentar livramente se for detectado alguma peça adversária para comer. Ate o momento não implementei uma I.A mas a máquina escolhe sempre o melhor caminho para comer suas peças :lol:.Criticas e sugestões são bem vindas!! :lol:



12 Respostas

F

restantante dos arquivos





F

ok so savar tudo no caminho C:\ImagemJava\xxxx





B

legal parabens

F

Obrigado :slight_smile:

F

Muito bom, parabéns! Minha sugestão é vc juntar todas as figuras dentro do arquivo Jar e distribuir apenas um arquivo.

T

Parabéns!
Pode descrever o algoritmo utilizado para escolher o melhor caminho?
Outra coisa… Não vai disponibilizar o fonte? :lol:

F

Obrigado tnaires.O algoritmo para encontrar o melhor caminho é simples,bom sempre digamos assim depois de feito ne?mas na hora…,bom :lol:
O algoritmo é o seguinte:

1)paramentros

onde int antl=é a coordenada anterior referente a linha

onde int antc=é a coordenada anterior referente a coluna

onde  int l=linha

onde  int c=coluna

onde String coordenadas=aqui vão ser colocadas passo a passo as coordenadas disponíveis encontradas .Após ter feito um caminho x,este caminho irá ser armazenado na variavél de instáncia

list_possi  que é um   LinkedHashSet.Aqui serão armazenados todos os caminhos possivéis.

2) isMovimentoXXXX é um metodo com retorno boolean o qual me diz se um determidado movimento é possivel  .O metodo  é aproveitado para ambos  Máquina  e Homem por isso o paramentro true para Homem e false para a Máquina.

3)

O algoritmo em si é recursivo com condicão de parada nos 4 if´s     if(isMovimentoXXX) {}

esta parte    de código  é muito inportante if(l+2 != antl || c + 2!= antc){ }seu proposito é verificar que nunca seja feita a mesma chamada e cair em um StackOverFlow.Ou seja, vc está nas coordenadas  linha :3coluna:3 e após uma verificação é possivel dar um pulo para a casa branca, então é feita a chamada recursiva para  a linha =4 coluna=4,com as coordenadas anteriores.Explicando com o código ficaria assim:
//antl=5  coordenadas anteriores
//antc=5
// l=3
// c=3
todasPossibilidades(antl,antc,l,c,cordenadas){
        if(isMovimentoAltoBaixoPossi(l,c,true)){ 
                    if(l+2 != antl || c + 2!= antc){ //nesta condição  vai detectar que //não pode mais ir para as coordenadas linha 5,coluna 5,pois acabou de vir  de lá!!
                              if(verificarepeticoes(coordenadas,l-2,c+2)){  
                                 todasPossibilidades(l,c,l-2,c+2,coordenadas);
                             }
                       }
        }//entao sai deste teste e vai para os outros 3 if´s
}

4)Por último o if(verificarepeticoes(coordenadas,l+2,c-2)){}

public boolean verificarepeticoes(String array,int l,int c){
           Pattern p=Pattern.compile(""+l+""+c);
           Matcher m=p.matcher(array); 
          int indice=0;
             while(m.find()){
                  indice=m.start();  
              }
                if(indice == 2|| indice == 0) return true; else  return false;
 }

verifica que na String coordenada nao haja repetições com relação ao seu segundo indice .Pelo indice 2 é possivel passar 2 vezes pelo mesmo caminho,mas nos outros não.
O algoritmo em si é o seguinte:

public void todasPossibilidades(int antl,int antc,int l,int c,String coordenadas ){
       coordenadas+=l+""+c;
       list_possi.add(coordenadas);  
                        if( isMovimentoBaixoDirPossi(l,c,true)&& bo_tipopeca == true) {                            if(l+2 != antl || c + 2!= antc){
                                   if(verificarepeticoes(coordenadas,l+2,c+2)){
                                     todasPossibilidades(l,c,l+2,c+2,coordenadas);
                                  }
                              }
                         }
                        if(isMovimentoAltoDirPossi(l,c,true)){
                            if(l-2 != antl || c + 2!= antc){
                                if(verificarepeticoes(coordenadas,l-2,c+2)){  
                                  todasPossibilidades(l,c,l-2,c+2,coordenadas);
                             }
                           }
                         }
                         if(isMovimentoAltoEsqPossi(l,c,true)){
                           if(l-2 != antl || c - 2!= antc){
                              if(verificarepeticoes(coordenadas,l-2,c-2)){
                               todasPossibilidades(l,c,l-2,c-2,coordenadas);
                             }
                         }
                     }
                     if(isMovimentoBaixoEsqPossi(l,c,true)&& bo_tipopeca == true){
                             if(l+2 != antl || c - 2!= antc){
                              if(verificarepeticoes(coordenadas,l+2,c-2)){
                                  todasPossibilidades(l,c,l+2,c-2,coordenadas);
                             }
                         }
                    }
 }

Abraços!

F

Valeu boa ideia!Nem tinha me tocado!!

F

Ops… mas come se faz :oops: ???

F

Vc poderia criar um pacote chamado imagens dentro do classpath e puxar a imagem dessa forma dentro de alguma classe:

F

legal vou tentar aqui :lol:

B

bacana, mas como vc faz pra “dizer” pro computador onde esta cada peca?

Criado 11 de julho de 2008
Ultima resposta 16 de jul. de 2008
Respostas 12
Participantes 5