Smart cat game

0

I am a beginner in java and I am doing a cat game, I need you to have a method in which the machine plays at random and another in which it plays calculatedly, trying to beat the user. I have no idea how to start to make the machine actively try to beat the player in each turn. This is the code that I have so far, I'm missing a couple of things and clean it up a bit but I want to have at least a base or idea of how to implement this competitive method before continuing in case you have something catastrophically wrong. p>

 import javax.swing.JOptionPane;

 public class Gato
{
String tabla[][];
char jugador;
boolean ganador;
public Gato()
{
    tabla = new String[3][3];
    for(int x = 0; x < 3; x++)
    {
        for(int y = 0; y < 3; y++)
        {
            tabla[x][y] = " ";
        }
    }
}

public void tablero()
{ 

    for(int x = 0; x < 3; x++)
    {
        System.out.print("| ");
        for(int y = 0; y < 3; y++)
        {

            System.out.print(tabla[x][y] + " | ");
        }
        System.out.println();
    }

}

public boolean jugarRandom()
{
    int x;
    int y;
    int xMaq;
    int yMaq;
    boolean ganador = false;
    while(!ganador)
    {
        jugada();
    }
    return ganador;
}

public void encontrarGanadorMaq()
{
    if (tabla[0][0]== "O" && tabla[0][1]== "O" && tabla [0][2]== "O") {
        JOptionPane.showMessageDialog(null, "El ganador es la maquina ");
        ganador = true;
    }
    if (tabla[1][0]== "O" && tabla[1][1]== "O" && tabla [1][2]== "O") {
        JOptionPane.showMessageDialog(null, "El ganador es la maquina ");
        ganador = true;
    }
    if (tabla[2][0]== "O" && tabla[2][1]== "O" && tabla [2][2]== "O") {
        JOptionPane.showMessageDialog(null, "El ganador es la maquina ");
        ganador = true;
    }
    if (tabla[0][0]== "O" && tabla[1][0]== "O" && tabla [2][0]== "O") {
        JOptionPane.showMessageDialog(null, "El ganador es la maquina ");
        ganador = true;
    }
    if (tabla[0][1]== "O" && tabla[1][1]== "O" && tabla [2][1]== "O") {
        JOptionPane.showMessageDialog(null, "El ganador es la maquina ");
        ganador = true;
    }
    if (tabla[0][2]== "O" && tabla[1][2]== "O" && tabla [2][2]== "O") {
        JOptionPane.showMessageDialog(null, "El ganador es la maquina ");
        ganador = true;
    }        
    if (tabla[0][0]== "O" && tabla[1][1]== "O" && tabla [2][2]== "O") {
        JOptionPane.showMessageDialog(null, "El ganador es la maquina ");
        ganador = true;
    }
    if (tabla[0][2]== "O" && tabla[1][1]== "O" && tabla [2][0]== "O") {
        JOptionPane.showMessageDialog(null, "El ganador es la maquina ");
        ganador = true;
    }

}

public void encontrarGanadorUsu()
{
    if (tabla[0][0]== "X" && tabla[0][1]== "X" && tabla [0][2]== "X") {
        JOptionPane.showMessageDialog(null, "Has ganado el juego");
        ganador = true;
    }
    if (tabla[1][0]== "X" && tabla[1][1]== "X" && tabla [1][2]== "X") {
        JOptionPane.showMessageDialog(null, "Has ganado el juego");
        ganador = true;
    }
    else if (tabla[2][0]== "X" && tabla[2][1]== "X" && tabla [2][2]== "X") {
        JOptionPane.showMessageDialog(null, "Has ganado el juego");
        ganador = true;
    }
    if (tabla[0][0]== "X" && tabla[1][0]== "X" && tabla [2][0]== "X") {
        JOptionPane.showMessageDialog(null, "Has ganado el juego");
        ganador = true;
    }
    if (tabla[0][1]== "X" && tabla[1][1]== "X" && tabla [2][1]== "X") {
        JOptionPane.showMessageDialog(null, "Has ganado el juego");
        ganador = true;
    }
    if (tabla[0][2]== "X" && tabla[1][2]== "X" && tabla [2][2]== "X") {
        JOptionPane.showMessageDialog(null, "Has ganado el juego");
        ganador = true;
    }
    if (tabla[0][0]== "X" && tabla[1][1]== "X" && tabla [2][2]== "X") {
        JOptionPane.showMessageDialog(null, "Has ganado el juego");
        ganador = true;
    }
    if (tabla[0][2]== "X" && tabla[1][1]== "X" && tabla [2][0]== "X") {
        JOptionPane.showMessageDialog(null, "Has ganado el juego"); 
        ganador = true;
    }
}

public void jugada()
{
    int x;
    int y;
    int xMaq;
    int yMaq;        

    x = Integer.parseInt(JOptionPane.showInputDialog("Digite una fila de 0 a 2"));
    y = Integer.parseInt(JOptionPane.showInputDialog("Digite una columna de 0 a 2"));
    tabla[x][y] = "X";

    JOptionPane.showMessageDialog(null,"Turno de la maquina");
    xMaq = (int)(Math.random()*3)+0;
    yMaq = (int)(Math.random()*3)+0;      
    if (tabla[xMaq][yMaq] == "O" || tabla[x][y] == "X" ) {
        xMaq = (int)(Math.random()*3)+0;
        yMaq = (int)(Math.random()*3)+0;
        tabla[xMaq][yMaq] = "O";
    }
    else
    {
        tabla[xMaq][yMaq] = "O";
    }  
    tablero();
    encontrarGanadorUsu();
    encontrarGanadorMaq();
}



 }
    
