Ola pessoal, tou precisando arrumar alguns erros, porem nao acho um caminha
Um é quando coloco algo diferente de um inteiro nas cordenadas… queria seber como corrigir isto…
segundo é como eu arrumo o fato de impedir jogadas futuras, se eu colocar as cordenadas como 1 2 ele recebe o 1 faz a jogada e depois recebe o dois e faz a jogada…
este jogo é o raposas e gansos… jogo de tabuleiro…
vlwww… eu preciso arrumar isto etá as 18:30 para entregar o trabalho… espero q me ajudem.
import java.util.Scanner;
public class Main {
static final boolean PC = false, JG = true; // define quem começa
static final int TRACO = 0, ESPACO = 1, RAPOSA = 2, GANSOS = 3; // difiniçao para o tabuleiro
static final int CIMA = 8, BAIXO = 2, ESQ = 4, DIR = 6, DE = 1, DD = 3; // comando no teclado numerico
static int tabuleiro[][]; //"tabuleiro vazio
static Scanner sc;
static boolean vez;
static int jogador;
public static void main(String[] args) {
tabuleiro = new int[7][7];
sc = new Scanner(System.in);//instancia o objeto Scanner e fornece a variavel sc, tendo como objetivo capiturar somente teclas numericas de numeros inteiros( para poder ultilizar o teclado numerico)
for (int a=0;a<1;a++){//executa uma unica vez por jogo
int b= (int)(Math.random()*2);//fornece um numero inteiro 0,1
if(b==1){//verifica se foi sorteado o numero 1
jogador=RAPOSA;//coloca a raposa para o jogador
vez = PC;}// faz o pc iniciar (neste caso o pc é os gansos)
else {jogador=GANSOS;//coloca os gansos para o jogador
vez = JG;}}//como o jogador é os gansos ele começa
if(jogo()==PC){// vai verificar quem vence o jogo. precisa de outras clases.
jogador = RAPOSA;
if(jogo()==PC)
System.out.println("Vitória do computador");
else
System.out.println("Empate");
}
else{
jogador = RAPOSA;
if(jogo()==JG)
System.out.println("Vitória do jogador");
else
System.out.println("Empate");
}
}
static boolean jogo(){
for(int x = 0; x<tabuleiro.length; x++)//para varrer o array
for(int y = 0; y<tabuleiro.length; y++)
if((x==0&&y==0)||(x==0&&y==1)||(x==0&&y==5)||(x==0&&y==6)||(x==1&&y==0)||(x==1&&y==1)||(x==1&&y==5)||(x==1&&y==6))
tabuleiro[x][y] = TRACO;//define os cantos superiores da matriz
else if((x==5&&y==0)||(x==5&&y==1)||(x==5&&y==5)||(x==5&&y==6)||(x==6&&y==0)||(x==6&&y==1)||(x==6&&y==5)||(x==6&&y==6))
tabuleiro[x][y] = TRACO;//define os cantos inferiores da matriz
else if((x==0&&y==2)||(x==0&&y==3)||(x==0&&y==4)||(x==1&&y==2)||(x==1&&y==3)||(x==1&&y==4)||(x==3&&y==0)||(x==3&&y==1)||(x==3&&y==5)||(x==3&&y==6))
tabuleiro[x][y] = GANSOS;//define os gansos do braço superior
else if(x==2)
tabuleiro[x][y] = GANSOS;//define os gansos da 3ª linha de cima pra baixo
else if(x==4&&y==3)
tabuleiro[x][y] = RAPOSA;//define a posicao inicial da raposa
else
tabuleiro[x][y] = ESPACO;// se nenhum lugar for preenchido, é colocado um espaço
//bloco de instruções para definir os cantos e as peças nas posições iniciais
atualiza();//mostra a configuração inicial da rodada
int dir =0,linha =0, coluna=0;//limpa as cordenadas
int xRap=0, yRap=0;
while(raposaCercada()&&gansosVivos()){//verifica se pode jogar, se o jogo nao acabou, nao acaba se raposaCercada retornar true e gansosVivos retornar true
if(vez==JG){//se fora vez do jogador de jogar
if(jogador==RAPOSA){//se o jogador for a raposa
System.out.println("Digite a direção do movimento da raposa: ");
dir = sc.nextInt();//recebe o movimento digitado, só recebe numeros inteiros
for(int x=0; x<tabuleiro.length; x++)
for(int y=0; y<tabuleiro.length; y++)//varre o array
if(tabuleiro[x][y]==RAPOSA){
xRap =x;//coloca as cordenadas achadas da raposa.
yRap = y;
break;
}//pega as coordernadas da raposa
while(!mover(xRap, yRap, dir)){//enquanto o jogador não digitar um valor válido de direcao
System.out.println("Não pode mover para essa direção\nDigite uma nova direção: ");
dir = sc.nextInt();//recebe um novo valor de direcao
}
}
else{//se o jogador representar os gansos
System.out.println("Digite a linha do ganso: ");
linha = sc.nextInt()-1;
System.out.println("Digite a coluna do ganso: ");
coluna = sc.nextInt()-1;
while(linha>6 || coluna>6 || linha<0 || coluna<0 || tabuleiro[linha][coluna]!=GANSOS || !podeMover(linha, coluna)){
System.out.println("Posição inválida");
System.out.println("Digite a linha do ganso: ");
linha = sc.nextInt()-1;
System.out.println("Digite a coluna do ganso: ");
coluna = sc.nextInt()-1;
}
System.out.println("Digite a direção do ganso: ");
dir = sc.nextInt();
while(!mover(linha, coluna, dir)){
System.out.println("Direção inválida\nDigite uma nova direção ");
dir = sc.nextInt();
}
}
vez = PC;
}
else{//se for a vez do computador de jogar
if(jogador==RAPOSA){//se o jogador for a raposa, o computador representa os gansos
stop:{
for(int x=tabuleiro.length-1; x>=0; x--)
for(int y = tabuleiro.length-1; y>=0; y--)//procura pelo ganso mais à frente
if(tabuleiro[x][y]==GANSOS && podeMover(x, y)){
int d = (int)(Math.random()*6)+1;//numero aleatorio entre 1 e 6
while(!mover(x, y, d))
d = (int)(Math.random()*6)+1;//numero aleatorio entre 1 e 6
break stop;
}
}
}
else{//se o jogador não for a raposa, o computador é a raposa
stop:{
for(int x=0; x<tabuleiro.length; x++)
for(int y = 0; y<tabuleiro.length; y++)//procura pelo raposa
if(tabuleiro[x][y]==RAPOSA && podeMover(x, y)){
int d = (int)(Math.random()*8)+1;//numero aleatorio entre 1 e 8
while(!mover(x, y, d))
d = (int)(Math.random()*8)+1;//numero aleatorio entre 1 e 8
break stop;
}
}
}
vez=JG;
}
}
if(!raposaCercada()){//se a raposa perdeu
System.out.println("Raposa cercada");
if(jogador==RAPOSA)//e o jogador for a raposa
return PC;
else
return JG;
}
else{//se os gansos perderam
System.out.println("Gansos derrotados");
if(jogador==RAPOSA)//e o jogador é a raposa
return JG;
else
return PC;
}
}
static void atualiza(){
System.out.println("-1-2-3-4-5-6-7-");
for(int x=0; x<tabuleiro.length; x++){
for(int y=0; y<tabuleiro.length; y++){
switch(tabuleiro[x][y]){
case TRACO:
System.out.print("--");
break;
case ESPACO:
System.out.print("- ");
break;
case GANSOS:
System.out.print("-G");
break;
case RAPOSA:
System.out.print("-R");
break;
}
}
System.out.println("-"+(x+1));
}
}
static boolean gansosVivos(){
int gansosVivos = 0;
for(int x=0;x<tabuleiro.length;x++)
for(int y=0;y<tabuleiro.length;y++)
if(tabuleiro[x][y]==GANSOS)//percorre a matriz verificando quantas posições contem gansos
gansosVivos++;
if(gansosVivos<4)//4 é o número mínimo para cercar a raposa
return false;
else
return true;
}
static boolean raposaCercada(){
int xRaposa=0, yRaposa=0;
for(int x=0; x<tabuleiro.length; x++)
for(int y=0;y<tabuleiro.length; y++)
if(tabuleiro[x][y]==RAPOSA){
xRaposa =x;
yRaposa =y;
break;
}
if(pode_baixo(xRaposa, yRaposa)==0 && pode_cima(xRaposa, yRaposa) == 0)
if(pode_esquerda(xRaposa, yRaposa)==0 && pode_direita(xRaposa, yRaposa)==0)//se a raposa nao puder mover para nenhuma direcao
return false;
return true;
}
static int pode_direita(int x, int y){
if(y+1<=6 && tabuleiro[x][y+1]==ESPACO)//se o espaço à direita estiver no tabuleiro e estiver vazio
return 1;
else if(tabuleiro[x][y]==RAPOSA && y+2<=6 && tabuleiro[x][y+1]==GANSOS && tabuleiro[x][y+2]==ESPACO)//se for a vez da raposa e ela puder comer
return 2;
else
return 0;
}
static int pode_esquerda(int x, int y){
if(y-1>=0 && tabuleiro[x][y-1]==ESPACO)
return 1;
else if(tabuleiro[x][y]==RAPOSA && y-2>=0 && tabuleiro[x][y-1]==GANSOS && tabuleiro[x][y-2]==ESPACO)
return 2;
else
return 0;
}
static int pode_cima(int x, int y){
if(x-1>=0 && tabuleiro[x-1][y]==ESPACO)
return 1;
else if(tabuleiro[x][y]==RAPOSA && x-2>=0 && tabuleiro[x-1][y]==GANSOS && tabuleiro[x-2][y]==ESPACO)
return 2;
else
return 0;
}
static int pode_baixo(int x, int y){
if(x+1<=6 && tabuleiro[x+1][y]==ESPACO)//se o espaço à direita estiver no tabuleiro e estiver vazio
return 1;
else if(tabuleiro[x][y]==RAPOSA && x+2<=6 && tabuleiro[x+1][y]==GANSOS && tabuleiro[x+2][y]==ESPACO)//se for a vez da raposa e ela puder comer
return 2;
else
return 0;
}
static int pode_DE(int x, int y){
if(tabuleiro[x][y] == GANSOS && x+1<=6 && y-1>=0 && tabuleiro[x+1][y-1]==ESPACO)
return 1;
else
return 0;
}
static int pode_DD(int x, int y){
if(tabuleiro[x][y] == GANSOS && x+1<=6 && y+1<=6 && tabuleiro[x+1][y+1]==ESPACO)
return 1;
else
return 0;
}
static boolean podeMover(int x, int y){
if(tabuleiro[x][y]==GANSOS)//se for um ganso
if(pode_baixo(x, y)==0 && pode_direita(x, y)==0 && pode_esquerda(x, y)==0 && pode_DD(x, y)==0 && pode_DE(x, y)==0)
return false;//se o ganso nao puder mover para nenhuma posicao
else
return true;
else//se for a raposa
if(pode_baixo(x, y)==0&&pode_cima(x, y)==0&&pode_direita(x, y)==0&&pode_esquerda(x, y)==0)
return false;
else
return true;
}
static boolean mover(int x, int y, int d){
switch(d){
case CIMA:
if(tabuleiro[x][y]==GANSOS)//se o ganso estiver tentando voltar
return false;
else if(pode_cima(x, y)==0)
return false;
//se retornar diferente de 0 pode mover para cima
else if(pode_cima(x, y)==1)//se retornar 1 pode mover apenas uma posicao
tabuleiro[x-1][y]=tabuleiro[x][y];//muda a posicao
else{//se retornar !=1 e !=0 (2) pode comer
tabuleiro[x-2][y]=tabuleiro[x][y];//muda a posicao
tabuleiro[x-1][y]=ESPACO;//apaga a peça comida
}
break;
case BAIXO:
if(pode_baixo(x, y)==0)
return false;
if(pode_baixo(x, y)==1)
tabuleiro[x+1][y]=tabuleiro[x][y];
else{
tabuleiro[x+2][y]=tabuleiro[x][y];
tabuleiro[x+1][y]=ESPACO;
}
break;
case ESQ:
if(pode_esquerda(x, y)==0)
return false;
if(pode_esquerda(x, y)==1)
tabuleiro[x][y-1]=tabuleiro[x][y];
else{
tabuleiro[x][y-2]=tabuleiro[x][y];
tabuleiro[x][y-1]=ESPACO;
}
break;
case DIR:
if(pode_direita(x, y)==0)
return false;
else if(pode_direita(x, y)==1)
tabuleiro[x][y+1]=tabuleiro[x][y];
else{
tabuleiro[x][y+2]=tabuleiro[x][y];
tabuleiro[x][y+1]=ESPACO;
}
break;
case DD:
if(pode_DD(x, y)==1)
tabuleiro[x+1][y+1]=tabuleiro[x][y];
else
return false;
break;
case DE:
if(pode_DE(x, y)==1)
tabuleiro[x+1][y-1]=tabuleiro[x][y];
else
return false;
break;
default:
return false;
}
tabuleiro[x][y]=ESPACO;//apaga a coordenada antiga
atualiza();
return true;
}
}
