Colegio de educacin profesional tcnica del estado de
Veracruz. Plante #165 Lic. Jess Reyes Heroles
Modulo: Programacin De Videojuegos Docente: Miguel ngel Ramos Grande Alumno: Manuel Alexis Hurtado Morales. Carrera: Informtica Grupo: 604 info Matrcula: 111650246-7 Prctica 11: Aplicacin de matemticas para Juego: Tiro Al Plato. Usando lenguaje de programacin Propsito de la prctica: Elabora una aplicacin de videojuego de Tiro Al plato usando lenguaje de programacin para la aplicacin de conceptos de geometra plana. Direccin del blog: http://programaciondevideojuegosalexis.blogspot.mx/ 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