Loading repository data…
Loading repository data…
rafamartinez99 / repository
Implementación en Java puro del Hnefatafl, un juego de tablero vikingo asimétrico. IA con búsqueda a 2 niveles, captura por flanqueo, tests con JUnit 5.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Implementación en Java puro (sin frameworks) del Hnefatafl, un juego de tablero vikingo asimétrico anterior al ajedrez: un bando defiende al rey en el centro de un tablero 11x11 y debe sacarlo a una esquina, mientras el otro bando, con más piezas pero más débiles, intenta atraparlo antes de que escape.
main/ ← Hnefatafl (punto de entrada), ConsoleInput (lectura validada por consola)
game/ ← Game (bucle de turnos), Player (abstracta), Human, Machine (IA)
model/ ← Board, Movement, Piece, Position, Square, Color
enums/ ← PieceType, Directions
test/ ← HnefataflTest (JUnit 5)
Player es una clase abstracta con dos implementaciones: Human (lee la jugada por consola) y Machine (decide la jugada con la búsqueda descrita arriba). Game no conoce la diferencia entre ambas, solo invoca decideMove().
Proyecto sin Maven/Gradle (configurado originalmente como proyecto Eclipse). Para ejecutarlo desde línea de comandos:
git clone https://github.com/rafamartinez99/Hnefatafl.git
cd Hnefatafl
Opción A — desde un IDE (recomendado): importa la carpeta como proyecto existente en Eclipse o IntelliJ (ya incluye .classpath/.project) y ejecuta main/Hnefatafl.java.
Opción B — desde terminal:
# Linux / macOS / Git Bash en Windows
javac -d bin -cp src $(find src -name "*.java" -not -path "*/test/*")
java -cp bin main.Hnefatafl
# Windows PowerShell
javac -d bin -cp src (Get-ChildItem -Recurse -Path src -Filter *.java | Where-Object { $_.FullName -notmatch '\\test\\' } | ForEach-Object FullName)
java -cp bin main.Hnefatafl
[!NOTE] Los colores ANSI del tablero requieren una terminal que los soporte (Windows Terminal, PowerShell moderno, la terminal de la mayoría de IDEs, o cualquier terminal Linux/macOS). En
cmd.execlásico pueden no renderizarse correctamente.
Para ejecutar los tests (requiere el JAR incluido en lib/):
java -jar lib/junit-platform-console-standalone-1.10.2.jar -cp bin --select-package test
Machine simula sus movimientos candidatos y, para cada uno, la mejor respuesta del rival usando la misma heurística — suficiente para jugar de forma razonable sin necesitar poda alfa-beta ni profundidad mayor.Board.copy() para simulación segura: la IA nunca modifica el tablero real; cada candidato se evalúa sobre una copia profunda del tablero.Movement separa legalidad silenciosa de legalidad explicada: isLegal() se usa internamente por la IA al explorar decenas de movimientos sin imprimir nada por consola; getIllegalReason() se usa solo cuando un humano introduce una jugada inválida, para explicarle por qué.Game trata a Human y Machine exactamente igual a través de Player.decideMove(), sin ramas de código distintas según el tipo de jugador.Este proyecto se distribuye bajo la licencia MIT. Consulta el fichero LICENSE para más información.