asked by Eleber 26.05.2018 в 03:41
source

1 answer

0

Your game the "cat" was difficult to remove, until I realized that it is the "tateti", as it is called in Argentina. But anyway, I was able to solve your problem.

Major problems

  • A main cycle was missing that allowed you to continue entering entries as long as there is space available in the table (through a counter) or while you have not won your or the machine
  • It was necessary to introduce a cycle where, while the automatically generated space (for the machine) is not occupied by a X or OR , another could be generated. The same for the coordinates entered by the user
  • It was necessary to check every time the user or the machine finished generating a mark on the board, if said user or opponent had done tateti

The other corrections were minimal, but they also impacted on the achievement of the objective

As far as the remaining code was well done, that's why I'm only going to show you the code where I introduced changes.

import javax.swing.JOptionPane;

public class Gato {

int espaciosDisponibles = 9;
String tabla[][];
char jugador;
boolean ganadorMaq;
boolean ganador;


public Gato() {...}

public void tablero() {...}

public boolean encontrarGanadorMaq() {
    if (tabla[0][0].equals("O") && tabla[0][1].equals("O") && tabla[0][2].equals("O")) {
        ganadorMaq = true;
    }
    if (tabla[1][0].equals("O") && tabla[1][1].equals("O") && tabla[1][2].equals("O")) {
        ganadorMaq = true;
    }
    if (tabla[2][0].equals("O") && tabla[2][1].equals("O") && tabla[2][2].equals("O")) {
        ganadorMaq = true;
    }
    if (tabla[0][0].equals("O") && tabla[1][0].equals("O") && tabla[2][0].equals("O")) {
        ganadorMaq = true;
    }
    if (tabla[0][1].equals("O") && tabla[1][1].equals("O") && tabla[2][1].equals("O")) {
        ganadorMaq = true;
    }
    if (tabla[0][2].equals("O") && tabla[1][2].equals("O") && tabla[2][2].equals("O")) {
        ganadorMaq = true;
    }
    if (tabla[0][0].equals("O") && tabla[1][1].equals("O") && tabla[2][2].equals("O")) {
        ganadorMaq = true;
    }
    if (tabla[0][2].equals("O") && tabla[1][1].equals("O") && tabla[2][0].equals("O")) {
        ganadorMaq = true;
    }
    return ganadorMaq;
}

public boolean encontrarGanadorUsu() {
    if (tabla[0][0].equals("X") && tabla[0][1].equals("X") && tabla[0][2].equals("X")) {
        ganador = true;
    }
    if (tabla[1][0].equals("X") && tabla[1][1].equals("X") && tabla[1][2].equals("X")) {
        ganador = true;
    }
    if (tabla[2][0].equals("X") && tabla[2][1].equals("X") && tabla[2][2].equals("X")) {
        ganador = true;
    }
    if (tabla[0][0].equals("X") && tabla[1][0].equals("X") && tabla[2][0].equals("X")) {
        ganador = true;
    }
    if (tabla[0][1].equals("X") && tabla[1][1].equals("X") && tabla[2][1].equals("X")) {
        ganador = true;
    }
    if (tabla[0][2].equals("X") && tabla[1][2].equals("X") && tabla[2][2].equals("X")) {
        ganador = true;
    }
    if (tabla[0][0].equals("X") && tabla[1][1].equals("X") && tabla[2][2].equals("X")) {
        ganador = true;
    }
    if (tabla[0][2].equals("X") && tabla[1][1].equals("X") && tabla[2][0].equals("X")) {
        ganador = true;
    }
    return ganador;
}

public void jugada() {

    int x;
    int y;
    int xMaq;
    int yMaq;

    //Mientras no haya más espacios para jugar y no haya ganado ninguno
    while (espaciosDisponibles > 0 && !ganador && !ganadorMaq) {

        boolean espacioOcupado;

        do {
            //Verifica si hay por lo menos un espacio el que ocupar
            if (espaciosDisponibles > 0) {
                x = Integer.parseInt(JOptionPane.showInputDialog("Fila: 0 - 1 - 2"));
                y = Integer.parseInt(JOptionPane.showInputDialog("Columna: 0 - 1 - 2"));
                if (!tabla[x][y].equals("O") && !tabla[x][y].equals("X")) {
                    tabla[x][y] = "X";
                    espaciosDisponibles = espaciosDisponibles - 1;
                    espacioOcupado = true;
                } else {
                    espacioOcupado = false;
                }
            } else {
                espacioOcupado = true;
            }
        } while (!espacioOcupado);
        //Cada vez que se ingresa una posicion, se debe imprimir el tablero y verificar si ganamos
        tablero();
        ganador = encontrarGanadorUsu();
        ganadorMaq = encontrarGanadorMaq();

        JOptionPane.showMessageDialog(null, "Turno de la maquina");
        //Mientras el espacio generado (x,y) automaticamente esta en uso se generara otro
        do {
            if (espaciosDisponibles > 0) {
                xMaq = (int) (Math.random() * 3);
                yMaq = (int) (Math.random() * 3);
                if (!tabla[xMaq][yMaq].equals("O") && !tabla[xMaq][yMaq].equals("X")) {
                    tabla[xMaq][yMaq] = "O";
                    espaciosDisponibles = espaciosDisponibles - 1;
                    espacioOcupado = true;
                } else {
                    espacioOcupado = false;
                }
            } else {
                espacioOcupado = true;
            }
        } while (!espacioOcupado);
        //Cada vez que se genera una posicion, se imprime la tabla y se verifica si la maquina gano
        tablero();
        ganadorMaq = encontrarGanadorMaq();
        ganador = encontrarGanadorUsu();
    }
}

public void verificarGanador() {
    if (ganador) {
        System.out.println("Ganaste!!");
    } else if (ganadorMaq) {
        System.out.println("Gano la maquina!");
    } else if (espaciosDisponibles == 0) {
        System.out.println("Empate");
    }
}

public static void main(String[] args) {
    Gato gato = new Gato();
    gato.jugada();
    gato.verificarGanador();
}

}

    
answered by 28.05.2018 в 21:55