Tratamento de erros

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;
    }
}

Opa, e ai vbg286. bem vindo ao GUJ.

Seria interessante que vc postasse somente o trecho do código que está dando erro. Daí explicasse mais detalhadamente sua dúvida. :slight_smile:

Fala Vbg, tudo bem? Bom, um conselho que te daria é dividir o seu código em classes. Você colocou tudo dentro do main, e fica mais confusa a leitura do código.

Com relação ao funcionamento do código em si, eu não entendi o seu “for” da linha 16. Se você vai sortear somente uma vez um número aleatório no jogo, esse for não é necessário. Então acho que você pode tirá-lo.

Dentro das linhas 24 a 30 você colocou a mesma comparação com if uma dentro da outra (if jogo() == pc)…das linhas 24 a 30 você pode colocar tudo dentro de um if só.

Eu não compilei seu código. Seria bom você colocar o funcionamento do programa e um código compilado seu para verificar onde estão os erros. Abraços!

o meu erro é aki
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;
        }

ele pede para eu entrar com a cordenadas, se eu entrar com uma cordenada nada vez, tipo colocar um “m” ele dá erro.

Use try-catch.try { // lugar onde pode haver erro } catch (Exception minhaException) { // tratamento do erro }

Vlww Ayanami…

consegui arrumar…

vlw ae…