import java.util.Scanner; public class Juego{ //Creamos los variables globales para la clase char valor; int contadorJugadas; char[][] tablero; Scanner teclado; String jugadorActual; //Este es constructor public Juego(){ this.jugadorActual = ""; this.valor = 'O'; //Empieza la ficha 'O' this.contadorJugadas = 0; this.tablero = new char[3][3];//Creamos el tablero for(int fila = 0;fila<3;fila++){//Vaciamos el tablero for(int columna = 0;columna < 3;columna++){ this.tablero[fila][columna] = ' '; } } this.teclado = new Scanner(System.in);//Creamos el objeto para recibir datos desde el teclado } public char aJugar(String jugador1,String jugador2){ this.jugadorActual = jugador1; String colocacion; int fila,columna; char valorTemp; char ganador = 'e'; Tablero dibujo = new Tablero(); boolean finJuego = false; //Este bucle sirve para realizar el juego hasta que haya un ganador o no haya mas casilla que cargar while(!finJuego || this.contadorJugadas<9){ try{ colocacion = this.comprobarPosicionSintaxis();//Comprobamos si la sintaxis es correcta correctas //Convierte los valores obtenidos desde teclado a valores int fila = Integer.parseInt(""+colocacion.charAt(0)) - 1; columna = Integer.parseInt(""+colocacion.charAt(2)) - 1; //Este if comprueba si la posicion donde coloca la ficha ya esta o no esta ocupado if(this.comprobarPosicionVacio(fila, columna)){ this.tablero[fila][columna] = this.valor;//Carga la ficha en el tablero valorTemp = this.valor; dibujo.imprimirTablero(this.tablero);//imprime el tablero actual //Cambia el tipo de ficha if(valor=='O'){ this.valor = 'X'; this.jugadorActual = jugador2; }else{ this.valor = 'O'; this.jugadorActual = jugador1; } //Verifica si el jugador actual ya gano o no gano el juego if(verificarJuego(valorTemp) && this.contadorJugadas>2){ finJuego=true; ganador = valorTemp; break; } //En caso que todavia no gano, se establece la cantidad de posiciones cargadas, y se continua el juego this.contadorJugadas++; }else{ System.out.println("La casilla ya esta cargada. Agrega otro valor"); } }catch(Exception e){ System.out.println("Se cargo letras al colocar la posicion"); } } return ganador; } private String comprobarPosicionSintaxis(){ String posicion = ""; boolean correcto = false; //Este bucle termina hasta que el usuario cargue la sintaxis correcta while(!correcto){ System.out.print(this.jugadorActual + ", ingrese una posicion en formato fila,columna: "); posicion = teclado.nextLine(); //Verifica si la sintaxis tiene la longitud correcta if(posicion.length()!=3){ System.out.println("No se cargo los datos correctamente, por favor cargue de nuevo"); }else if(posicion.charAt(1)!=','){ System.out.println("No se cargo el ',' .Por favor, respete la sintaxis"); //Verifica si las posiciones existen en el tablero }else if(Integer.parseInt(""+posicion.charAt(0))<1 || Integer.parseInt(""+posicion.charAt(0))>3){ System.out.println("Fila incorrecta, por favor cargue de nuevo"); }else if(Integer.parseInt("" + posicion.charAt(2))<1 || Integer.parseInt(""+posicion.charAt(2))>3){ System.out.println("Columna incorrecta, por favor cargue de nuevo"); }else{ correcto = true; Integer.parseInt(""+posicion.charAt(0)); Integer.parseInt(""+posicion.charAt(2)); } } return posicion; } private boolean comprobarPosicionVacio(int fila,int columna){ boolean resultado; if(this.tablero[fila][columna]==' '){ resultado = true; }else{ resultado = false; } return resultado; } private boolean verificarJuego(char valor){ boolean resultado = false; //Primero verificamos filas for(int i=0; i<3 && !resultado; i++){ if(this.tablero[i][0] == valor && this.tablero[i][1] == valor && this.tablero[i][2] == valor){ resultado = true; break; } } //Comprobamos columna for(int i=0; i<3 && !resultado; i++){ if(this.tablero[0][i] == valor && this.tablero[1][i] == valor && this.tablero[2][i] == valor){ resultado = true; break; } } //comprobar diagonal 1 if(!resultado && this.tablero[0][0] == valor && this.tablero[1][1] == valor && this.tablero[2][2] == valor){ resultado = true; } //comprobar diagonal 2 if(!resultado && this.tablero[0][2] == valor && this.tablero[1][1] == valor && this.tablero[2][0] == valor){ resultado = true; } return resultado; } }