Facultad de Ingeniería Carrera de Ingeniería de Sistemas Computacionales
JUEGO DE NAVES PROGRAMADO EN C++
Autor: 75322 – Gregory Recalde Gutiérrez
Profesor: DIEGO CUEVA CHAMORRO
Trujillo, Noviembre 2016
Resumen
Este proyecto consiste en la programación de un juego de naves programado en c++, en el cual se utilizarán bucles del tipo for, y while, además se hará uso de las clases, funciones, y listas. Primero se crearon las funciones para el escenario, posteriormente se crearon clases para cada objeto del juego, que serían: Nave, asteroide, bala. Cada clase tiene sus respectivas funciones y métodos que posterior mente fueron llamados en la rutina principal, en la cual mediante condiciones se logra dar vida al juego. 1. Descripción Se inició incluyendo las siguientes librerías: #include
#include #include #include #include #include Primeramente se realizó la creación de funciones para manejar el entorno de la consola, la primera fue: void setposition (int x,int y) con la que nos ubicamos en cualquier parte de la consola utilizando coordenadas. La segunda: void borrarCursor () que borrará el cursor y su parpadeo. La tercera: void pintar_limites () con la que imprimiremos los límites del escenario. Cabe resaltar que se usó la función printf () ya que esta nos permite imprimir los caracteres del código ASCII. Posterior mente se crearon los objetos, usando class, que nos permitirá crear clases, la ventaja de trabajar con clases es que nos permitirá mantener un orden y facilitar la codificación, debido a que cada clase tiene sus propias funciones y métodos.
CLASES, FUNCIONES Y MÉTODOS La clase de tipo NAVE De atributos: (int _x,int _y,int _corazones, int _vidas):x(_x),y(_y),corazones(_corazones),vidas(_vidas){} ; Contiene las siguientes funciones: Para devolver el valor de las coordenadas “x”,”y” respectivamente: int X(){return x;} int Y(){return y;} Para retornar el número de vidas: int VID(){return vidas;} Para borrar un corazón: void COR(){corazones--;}
Para imprimir la nave en la consola: void pintar(); Para borrar la nave de la consola: void borrar(); Para mover la nave: void mover (); Para imprimir corazones: void pintar_corazones(); Para crear la animación de estallido de la nave al perder todos los corazones: void morir(); La clase de tipo ASTEROIDE De atributos: (int _x,int _y):x(_x),y(_y){} Contiene las siguientes funciones: Función para imprimir el asteroide: void pintar(); Función para realizar el movimiento del asteroide: void mover(); Función para crear la colisión de NAVE-ASTEROIDE:0 void choque(class NAVE &player); Función ara devolver el valor de las coordenadas “x”,”y” respectivamente: int X(){return x;} int Y(){return y;}
La clase de tipo BALA De atributos: (int _x, int _y): x(_x),y(_y){} Contiene las siguientes funciones: Función ara devolver el valor de las coordenadas “x”,”y” respectivamente: int X(){return x;} int Y(){return y; Función para realizar el movimiento de la bala: void mover(); Función para detectar la colisión de la bala y el límite superior: bool fuera(); RUTINA PRINCIPAL int main() Conforme se creaban las funciones principales de la consola y posteriormente las clases se iban declarando en nuestra rutina principal, haciendo que interaccionen entre ellas para hacer que funcione el juego. Primero se llamaron las siguientes funciones: borrarCursor(); pintar_limites(); NAVE player(24,24,3,3); player.pintar(); player.pintar_corazones(); Y se crearon dos list<> que fueron list A y list B Cada uno con su iterador respectivamente: iterator it; // para list A iterator itA; // para list B Las listas para que nos hagamos una idea actúan similarmente a un arreglo, solo que cada elemento que se va creando se acumula.
Para el funcionamiento del juego se uspo while(¡game_over), dentro de esto se imprimió el puntaje. Luego haciendo usó la función if y dentro de esta la función kbhit, que nos permite reconocer los caracteres que ingresamos por teclado. Se usó bucles de tipo for para hacer las interacciones entre: NAVE-ASTEROIDE, NAVE-BALA, BALA-ASTEROIDE. Y para finalizar el juego se usó if() y como condición player.VID() == 0 entonces game_over=true; por consiguiente se saldría del bucle y se mostraría “GAME OVER”. 2. Boceto de interfaces INICIO DEL JUEGO Puntos 0
Salud VIDAS ♥♥♥ 3
UPN
Al compilar el código se tiene que visualizar el juego en ejecución, el puntaje, las vidas y la salud, además de los límites. Se tiene que ver también a la nave y asteroides que caen, así también las balas que emite la nave. INICIO DEL JUEGO Puntos 0
GAME OVER
Salud VIDAS ♥♥♥ 3
Al perder todas las vidas se muestra el mensaje de “GAME OVER”.
3. Diagrama o Pseudocódigo
inicio borrarCursor(); pintar_limites(); NAVE player(24,24,3,3); player.pintar(); player.pintar_corazones(); list B; list::iterator it; list A; i=0 list::iterator itA;
i++
i<5
A.push_back(new ASTEROIDE(rand()%75+3,rand()%5+4)); !game_over
MOVER NAVE kbhit() COLISIÓN ASTEROIDE-NAVE CREACIÓN BALA { COLISIÓN BALA ASTEROIDE AUMENTAR puntos+=5 } player.VID()==0
4. Implementación
fin
game_over=true; "GAME OVER"
5. Conclusiones y recomendaciones Como resultado final se tiene un juego de naves, que se logró mediante animaciones simples que en realidad son bucles, concluyendo que se puede lograr un juego mediante conceptos básicos de programación, se rescata como aprendizaje que a la hora de hacer el código verificar bien los signos manteniendo un orden, ya que un mínimo error conlleva a que no se pueda compilar el juego, y en el peor de los casos como pasó en la elaboración de este proyecto, que se compile y haya una ejecución defectuosa del juego. Y como enseñanza primordial que con un conocimiento básico y con nuestro ingenio se pueden lograr juegos como este.