diff --git b/README.md a/README.md new file mode 100644 index 0000000..e69de29 --- /dev/null +++ a/README.md diff --git b/Tateti.java a/Tateti.java new file mode 100644 index 0000000..fa047c0 --- /dev/null +++ a/Tateti.java @@ -0,0 +1,188 @@ +import java.io.*; +import java.util.Scanner; +public class Tateti { + private String matriz [][] = new String[3][3]; //tabla principal + private char turno[] = {'X','O'};//el turno 0 == primer jugador(X) 1 == Segundo Jugador (O) + private char numeroJugada[]={'a','b','c','d','e','f','g','h','i'};//indica la jugada actual + private String jugadaGanadora[][] = {{"","",""},{"","",""}}; + //colores que agregaremos a la salida de consola + private static final String ANSI_RED = "\u001B[31m"; //error + private static final String ANSI_RESET = "\u001B[0m";//color entrada + private static final String ANSI_GREEN = "\u001B[32m";//ganador + private static final String ANSI_YELLOW = "\u001B[33m";//matriz + + Tateti(){ + for (int i = 0; i < matriz.length; i++) { + for (int j = 0; j < matriz.length; j++) { + matriz [i][j]=""; + } + } + } + public void jugar(){ + //creamos un scanner para ingresar los datos + Scanner entrada = new Scanner(System.in); + + int nroJugada = 0; + System.out.println("Bienvenidos al TA-TE-TI de Cristhian Ortellado del Bootcamp 004 de Roshka (Filas = {A, B, C})"); + + do { + + System.out.println(numeroJugada[nroJugada] + ". "+turno[nroJugada%2]+" -> Ingrese una jugada:"); + String movimiento = entrada.nextLine(); + //si la entrada y jugada es valida entonces rellenamos la matriz + if (comprobarEntrada(movimiento) && comprobarMovimiento(movimiento)){ + + int fila = casillaActual(movimiento.charAt(0)); + int columna = (int)casillaActual(movimiento.charAt(1)); + matriz[fila][columna] = turno[nroJugada%2]+""; + //guardamos la jugada + jugadaGanadora[nroJugada%2][nroJugada/2]= movimiento; + imprimirMatriz(); + + if (ganador()) { + System.out.printf("%s%s%s%s",ANSI_GREEN," GANADOR ",turno[nroJugada%2]," :"); + if (jugadaGanadora[1][2].length()==0) + System.out.printf("%s",jugadaGanadora[0][0]+"-" +jugadaGanadora[0][1]+"-"+jugadaGanadora[0][2]+"\n"); + else + System.out.printf("%s",jugadaGanadora[1][0]+"-" +jugadaGanadora[1][1]+"-"+jugadaGanadora[1][2]+"\n"); + + System.out.println(ANSI_GREEN +" JUEGO FINALIZADO"); + return; + } + nroJugada++; + if (nroJugada==9) { + System.out.println(ANSI_GREEN +" EMPATE "+turno[nroJugada%2] +ANSI_RESET); + System.out.println(ANSI_GREEN +" JUEGO FINALIZADO"); + return; + } + } + } while (true); + } + /** + * Funcion que comprueba si la matriz posee algun ganador + * @return retorna true si hubo algun ganador + */ + private boolean ganador(){ + //comprueba si alguien gano + //diagonales + if (matriz[0][0].equals(matriz[1][1]) && matriz[0][0].equals(matriz[2][2]) && matriz[0][0].length()>0) + return true; + if (matriz[0][2].equals(matriz[1][1]) && matriz[0][2].equals(matriz[2][0]) && matriz[0][2].length()>0) + return true; + + + //columnas + + if (matriz[0][0].equals(matriz[1][0]) && matriz[0][0].equals(matriz[2][0]) && matriz[0][0].length()>0) + return true; + + if (matriz[0][1].equals(matriz[1][1]) && matriz[0][1].equals(matriz[2][1]) && matriz[0][1].length()>0) + return true; + + if (matriz[0][2].equals(matriz[1][2]) && matriz[0][2].equals(matriz[2][2]) && matriz[0][2].length()>0) + return true; + + //filas + + if (matriz[0][0].equals(matriz[0][1]) && matriz[0][0].equals(matriz[0][2]) && matriz[0][0].length()>0) + return true; + + if (matriz[1][0].equals(matriz[1][1]) && matriz[1][0].equals(matriz[1][2]) && matriz[1][0].length()>0) + return true; + + if (matriz[2][0].equals(matriz[2][1]) && matriz[2][0].equals(matriz[2][2]) && matriz[2][0].length()>0) + return true; + + return false; + } + private void imprimirMatriz(){ + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++){ + if (matriz[i][j].length()==0) { + System.out.printf("%s|--%s",ANSI_YELLOW, matriz[i][j]); + }else{ + System.out.printf("%s|%s",ANSI_YELLOW, matriz[i][j]); + } + } + System.out.println("|"); + } + System.out.println(ANSI_RESET); + } + /** + * @param entrada es el movimiento el cual el jugador desea realizar + * @return retorna true si es una jugada valida + */ + private boolean comprobarEntrada(String entrada){ + if (entrada.length()!=2 ) { + System.out.println( ANSI_RED+"Error: Jugada Inválida - Solo ingrese el numero de caracteres solicitados"+ANSI_RESET); + return false; + } + char fila = entrada.charAt(0); + char columna = entrada.charAt(1); + + //comprobamos el primer y segundo caracter + if (fila !='A' && fila != 'B' && fila != 'C' || columna != '1' && columna != '2' && columna != '3'){ + System.out.println( ANSI_RED+"ERROR :Jugada Invalida - Formato Invalido"+ANSI_RESET); + return false; + } + if (fila != 'A' & fila != 'B' && fila != 'C' && columna != '1' && columna != 'B' && columna != '3'){ + System.out.println( ANSI_RED+"Error: Jugada Invalida - Fila y Columna Invalidas"+ANSI_RESET); + return false; + } + if (fila != 'A' && fila != 'B' && fila != 'C' ){ + System.out.println( ANSI_RED+"Error: Jugada Inválida - Fila Invalida"+ANSI_RESET); + return false; + } + + if (columna != '1' & columna != '2' && columna != '3' ){ + System.out.println( ANSI_RED+"Error: Jugada Inválida - Columna Invalida"+ANSI_RESET); + return false; + } + + return true; + } + /** + * + * @param jugada es una entrada valida en formato y rango + * @return retorna true si la jugada insertada se puede realizar + */ + private boolean comprobarMovimiento(String jugada){ + //comprobamos la jugada con los criterios correspondientes + int fila = casillaActual(jugada.charAt(0)); + int columna = (int)casillaActual(jugada.charAt(1));//casteamos la columna + + //comprobamos si la casilla esta ocupada + if (matriz[fila][columna].length()!=0) { + System.out.println( ANSI_RED+"Jugada Invalida - Casilla Ocupada"+ANSI_RESET); + return false; + } + return true; + } + /** + * @param jugada es la columna que ingreso el jugador + * @return retorna el indice de la columna + */ + private int casillaActual(char jugada){ + switch (jugada) { + case 'A': + return 0; + case 'B': + return 1; + case 'C': + return 2; + case '1': + return 0; + case '2': + return 1; + case '3': + return 2; + default: + break; + } + return 0; + } + public static void main(String[] args) { + Tateti tateti = new Tateti(); + tateti.jugar(); + } +} \ No newline at end of file