import java.io.*; import java.util.Scanner; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedWriter; import java.lang.Object; 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]+""; imprimirMatriz(); if (ganador()) { System.out.printf("%s%s%s%s",ANSI_GREEN," GANADOR ",turno[nroJugada%2]," :"); System.out.printf("%s",jugadaGanadora+"\n"); System.out.println(ANSI_GREEN +" JUEGO FINALIZADO"); break; } nroJugada++; if (nroJugada==9) { System.out.println(ANSI_GREEN +" EMPATE "+turno[nroJugada%2] +ANSI_RESET); System.out.println(ANSI_GREEN +" JUEGO FINALIZADO"); break; } } } while (true); generarHtml(); } /** * 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){ jugadaGanadora ="A1-B2-C3"; return true; } if (matriz[0][2].equals(matriz[1][1]) && matriz[0][2].equals(matriz[2][0]) && matriz[0][2].length()>0) { jugadaGanadora ="A3-B2-C1"; return true; } //columnas if (matriz[0][0].equals(matriz[1][0]) && matriz[0][0].equals(matriz[2][0]) && matriz[0][0].length()>0) { jugadaGanadora ="A1-B1-C1"; return true; } if (matriz[0][1].equals(matriz[1][1]) && matriz[0][1].equals(matriz[2][1]) && matriz[0][1].length()>0){ jugadaGanadora ="A2-B2-C2"; return true; } if (matriz[0][2].equals(matriz[1][2]) && matriz[0][2].equals(matriz[2][2]) && matriz[0][2].length()>0){ jugadaGanadora ="A3-B3-C3"; return true; } //filas if (matriz[0][0].equals(matriz[0][1]) && matriz[0][0].equals(matriz[0][2]) && matriz[0][0].length()>0){ jugadaGanadora ="A1-A2-A3"; return true; } if (matriz[1][0].equals(matriz[1][1]) && matriz[1][0].equals(matriz[1][2]) && matriz[1][0].length()>0){ jugadaGanadora ="B1-B2-C3"; return true; } if (matriz[2][0].equals(matriz[2][1]) && matriz[2][0].equals(matriz[2][2]) && matriz[2][0].length()>0){ jugadaGanadora ="C1-C2-C3"; 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 void generarHtml(){ FileReader fr = null; BufferedReader br = null; String html=""; try { //leemos el archivo fr = new FileReader("prototipo.html"); br = new BufferedReader(fr); String filaHtml = ""; //Obtenemos cada fila while( ( filaHtml = br.readLine() ) != null ) { html += filaHtml + "\n"; } } catch (Exception e) { System.out.println(e.getMessage()); } String casillas [][]={{"A1","A2","A3"},{"B1","B2","B3"},{"C1","C2","C3"}}; //reemplazamos por los datos de la matriz for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (matriz[i][j].equals("")) { html = html.replace(casillas[i][j],""); }else html = html.replace(casillas[i][j],matriz[i][j]); } } //creamos el archivo File archivo = new File ("tateti.html"); try { // A partir del objeto File creamos el fichero físicamente if (archivo.exists()) archivo.delete(); if (archivo.createNewFile()){ FileWriter escribir = new FileWriter(archivo, true); escribir.write(""+html); escribir.close(); }else System.out.println("No ha podido ser creado el fichero"); } catch (IOException ioe) { ioe.printStackTrace(); } } public static void main(String[] args) { Tateti tateti = new Tateti(); tateti.jugar(); } }