Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

Archivo del blog

jueves, 4 de julio de 2024

Juegos IV. Tres en Raya.


Código Java (TresEnRaya.java):

package tresenraya;

import java.util.Scanner;

public class TresEnRaya {

    private static final char[] JUGADORES = {'X', 'O'};
    private static final String LINEA_SUPERIOR = "  ╔═══╦═══╦═══╗";
    private static final String LINEA_MEDIA = "  ╠═══╬═══╬═══╣";
    private static final String LINEA_INFERIOR = "  ╚═══╩═══╩═══╝";

    private static final char[][] tablero = new char[3][3];
    private static final Scanner scanner = new Scanner(System.in);
    private static int jugadorActual = 0;

    public static void main(String[] args) {
        try (scanner) {
            while (true) {
                if (jugar()) {
                    break;
                }
            }
        }
    }

    private static boolean jugar() {
        inicializarTablero();
        while (true) {
            dibujarTablero();
            if (!realizarJugada()) {
                return false;
            }
            if (verificarGanador()) {
                dibujarTablero();
                System.out.println("¡El jugador " + JUGADORES[jugadorActual] + " ha ganado!");
                return true;
            }
            if (tableroLleno()) {
                dibujarTablero();
                System.out.println("¡Empate!");
                return true;
            }
            jugadorActual = 1 - jugadorActual;
        }
    }

    private static void inicializarTablero() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                tablero[i][j] = ' ';
            }
        }
    }

    private static void dibujarTablero() {
        System.out.println(LINEA_SUPERIOR);
        for (int i = 2; i >= 0; i--) {
            System.out.print((i + 1) + "-║");
            for (int j = 0; j < 3; j++) {
                System.out.print(" " + tablero[i][j] + " ║");
            }
            System.out.println();
            if (i > 0) {
                System.out.println(LINEA_MEDIA);
            }
        }
        System.out.println(LINEA_INFERIOR);
        System.out.println("    A   B   C");
    }

    private static boolean realizarJugada() {
        System.out.println("Jugador " + JUGADORES[jugadorActual] + ", ingresa coordenada: ");
        try {
            String entrada = scanner.nextLine().toUpperCase().trim();
            if (entrada.length() != 2) {
                throw new IllegalArgumentException();
            }

            int columna = entrada.charAt(0) - 'A';
            int fila = Character.getNumericValue(entrada.charAt(1)) - 1;

            if (fila < 0 || fila > 2 || columna < 0 || columna > 2 || tablero[fila][columna] != ' ') {
                System.out.println("Jugada inválida. Intenta de nuevo.");
                return true;
            }
            tablero[fila][columna] = JUGADORES[jugadorActual];
            return true;
        } catch (IllegalArgumentException e) {
            System.out.println("Entrada inválida. ¿Deseas salir? (s/n)");
            return !scanner.nextLine().trim().equalsIgnoreCase("s");
        }
    }

    private static boolean verificarGanador() {
        for (int i = 0; i < 3; i++) {
            if (tablero[i][0] != ' ' && tablero[i][0] == tablero[i][1] && tablero[i][1] == tablero[i][2]) {
                return true;
            }
            if (tablero[0][i] != ' ' && tablero[0][i] == tablero[1][i] && tablero[1][i] == tablero[2][i]) {
                return true;
            }
        }
        return (tablero[0][0] != ' ' && tablero[0][0] == tablero[1][1] && tablero[1][1] == tablero[2][2])
                || (tablero[0][2] != ' ' && tablero[0][2] == tablero[1][1] && tablero[1][1] == tablero[2][0]);
    }

    private static boolean tableroLleno() {
        for (char[] fila : tablero) {
            for (char celda : fila) {
                if (celda == ' ') {
                    return false;
                }
            }
        }
        return true;
    }
}


Resultado:

run:
  ╔═══╦═══╦═══╗
3-║   ║   ║   ║
  ╠═══╬═══╬═══╣
2-║   ║   ║   ║
  ╠═══╬═══╬═══╣
1-║   ║   ║   ║
  ╚═══╩═══╩═══╝
    A   B   C
Jugador X, ingresa coordenada:
b1
  ╔═══╦═══╦═══╗
3-║   ║   ║   ║
  ╠═══╬═══╬═══╣
2-║   ║   ║   ║
  ╠═══╬═══╬═══╣
1-║   ║ X ║   ║
  ╚═══╩═══╩═══╝
    A   B   C
Jugador O, ingresa coordenada:
b2
  ╔═══╦═══╦═══╗
3-║   ║   ║   ║
  ╠═══╬═══╬═══╣
2-║   ║ O ║   ║
  ╠═══╬═══╬═══╣
1-║   ║ X ║   ║
  ╚═══╩═══╩═══╝
    A   B   C
Jugador X, ingresa coordenada:
c3
  ╔═══╦═══╦═══╗
3-║   ║   ║ X ║
  ╠═══╬═══╬═══╣
2-║   ║ O ║   ║
  ╠═══╬═══╬═══╣
1-║   ║ X ║   ║
  ╚═══╩═══╩═══╝
    A   B   C
Jugador O, ingresa coordenada:
 

Con la tecnología de Blogger.