package com.mycompany.
trikii;
import java.util.Scanner;
// Nodo para lista enlazada de jugadas
class Nodo {
String jugada;
Nodo siguiente;
public Nodo(String jugada) {
this.jugada = jugada;
this.siguiente = null;
}
}
// Lista enlazada para guardar historial de jugadas
class ListaEnlazada {
Nodo primero;
public ListaEnlazada() {
primero = null;
}
// Agrega jugada al final
public void agregar(String jugada) {
Nodo nuevo = new Nodo(jugada);
if (primero == null) {
primero = nuevo;
} else {
Nodo actual = primero;
while (actual.siguiente != null) {
actual = actual.siguiente;
}
actual.siguiente = nuevo;
}
}
// Imprime todas las jugadas
public void imprimir() {
Nodo actual = primero;
while (actual != null) {
System.out.println(actual.jugada);
actual = actual.siguiente;
}
}
}
public class Trikii {
String[] jugadores = new String[2];
String[] simbolos = {"X", "O"}; // Ya se sabe que son X y O
String[][] tablero = new String[3][3];
ListaEnlazada registro= new ListaEnlazada();
Scanner scanner = new Scanner(System.in);
// Limpiar pantalla usando secuencias ANSI
public void limpiarPantalla() {
System.out.print("\033[H\033[2J");
System.out.flush();
}
public void mostrarPantallaInicial() {
limpiarPantalla();
System.out.println("=======================================");
System.out.println("|| BIENVENIDOS AL ||");
System.out.println("|| JUEGO DEL TRIKI ||");
System.out.println("|| Presiona Enter para jugar ||");
System.out.println("=======================================");
try { System.in.read();} catch (Exception e) {}
}
public void controlJugadores() {
System.out.print("Nombre jugador 1(X); Tu nombre: ");
jugadores[0] = scanner.nextLine();
System.out.print("Nombre jugador 2(O); Tu nombre: ");
jugadores[1] = scanner.nextLine();
}
public void mostrarTablero() {
System.out.println("\n 0 1 2 ");
System.out.println(" -------------");
for (int i = 0; i < 3; i++) {
System.out.print(i + " |");
for (int j = 0; j < 3; j++) {
String simbolo = tablero[i][j];
System.out.print(simbolo == null ? " |" : " " + simbolo + " |");
}
System.out.println();
System.out.println(" -------------");
}
}
public boolean Ganador() {
for (int i = 0; i < 3; i++) {
if (tablero[i][0] != null && tablero[i][0].equals(tablero[i][1]) &&
tablero[i][1].equals(tablero[i][2])) {
return true;
}
if (tablero[0][i] != null && tablero[0][i].equals(tablero[1][i]) &&
tablero[1][i].equals(tablero[2][i])) {
return true;
}
}
if (tablero[0][0] != null && tablero[0][0].equals(tablero[1][1]) &&
tablero[1][1].equals(tablero[2][2])) {
return true;
}
if (tablero[0][2] != null && tablero[0][2].equals(tablero[1][1]) &&
tablero[1][1].equals(tablero[2][0])) {
return true;
}
return false;
}
public boolean empate() {
for (int i = 0; i < 3; i++) {
for (int j=0; j < 3; j++) {
if (tablero[i][j] == null) return false;
}
}
return true;
}
public void iniciarjuego() {
controlJugadores();
int turno = 0;
while(true) {
limpiarPantalla();
mostrarTablero();
String jugador = jugadores[turno % 2];
String simbolo = simbolos[turno % 2];
System.out.println(jugador + " (" + simbolo + ")- eligue fila y columna
(0-2): ");
int fila =-1;
int col =-1;
while (true) {
System.out.print("Fila (0-2): ");
if (scanner.hasNextInt()) {
fila = scanner.nextInt();
if (fila >= 0 && fila <= 2) break;
else System.out.println("Número fuera de rango. Intenta
nuevamente.");
} else {
System.out.println("Entrada inválida. Debes ingresar un
número.");
scanner.next(); // limpiar entrada inválida
}
}
// Validar columna
while (true) {
System.out.print("Columna (0-2): ");
if (scanner.hasNextInt()) {
col = scanner.nextInt();
if (col >= 0 && col <= 2) break;
else System.out.println("Número fuera de rango. Intenta
nuevamente.");
} else {
System.out.println("Entrada inválida. Debes ingresar un
número.");
scanner.next(); // limpiar entrada inválida
}
}
scanner.nextLine(); // limpiar buffer
if(tablero[fila][col] != null) {
System.out.println("casilla ocupada, elige otra.");
System.out.print("Presiona Enter...");
scanner.nextLine();
continue;
}
tablero[fila][col] = simbolo;
registro.agregar(jugador + ": (" + fila + "," + col + ")");
if (Ganador()) {
limpiarPantalla();
mostrarTablero();
System.out.println("Felicidades"
+ " " + jugador + ", has ganado!");
break;
}
if (empate()) {
limpiarPantalla();
mostrarTablero();
System.out.println("Empate, no hay ganadores.");
break;
}
turno++;
}
System.out.println("\nmovimientos realizados:");
registro.imprimir();
}
public static void main(String[] args) {
Trikii juego = new Trikii();
juego.mostrarPantallaInicial();
juego.iniciarjuego();
}
}
Maryuris Velasquez-Valery Rebatta