{"id":15464636,"url":"https://github.com/jamesblasco/back-from-klondike","last_synced_at":"2026-04-13T20:31:33.463Z","repository":{"id":118120375,"uuid":"136445219","full_name":"jamesblasco/Back-From-Klondike","owner":"jamesblasco","description":"University Project | Game developed with C++ and openGL ","archived":false,"fork":false,"pushed_at":"2018-06-07T09:29:53.000Z","size":14453,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-02T12:19:03.740Z","etag":null,"topics":["c","c-plus-plus","glut","klondike","opengl","soil","yoshi"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jamesblasco.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-06-07T08:18:20.000Z","updated_at":"2020-01-09T11:51:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"de112524-7abe-4e81-b5e4-4f66de9aa86d","html_url":"https://github.com/jamesblasco/Back-From-Klondike","commit_stats":{"total_commits":30,"total_committers":3,"mean_commits":10.0,"dds":"0.23333333333333328","last_synced_commit":"d6d62910ce4dad05f0491f2a996acfb8a0c7af6d"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesblasco%2FBack-From-Klondike","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesblasco%2FBack-From-Klondike/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesblasco%2FBack-From-Klondike/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesblasco%2FBack-From-Klondike/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jamesblasco","download_url":"https://codeload.github.com/jamesblasco/Back-From-Klondike/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246025936,"owners_count":20711575,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","c-plus-plus","glut","klondike","opengl","soil","yoshi"],"created_at":"2024-10-02T00:40:50.375Z","updated_at":"2026-04-13T20:31:33.453Z","avatar_url":"https://github.com/jamesblasco.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# Back from the Klondike\n\n![Screenshoot](./screenshot.png)\n\n## INTRODUCCI�N\n\nEl proyecto realizado se basa en el juego de estrategia Back from Klondike, en �l se podr� jugar en modo manual o un\nmodo autom�tico que te va mostrando la soluci�n. Todo el c�digo esta escrito en ingl�s para dar continuidad al\nlenguaje c++ estricto con sintaxis anglosajona y poder compartir posteriormente este c�digo en GitHub para cualquier\ndesarrollador.\n\nEste programa ha sido compilado correctamente el Ubuntu, Windows y MacOS y deber�a ser compatible con el resto de\nplataformas unix.\n\n# GU�A DE COMPILACI�N\n\nSe facilita una gu�a de compilaci�n para las distintas plataformas.\n\n**IMPORTANTE** Los ejecutables creados a partir de uno de estos m�todos no se deben mover a otra ubicaci�n. Durante\nsu ejecuci�n necesita archivos que se encuentran en esa misma carpeta del proyecto.\n\n**WINDOWS**\n\nSe incluye un proyecto de Microsoft Visual Studio que incluye las librer�as necesarias para compilar el proyecto para la\nplataforma WIN32. Abra el archivo **Base Klondike.vcxproj** , comprueba que est� en la plataforma **WIN32** con la\nconfiguraci�n **RELEASE** y no 64 y pulsa la tecla **F5**. En la carpeta del proyecto se crear� un ejecutable **klondike-\nwindows.exe.**\n\nSi desea usar otro compilador para Windows distinto de MVS, como mingw o cygwin, deber�n introducir manualmente\nlas librer�as\n\n**MACOS**\n\nSe facilita un **makefile** para compilar el proyecto. Acceda a la carpeta del proyecto a trav�s del **terminal** y ejecute el\nsiguiente comando\n\n```bash\n$ make build-mac\n```\nSe crear� el ejecutable **klondike-mac** en la carpeta del proyecto. Si prefiere compilarlo manualmente compruebe\ncompar�ndolo con el makefile que a�ade las librer�as y archivos necesarios\n\n**UBUNTU (UNIX)**\n\nPara compilar este programa es necesario tener GLUT instalado en el ordenador. Una forma r�pida de hacerlo es a\ntrav�s del siguiente comando:\n\n```bash\n$ sudo apt-get install freeglut3-dev\n```\nSe facilita un **makefile** para compilar el proyecto. Acceda a la carpeta del proyecto a trav�s del **terminal** y ejecute el\nsiguiente comando\n\n```bash\n$ make build-linux\n```\nSe crear� el ejecutable **klondike-linux** en la carpeta del proyecto. Si prefiere compilarlo manualmente compruebe\ncompar�ndolo con el makefile que a�ade las librer�as y archivos necesarios\n\n\n## DIAGRAMA DE COMUNICACI�N DE LAS FASES DEL JUEGO M�S INTERESANTES\n\nDesde _main()_ se configura toda la parte gr�fica de OpenGL y se a�aden los _callbacks_ de las funciones principales de\nOpenGL, y se llama al m�todo _init() de_ **_Game_** que carga las texturas.\n\nOpenGL llama al m�todo **_draw()_** de Game cada vez que quiere pintar todas las figuras por pantalla y este se encarga de\ndibujar cada **_Figure_** y mostrar sus texturas y animaciones.\n\nLas clases **_Keyboard_** y **_Mouse_** tienen cada una un m�todo que se ejecutan cuando se interacciona con el teclado o el\nrat�n respectivamente. Estos m�todos llaman a m�todos de la clase _Game_ que se encargan de cambiar par�metros de\nconfiguraci�n o cambiar el camino recorrido por el jugador, estos cambios se ven reflejados visualmente cuando\nOpenGL llama de nuevo al m�todo **_draw()_** de la clase Game.\n\nEn conclusi�n, Game es la clase principal del juego que gestiona por un lado la parte visual del juego usando funciones\nb�sicas de OpenGL y por otro lado sus atributos establecen el estado en el que se encuentra el juego y sus m�todos\npermiten modificar ese estado.\n\n## DESCRIPCI�N GENERAL DE FUNCIONES Y ESTRUCTURAS M�S REPRESENTATIVAS\n\nPara permitir una mayor legibilidad se ha organizado la mayor parte del c�digo en clases. Aunque se ha implementado\nvarias funciones, main() es la m�s relevante.\n\n_-_ **_Main()_**_._ Funci�n origen que ejecuta las funciones b�sicas de configuraci�n de OpenGl ( _glutInit,_\n    _glutInitDisplayMode, glutCreateWindow, ...)_ , a�ade los _callbacks_ de las funciones principales de OpenGl e\n    inicializa la clase Game (Inicializaba las texturas).\n\nMuchas de las clases son est�ticas ya que son clases que deben tener una �nica instancia accesible a trav�s de todo el\nprograma. Entre estas clases se encuentran por ejemplo **_Game_** _,_ **_Keyboard_** _,_ **_Mouse_** _,_ **_Window_** o **_Perspective_**.\n\n# DESCRIPCI�N GENERAL DE LAS CLASES M�S REPRESENTATIVAS\n\nSe realizar� una breve explicaci�n de las clases m�s representativas, para explicaci�n m�s exhaustiva se pueden revisar\nlos comentarios en el c�digo.\n\n- **Game:** Es una clase est�tica que se encarga del control del juego por medio de los atributos est�ticos tablero,\n    personaje, decoraciones, camino seguido, lista de casillas de la soluci�n y el modo de juego.\n    Algunos de los m�todos a destacar en game son: **_solve_** _(resuelve el juego),_ **_draw_** _(dibuja las figuras del juego),_\n    **_changeMode_** _(cambia el modo de juego), init (carga las texturas necesarias) y_ **_next_** _/_ **_nextStepInSolution_**\n    (avanza una casilla en el modo manual o en el autom�tico respectivamente)\n- **Figure:** La clase figura contiene los atributos de posici�n, rotaci�n y altura (cuando la figura est� saltando),\n    comunes a todas las figuras (existen las figuras tablero, casilla, nube y Yoshi).\n    Los m�todos a destacar en figura son _move (mueve la figura), jump (hace que la figura salte), rotate (hace que_\n    _la figura rote), draw (es un m�todo virtual puro, ya que se dibuja cada figura que forma espec�fica)._\n- **Board:** Es una clase que extiende de las clases figura y textura. Tiene los atributos del tama�o de cada casilla y\n    la matriz que contiene todas las casillas (representaci�n del tablero de juego). Los m�todos empleados\n    permiten acceder a las casillas mediante su posici�n relativa respecto a la casilla de salida.\n\n\n- **Box (Casilla):** Es una clase que extiende de la clase figura. Cuenta con los siguientes atributos:\n    - Posici�n relativa respecto casilla de salida\n    - N�mero de pasos a realizar.\n    - Status. Casilla del momento, casilla pasada.\n    - Casilla anterior del camino (puntero).\n       - Referencia al tablero (mediante puntero).\n       - Tipo de casilla (normal, goal o fuera).\n       - State. Revisado o sin revisar para el algoritmo\n          de b�squeda\nLos m�todos empleados son en su mayor�a de tipo **_get_** y **_set_** , para obtener los valores de los atributos.\nTambi�n se utiliza un m�todo para obtener la posible casilla a las que se puede acceder seg�n una direcci�n\ndeterminada.\n- **Keyboard/Mouse:** Se emplean ambas clases para controlar el programa mediante las �rdenes del usuario que\n    realiza con teclado y rat�n. Los m�todos empleados son los que mandan informaci�n cada vez que se emplea\n    rat�n o teclado y llaman a m�todos de la clase _Game_ encargada del control del juego.\n- **Path:** Contiene una lista de referencias a las casillas por las que ha pasado el personaje principal. Los m�todos\n    a destacar son **_addBox_** _(a�ade una casilla a la lista) y_ **_clear_** _(vac�a la lista)._\n\nOtras clases no tan importantes pero si necesarias son **_Perspective_** , que controla la perspectiva del observador con\nrespecto a los objetos opengl; **_Position_** / **_Position2D_** , que facilitan las operaciones y comparaciones entre vectores de 2 y\n3 dimensiones; **_Color_** , que facilita el uso intuitivo de colores rgba; **_Texture_** , que lee el archivo de la textura, lo guarda y\nlo carga en la figura con opengl; y **_Window_** , para controlar el tama�o del ventana y transformar coordenadas de la\nventana(posici�n del rat�n) a coordenadas de opengl.\n\n# DESCRIPCI�N DE PRUEBAS REALIZADAS PARA PROBAR EL CORRECTO FUNCIONAMIENTO DEL ALGORITMO\n\nOptamos desde un principio por la b�squeda por amplitud, ya que pensamos que ser�a lo �ptimo para el caso que se\nnos presentaba.\n\nSe implement� el c�digo del algoritmo sobre una base ya existente con la estructura de las clases casilla, tablero y\ndem�s. Se utiliz� para ir realizando pruebas, las salidas en pantalla de cout, indicando que se mostraran los resultados\nvalores de los pasos correspondientes a cada casilla por pantalla. Tambi�n se empleo la salida por pantalla para ir\nrevisando los estados de las casillas (revisado o sin revisar). Adem�s, buscamos previamente la soluci�n �ptima y\ncomprobamos que el algoritmo llegaba a la misma soluci�n.\n\n## GU�A DE USO DEL PROGRAMA EJECUTABLE\n\nAl ejecutar el juego, se abre una ventana que muestra un\ntablero con el jugador situado en la casilla de inicio. A\nmedida que avanzas las casillas se van marcado con\nesferas verdes aquellas por las que has pasado.\n\nEl juego tiene dos modos de uso: Manual y Autom�tico.\nEn la esquina superior izquierda se indica el modo actual\n\nPara cambiar de modo se tendr� que pulsar\n\n```\n1 Modo Autom�tico\n2 Modo Manual\n```\n\n- **Modo manual**. Permite al jugador intentar resolverlo. Es el modo que viene por **defecto** y por medio de las\n    teclas indicadas se podr� avanzar en distintas direcciones permitidas\n\n```\nW Avanzar al NORTE\nE Avanzar al NORESTE\nD Avanzar al ESTE\nC Avanzar al SUDESTE\n```\n```\nX Avanzar al SUR\nZ Avanzar al SUROESTE\nA Avanzar al OESTE\nQ Avanzar al NOROESTE\n```\n- **Modo autom�tico**. Va mostrando al jugador la soluci�n. Cada vez que se pulse el **tabulador** (barra\n    espaciadora) avanzar� una casilla de la soluci�n.\n\n**Movimiento de la c�mara**\n\nPara desplazar la vista por el tablero pulse el **bot�n izquierdo** del rat�n y desl�celo por la ventana, en caso de que sea\nun dispositivo t�ctil puede deslizar el dedo dentro de la ventana para el mismo efecto.\n\nCon el **bot�n derecho** puede rotar la vista. En un MacBook funci�n pulsando el touchpad con 2 dedos y arrastrando.\n\nPara cerrar el juego pulse la tecla **ESC**\n\n\n## PROPUESTAS DE MEJORA Y VALORACI�N PERSONAL\n\nAlgunas de las ideas que no ha dado tiempo a llevar a cabo son:\n\n- Mejora del decorado, con la inclusi�n de monta�as, �rboles y otros elementos que aportar�an profundidad al\n    juego.\n- Se pens� en implementar el modo primera persona, d�nde aparecer�an carteles indicando con km el n�mero\n    de pasos a realizar. Se buscaba conseguir una uni�n de la historia y el juego.\n- Inclusi�n de botones, para poder jugar �nicamente con el rat�n directamente.\n- Men� de inicio, con los modos de juego y una breve introducci�n a la historia del juego\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamesblasco%2Fback-from-klondike","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjamesblasco%2Fback-from-klondike","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamesblasco%2Fback-from-klondike/lists"}