Funciona!!!

¿Cómo funciona la implementación de un sistema de victoria en el juego?
Para alcanzar un feeling completo en el desarrollo de nuestro videojuego, es esencial crear una lógica de victoria que ponga broche de oro a la experiencia del jugador. En esta clase, se realizaron ajustes para garantizar que el juego, al detectar que el jugador ha alcanzado el tesoro, concluya mostrando un mensaje de victoria y cierre adecuadamente.
¿Cómo se configura el mapa del juego?
La estructura del mapa define el recorrido del jugador y su interacción con los elementos del juego. Se incluye un camino específico marcado por paredes (representadas por un símbolo específico) que guían al jugador hacia su objetivo. El tesoro se representa por un símbolo, en este caso, un símbolo de dinero que señala el objetivo final del recorrido, incrementando la motivación del jugador para alcanzar su meta.
¿Cómo implementar la detección de victoria?
El sistema de detección de victoria en el juego es uno de los elementos cruciales. Para esto, se utiliza una función que verifica si el jugador ha 'colisionado' con el tesoro:
if (cells[x][y] == TREASURE_SYMBOL) { // Código para ejecutar cuando se detecta un tesoro drawVictoryWindow(); }
Este fragmento de código evalúa si las coordenadas actuales del jugador coinciden con las del tesoro. Si la condición se cumple, se dibuja la ventana de victoria y se detiene el ciclo de juego.
¿Cómo detener el juego tras el éxito?
Para finalizar el juego una vez que el jugador alcanza el tesoro, se introduce la lógica de terminar el ciclo de ejecución del juego. Esto se logra configurando una bandera gameOver que chequea si la partida debe continuar ejecutándose:
if (isVictoryConditionMet) { gameOver = true; }
Este paso es crucial para asegurarse de que el juego termine adecuadamente al alcanzar la meta, brindando una experiencia de usuario fluida.
Solución de problemas comunes en el desarrollo del juego
Durante el proceso de desarrollo, pueden surgir errores como el problema de las extensiones de archivos o conflictos de declaración de variables. Es fundamental definir correctamente las rutas de los archivos y revisar las declaraciones de funciones para asegurar su correcta ejecución.
Por ejemplo, la extensión doble de un archivo de texto Victory.txt podría causar un error de lectura. Es crucial verificar y corregir este tipo de detalles en el código fuente para evitar fallos en tiempo de ejecución.
Conclusiones del proyecto y recomendaciones finales
¡Has llegado al final del proyecto! Has construido un sistema esencial de juego que simula una pequeña aventura gráfica. Recuerda siempre:
Este es apenas el comienzo de lo que podrías lograr con la programación de videojuegos. Sigue aprendiendo y explorando nuevas funcionalidades para expandir tus habilidades. ¡Mucha suerte en tu camino como desarrollador!
Para alcanzar un feeling completo en el desarrollo de nuestro videojuego, es esencial crear una lógica de victoria que ponga broche de oro a la experiencia del jugador. En esta clase, se realizaron ajustes para garantizar que el juego, al detectar que el jugador ha alcanzado el tesoro, concluya mostrando un mensaje de victoria y cierre adecuadamente.
La estructura del mapa define el recorrido del jugador y su interacción con los elementos del juego. Se incluye un camino específico marcado por paredes (representadas por un símbolo específico) que guían al jugador hacia su objetivo. El tesoro se representa por un símbolo, en este caso, un símbolo de dinero que señala el objetivo final del recorrido, incrementando la motivación del jugador para alcanzar su meta.
El sistema de detección de victoria en el juego es uno de los elementos cruciales. Para esto, se utiliza una función que verifica si el jugador ha 'colisionado' con el tesoro:
if (cells[x][y] == TREASURE_SYMBOL) {
// Código para ejecutar cuando se detecta un tesoro
drawVictoryWindow();
}
Este fragmento de código evalúa si las coordenadas actuales del jugador coinciden con las del tesoro. Si la condición se cumple, se dibuja la ventana de victoria y se detiene el ciclo de juego.
Para finalizar el juego una vez que el jugador alcanza el tesoro, se introduce la lógica de terminar el ciclo de ejecución del juego. Esto se logra configurando una bandera gameOver que chequea si la partida debe continuar ejecutándose:
if (isVictoryConditionMet) {
gameOver = true;
}
Este paso es crucial para asegurarse de que el juego termine adecuadamente al alcanzar la meta, brindando una experiencia de usuario fluida.
Durante el proceso de desarrollo, pueden surgir errores como el problema de las extensiones de archivos o conflictos de declaración de variables. Es fundamental definir correctamente las rutas de los archivos y revisar las declaraciones de funciones para asegurar su correcta ejecución.
Por ejemplo, la extensión doble de un archivo de texto Victory.txt podría causar un error de lectura. Es crucial verificar y corregir este tipo de detalles en el código fuente para evitar fallos en tiempo de ejecución.
¡Has llegado al final del proyecto! Has construido un sistema esencial de juego que simula una pequeña aventura gráfica. Recuerda siempre:
Este es apenas el comienzo de lo que podrías lograr con la programación de videojuegos. Sigue aprendiendo y explorando nuevas funcionalidades para expandir tus habilidades. ¡Mucha suerte en tu camino como desarrollador!
Funciona!!!

Comparto esta pagina que convierte cualquier imagen en Ascii Art: https://manytools.org/hacker-tools/convert-images-to-ascii-art/
Por cuestiones de seguridad, es recomendable que sea visible la extensión de los archivos. Ejemplo: Supongamos ver un archivo llamado imagen.jpg pero que en realidad es imagen.jpg.exe y al darle clic podría contener código malicioso
Puffs esto es excelente :D POO con video juegos hechos por ti mismo

IMPORTANTE Podemos hacer numeracion de los errores para tener una mejor identificacion de elos al momento de verlos, es como ver por tu propia cuenta que error es el que esta sucediendo
Hice todo tal cual, y mi programa no reconoce el booleano de isGameOver, dejo esas fracciones de código por si me pueden ayudar:
en GameMap.cpp:
bool GameMap::SetPlayerCell(int playerX, int playerY)
{
if(cells[playerY][playerX].IsBlocked() == false)
{
if(cells[playerY][playerX].id == '$')
{
bool isGameOver = true;
DrawVictory();
return true;
} else {
if(PlayerCell != NULL)
{
PlayerCell->id =0;
}
PlayerCell = &cells[playerY][playerX];
PlayerCell->id = '3';
}
return true;
} else {
return false;
}
}
en GameMap.h la variable está declarada y es pública.
Build log me da este error:
include/GameMap.h:21:27: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
bool isGameOver = false;
^
C:\Users\usuario\Documents\cursos\platzi\Fundamentos\introCmasmas\JuegoFinal\src\GameMap.cpp: In constructor 'GameMap::GameMap()':
C:\Users\usuario\Documents\cursos\platzi\Fundamentos\introCmasmas\JuegoFinal\src\GameMap.cpp:12:10: warning: unused variable 'isGameOver' [-Wunused-variable]
bool isGameOver = false;
^
C:\Users\usuario\Documents\cursos\platzi\Fundamentos\introCmasmas\JuegoFinal\src\GameMap.cpp: In member function 'bool GameMap::SetPlayerCell(int, int)':
C:\Users\usuario\Documents\cursos\platzi\Fundamentos\introCmasmas\JuegoFinal\src\GameMap.cpp:32:18: warning: unused variable 'isGameOver' [-Wunused-variable]
bool isGameOver = true;
^
Gracias!
en mi mapa no aparecen los 0's
Que buen curso
1111111111 1010000001 1010101101 1000101001 1001001001 1010010101 1001000101 1010101001 1100001001 1001110101 1010000011 10110101&1 1000010101 1010100001 1111111111 intente hacerlo un poco complicado, nose... ¿Que le parece?
hecho :O
void Gamemapa::drawvictory()
{
string line; /*esta linea va a estar cargando cada linea de mi archivo,
las strings son uniones o arreglos de caracteres.*/
ifstream Myfile("victoria.txt"); //entrada de flujo de datos
if(Myfile.is_open())
{
while(getline(Myfile,line))
{
cout << line <<endl;
}
cin>> line; //solo para pausar por un momento el programa
}
else
{
cout << "la victoria no pudo cargarse"<<endl;
}
}
Carlos Herrera
Reinaldo Mendoza
Reinaldo Mendoza
Sebastian Carvalho
Fernando Yutiz
Jose Antonio Rojas Ollarves
Jose Antonio Rojas Ollarves
Delfina Merola Moreschi
Delfina Merola Moreschi
Youssef Abarca
r2d2bt Barajas Tirado
Oscar Jaramillo
Gary Jared Velasquez Chapas
Jesus Daniel Martinez Bautista
Carlos Nassif Trejo Garcia
GERARDO EMMANUEL ALONSO CELIS
Luis Javier Jaramillo García
Sebastian Andree Lopera Quevedo
James Kristof Ubiarco Rodriguez
José Martínez Santana
Reinaldo Mendoza
Diego Lozano Paz
Funciona!!!
jaja, y cual es la sorpresa
felicitaciones
Comparto esta pagina que convierte cualquier imagen en Ascii Art: https://manytools.org/hacker-tools/convert-images-to-ascii-art/
Por cuestiones de seguridad, es recomendable que sea visible la extensión de los archivos. Ejemplo: Supongamos ver un archivo llamado imagen.jpg pero que en realidad es imagen.jpg.exe y al darle clic podría contener código malicioso
Puffs esto es excelente :D POO con video juegos hechos por ti mismo
IMPORTANTE Podemos hacer numeracion de los errores para tener una mejor identificacion de elos al momento de verlos, es como ver por tu propia cuenta que error es el que esta sucediendo
Hice todo tal cual, y mi programa no reconoce el booleano de isGameOver, dejo esas fracciones de código por si me pueden ayudar:
en GameMap.cpp:
bool GameMap::SetPlayerCell(int playerX, int playerY) { if(cells[playerY][playerX].IsBlocked() == false) { if(cells[playerY][playerX].id == '$') { bool isGameOver = true; DrawVictory(); return true; } else { if(PlayerCell != NULL) { PlayerCell->id =0; } PlayerCell = &cells[playerY][playerX]; PlayerCell->id = '3'; } return true; } else { return false; } }
en GameMap.h la variable está declarada y es pública.
Build log me da este error:
include/GameMap.h:21:27: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 bool isGameOver = false; ^ C:\Users\usuario\Documents\cursos\platzi\Fundamentos\introCmasmas\JuegoFinal\src\GameMap.cpp: In constructor 'GameMap::GameMap()': C:\Users\usuario\Documents\cursos\platzi\Fundamentos\introCmasmas\JuegoFinal\src\GameMap.cpp:12:10: warning: unused variable 'isGameOver' [-Wunused-variable] bool isGameOver = false; ^ C:\Users\usuario\Documents\cursos\platzi\Fundamentos\introCmasmas\JuegoFinal\src\GameMap.cpp: In member function 'bool GameMap::SetPlayerCell(int, int)': C:\Users\usuario\Documents\cursos\platzi\Fundamentos\introCmasmas\JuegoFinal\src\GameMap.cpp:32:18: warning: unused variable 'isGameOver' [-Wunused-variable] bool isGameOver = true; ^
Gracias!
El problema surgió cuando cambiamos el booleano del main al mapa.
Intenta quitando el "bool" al momento de dibujar porque se entiende que estas creando otra variable con el mismo nombre
en mi mapa no aparecen los 0's
Que buen curso
1111111111 1010000001 1010101101 1000101001 1001001001 1010010101 1001000101 1010101001 1100001001 1001110101 1010000011 10110101&1 1000010101 1010100001 1111111111 intente hacerlo un poco complicado, nose... ¿Que le parece?
hecho :O
void Gamemapa::drawvictory() { string line; /*esta linea va a estar cargando cada linea de mi archivo, las strings son uniones o arreglos de caracteres.*/ ifstream Myfile("victoria.txt"); //entrada de flujo de datos if(Myfile.is_open()) { while(getline(Myfile,line)) { cout << line <<endl; } cin>> line; //solo para pausar por un momento el programa } else { cout << "la victoria no pudo cargarse"<<endl; } }
#include <iostream> #include "Player.h" #include "MapCell.h" #include "GameMap.h" using namespace std; int main() { GameMap Map; Player hero; Map.drawIntro(); while ( Map.gameContinue ) { Map.draw(); hero.CallInput(); if ( !Map.setPlayerCell(hero.x, hero.y) ) { hero.resetToSafePosition(); } } return 0; }
Genial!!
Ohh, qué bonito v quedando.
#include <iostream> #include "personaje.h" #include "celdasDeMapa.h" #include "elMapa.h" int main() { //se crean el mapa y el jugador elMapa mapaDelJuego; personaje personajePrincipal; bool gameOver = false; //se crea la condicion para que el juego no acabe //por estetica std::cout << " ESTE ES EL MEJOR JUEGO QUE VAS A JUGAR EN TODA TU VIDA " << std::endl; std::cout << "________________________________________________________" << std::endl; //se imprime el intro mapaDelJuego.leerIntro(); std::cout << std::endl; //retorna verdadero o falso pero como es la primera vez retorna verdadero y da el id 'H' a la posicion del jugador mapaDelJuego.actualizarPosicion(personajePrincipal.posicionV, personajePrincipal.posicionH, gameOver); //el primer mapa del juego mapaDelJuego.dibujarMapa(); //se imprime la ubicacion del personajePrincipal personajePrincipal.imprimirCoordenadas(personajePrincipal.posicionV, personajePrincipal.posicionH); //se inicializa el loop del juego while(!gameOver) { //el jugador cambia la posicion personajePrincipal.entrada(gameOver); //si la celda esta bloqueada if(!mapaDelJuego.actualizarPosicion(personajePrincipal.posicionV, personajePrincipal.posicionH, gameOver)) { //se le asigana al personaje la posicion anterior personajePrincipal.posicionAnterior(); }//si NO esta bloqueada por la funcion del condicional se actualiza la posicion del jugador //y luego se dibuja el mapa con los caracteres o "id" actualizados mapaDelJuego.dibujarMapa(); //se imprime la ubicacion del personajePrincipal personajePrincipal.imprimirCoordenadas(personajePrincipal.posicionV, personajePrincipal.posicionH); //por estetica lineas de separacion std::cout << "________________________________________________________" << std::endl; std::cout << "________________________________________________________" << std::endl; std::cout << std::endl; } //se imprime el cierre mapaDelJuego.leerCierre(); //por estetica std::cout << "________________________________________________________" << std::endl; std::cout << std::endl; std::cout << " MUCHAS GRACIAS POR JUGAR, AHORA MEJORA CONSTANTEMENTE " << std::endl; return 0; }
Es muy poco satisfactorio ver std::cout
Que emoción completar un juego que ya sabia como iba a ganar, jaja, a un paso del tesoro se siente la adrenalina!!!
Gracias!