Hola! 👨💻. Somos estudiantes del curso de Programación III de la Universidad de Ingeniería y Tecnología de Lima, Perú. Hemos aplicado conocimientos aprendidos durante el curso de Programación para desarrollar el juego Hex en C++.
Tabla de contenidos:
El proyecto consiste en la elaboración del juego Hex tradicional pero con la implementación adicional de nuevas características. El juego tiene como objetivo ser más flexible para el usuario ya que se da la posibilidad de hacer cambios a las características de su juego antes, durante y después de haber sido empezado. Por otro lado, el usuario tiene la opción de elegir dos opciones de juego, puede ser contra otro jugador de forma local o contra la computadora.
-
Swap:
El juego se realiza en un intercambio de un movimiento de una casilla por jugador. El juego no ejecuta ninguna acción para el jugador cuando intenta realizar movimientos durante el turno del otro jugador.
-
Tiempo límite:
El juego tiene un tiempo límite de partida sin detención con una duración de --- minutos. Si el juego acaba sin recibir un ganador, declara a los dos jugadores como partida perdida.
- Juego multiplayer simultáneo en tiempo real para dos jugadores conectados en diferentes dispositivos.
- Bot de múltiples dificultades para un solo jugador.
- Configuración dinámica del juego para una mejor adaptabilidad y experiencia del jugador en partidas.
- Lenguaje de programación C++17 o posterior
- Graphvz, sintaxis para diseñar grafos en imagen png.
- Librería GUI SFML, API de C++ para animación gráfica.
- Monte Carlo Tree Search
- Strategy stealing argument
- Four color theorem
- Breadth first search on queues
-
BFS (Breadth First Search):
Una búsqueda en anchura (BFS) es un algoritmo de búsqueda, recorre los nodos de un grafo, comenzando en la raíz para luego explorar todos los vecinos de este nodo. Además, para cada uno de los vecinos se exploran sus respectivos vecinos adyacentes, y así hasta que se recorra todo el grafo.
BFS va formando un árbol a medida que va recorriendo un grafo y se usa para algoritmos en donde resulta crítico elegir el mejor camino posible en cada momento del recorrido.
-
Queue:
Las colas o queues son un tipo de adaptadores en contenedores y son compatibles con una estructura de datos FIFO (el primero en entrar es el primero en salir). Por ejemplo, las personas que hacen cola para entrar a un baño. Se pueden agregar elementos a la parte posterior de la línea y quitarlos de la parte delantera de la línea. Asimismo, se puede inspeccionar tanto la parte delantera como trasera de una línea. La restricción de acceder únicamente a los elementos
front
yback
de esta manera es el motivo por el que se usaqueue
.
- sh-compatible shell
- Compilador g++ v20 o posterior
- Administrador de paquetes Cmake v3 o posterior
- Librerias SFML de GCC (previamente no incluidas)
- Clonación de repositorio con
git clone https://github.com/CS1103/proyecto-final-grupo-5-1
El juego Hex se lleva a cabo en un tablero de tamaño NxN. Adicionalmente, es jugado por dos jugadores.
- Al comienzo de cada partida el tablero está vacío.
- Cada jugador cuenta con fichas de un color, este color no puede ser igual para ambos jugadores.
- Cada jugador elige con qué color va a jugar y, por tanto, cuáles son los bordes que debe conectar; como los bordes a conectar deben ser opuestos, han de conectarse el noroeste con el sureste para un jugador, y el nordeste con el suroeste para el otro.
- Los movimientos se harán por turnos alternativos de cada jugador y es una ficha por turno.
- La finalidad del juego es ir formando una hilera de fichas ininterrumpida entre uno de los lados del rombo que es el tablero y el opuesto, uniendo de este modo ambos lados.
- Los jugadores no podrán mover las fichas ya incorporadas.
- Gana el jugador que antes consiga completar la hilera.
Distribuido bajo la licencia MIT. Ver LICENSE
para más información.
- Podemos observar que es posible identificar cada casilla por una letra (A...K) y un número (1...11).
- Se cumple que cada casilla tiene 6 vecinos, excepto las casillas en los bordes del tablero, que tienen 4 y las casillas en las esquinas, que tienen 2.
- Los vecinos de una casilla central X, N son (X, N - 1); (X, N + 1); (X - 1, N); (X - 1, N + 1); (X + 1, N); (X + 1, N - 1).
Si quisieramos utilizar una matriz como contenedor para el tablero, estas serian las relaciónes de la casilla 3,3
https://drive.google.com/drive/folders/1PuyXshL9sv8BIPtPuWmuKuQGoyduDPui?usp=sharing
- Allyson Tiphany Sánchez Báez
- Mariel Carolina Tovar Tolentino
- Noemi Alejandra Huarino Anchillo
- Leonardo Daniel Isidro Salazar
- Adrian Sandoval Huamaní
- Enrique Francisco Flores Teniente
-
The Game of Hex: An Automatic Theorem Proving Approach to Game Programming
Paper que explica un teorema para analizar posiciones en el juego Hex.
Anshelevich, V.V. (2000). The Game of Hex: An Automatic Theorem Proving Approach to Game Programming. AAAI/IAAI. -
PLAYING AND SOLVING THE GAME OF HEX
Paper extenso que explica a detalle como crear un programa de Hex.
Philip Thomas Henderson. 2010. Playing and solving the game of hex. Ph.D. Dissertation. University of Alberta, CAN. -
MoHex 2.0: a pattern-based MCTS Hex player
Un paper que explica el funcionamiento de MoHex 2.0 (2014), predecesor del actual mejor programa de Hex MoHex3HNN.
Huang, SC., Arneson, B., Hayward, R.B., Müller, M., Pawlewicz, J. (2014). MoHex 2.0: A Pattern-Based MCTS Hex Player. In: van den Herik, H., Iida, H., Plaat, A. (eds) Computers and Games. CG 2013. Lecture Notes in Computer Science(), vol 8427. Springer, Cham.https://doi.org/10.1007/978-3-319-09165-5_6 -
Hex 2018: MoHex3HNN over DeepEzo
Paper que analiza la victoria de MoHex3HNN sobre DeepEzo en uno de los ultimos torneos de programas de Hex.
Gao, C., Takada, K., & Hayward, R.B. (2019). Hex 2018: MoHex3HNN over DeepEzo. J. Int. Comput. Games Assoc., 41, 39-42. -
https://github.com/cgao3/neurobenzene
Repositorio de código de Neurobenzene, Red neuronal usada en MoHex3, incluye un instalable de MoHex3.
-
clases = PascalCaseName
-
methods = camelCaseName
-
constants = CONSTANT_VARIABLE
-
variables = simple_variable_name
-
functions = VerbPascalCase (start with verb)
- function parameters = camelCaseParameter
-
prepending variables (optional):
- attribute = m_... (class member)
- pointers = p_...
- reference = r_...
- constants = c_...
#ifndef PASCALCASENAME_H
#define PASCALCASENAME_H
class PascalCaseName{
private:
protected:
public:
};
#endif // !PASCALCASENAME_H
- You should NEVER implement a destructor, copy constructor, move constructor or assignment operators in your code.
- You should NEVER use a raw pointer to manage a resource.