Modulo: Programacin de videojuegos Docente: Miguel ngel Ramos Grande Alumnos: Karen Lizbeth Nolasco Garca. Manuel Alexis Hurtado Morales. Carrera: Informtica Tema: Practica 11: Aplicacin de matemticas para Juego: Tiro Al Plato. Usando lenguaje de programacin Propsito: Elabora una aplicacin de videojuego de Tiro Al plato usando lenguaje de programacin para la aplicacin de conceptos de geometra plana. Tuxpan Veracruz de Rodrguez Cano. En esta prctica realizaremos un juego de tiro al plato, el cual consiste de un paisaje en el cual se van tirando platos y con el mouse vamos rompiendo los mismo y vamos ganando puntos. Comenzamos declarando las libreras a utilizar ya que son importantes en el videojuego.
#include <stdlib.h> // Para declarar lo que es el "rand" #include <math.h> // Para declarar lo que es el "sqrt" #include <allegro.h>
Definimos las variables Globales. int TamanyoDianaActual, numDianaActual, posXdiana, posYdiana, radioDiana, incremXdiana, incremYdiana, acertado = 0; // Si atinamos a un plato, pasa otro plato nuevo.
long int puntos = 0, contadorActual = 0;
float a,b,c; // Se dibuja la parbola del plato.
/* -------------- Se empieza con la Rutina de inicializacin -------- */ int inicializa() { allegro_init(); // Se inicia Allegro install_keyboard(); install_timer(); install_mouse();
// Intentamos entrar a modo grafico if (set_gfx_mode(GFX_SAFE, ANCHOPANTALLA, ALTOPANTALLA, 0, 0) != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message( "Incapaz de entrar a modo grafico\n%s\n", allegro_error); return 1; }
// Ahora se inicializan las variables numDianaActual = 1; srand(time(0)); show_mouse(screen);
// Y termino indicando que no ha habido errores return 0; }
/* -------------- Rutina de nuevo plato ----------- */ void nuevoPlato() { int xVerticeParabola, yVerticeParabola; float pParabola;
// Un radio al azar entre el valor mximo y el mnimo radioDiana = (rand() % (MAXRADIODIANA - MINRADIODIANA)) + MINRADIODIANA; // La velocidad (incremento de X), similar incremXdiana = (rand() % (MAXINCREMXDIANA - MININCREMXDIANA)) + MININCREMXDIANA;
// Vrtice de la parbola, cerca del centro en horizontal xVerticeParabola = ANCHOPANTALLA/2 + (rand() % 40) - 20; // Y mitad superior de la pantalla, en vertical yVerticeParabola = (rand() % (ALTOPANTALLA/2));
// Calculo a, b y c de la parbola pParabola = ALTOPANTALLA/2; a = 1 / (2*pParabola); b = -xVerticeParabola / pParabola; c = ((xVerticeParabola*xVerticeParabola) / (2*pParabola) ) + yVerticeParabola;
/* -------------- Rutina de redibujar pantalla ---- */ void redibujaPantalla() { // Oculto ratn scare_mouse(); // Borro pantalla clear_bitmap(screen); // Sincronizo con barrido para menos parpadeos vsync();
// Y dibujo todo lo que corresponda rectfill(screen,0,0,ANCHOPANTALLA,ALTOPANTALLA-40, makecol(70, 70, 255)); //Cielo textprintf(screen, font, 4,4, palette_color[13], "Puntos: %d", puntos); // Puntuacin rectfill(screen,0,ALTOPANTALLA-40,ANCHOPANTALLA,ALTOPANTALLA, makecol(0, 150, 0)); //Suelo circlefill(screen, posXdiana, posYdiana, radioDiana, palette_color[15]); // Diana if (numDianaActual <= NUMDIANAS) { textprintf(screen, font, 4,190, palette_color[13], "Platos: %d", NUMDIANAS-numDianaActual); }
unscare_mouse(); }
/* -------------- Distancia entre dos puntos ------ */ float distancia(int x1, int x2, int y1, int y2) { return (sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) ); } /* -------------- Rutinas de temporizacin ---- */ volatile long int contador = 0;
Conclusin: En esta prctica realizamos un videojuego con el uso del mouse ya que al dar clic en el plato este se rompe y pasa otro plato y se acumulan puntos, tuvimos que conocer e investigar ms comandos, y definimos constantes. Aqu se muestran los puntos que llevamos acumulados. Plato Indica que nuestra partida ha terminado