ALUMNO: ngel Martnez Hernndez COMPAERA DE EQUIPO: Emma Graciela Santos Blanco GRUPO: 604 MATRICULA: 111650026-3 CARERRA: P.T.B. en Informtica MODULO: Programacin De Videojuegos DOCENTE: Miguel ngel Ramos Grande CONTENIDO: Esta prctica contiene un videojuego donde se aplicara las matemticas de tiro al plato con el uso del lenguaje de programacin con el programa de Dev c++ y con la biblioteca Allegro. PRACTICA 11: Aplicacin de matemticas para Juego: Tiro Al Plato. usando lenguaje de programacin PROPOSITO DE LA PRCTICA: Elabora una aplicacin de videojuego de Tiro Al plato usando lenguaje de programacin para la aplicacin de conceptos de geometra plana.
INTRODUCCION
En esta prctica vamos a realizar un videojuego usando las matemticas, con el uso de la geometra plana y del lenguaje de programacin para equipo mvil para as realizar el videojuego tiro al plato. Vamos a ingresar este cdigo al programa para poder ejecutar nuestro videojuego.
#include <stdlib.h> // Para "rand" #include <math.h> // Para "sqrt" #include <allegro.h> //Se declaran las constantes globales #define ANCHOPANTALLA 320 #define ALTOPANTALLA 200 #define MAXRADIODIANA 25 #define MINRADIODIANA 5 #define NUMDIANAS 12 #define MAXINCREMXDIANA 20 #define MININCREMXDIANA 10 #define RETARDO 7 //Declaramos las variables globales int TamanyoDianaActual, numDianaActual, posXdiana, posYdiana, radioDiana, incremXdiana, incremYdiana, acertado = 0; // Si se acierta -> plato nuevo long int puntos = 0, contadorActual = 0; float a,b,c; // Para la parbola del plato
//Ahora la rutina de inicializacin donde iniciamos en allegro e intentamos entrar a modo grfico... int inicializa() { allegro_init(); install_keyboard(); install_timer(); install_mouse(); 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; } numDianaActual = 1; srand(time(0)); show_mouse(screen); return 0; } //Rutina para el nuevo 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; // Posicin horizontal: junto margen izquierdo posXdiana = radioDiana; // Posicin vertical: segn la parbola posYdiana = a*posXdiana*posXdiana + b*posXdiana + c; } //Redibujar pantalla... void redibujaPantalla() { // Oculto ratn scare_mouse(); // Se borra pantalla clear_bitmap(screen); // Sincronizo con barrido para menos parpadeos vsync(); // Se dibuja el paisaje a observar rectfill(screen,0,0,ANCHOPANTALLA,ALTOPANTALLA-40, makecol(70, 70, 255)); //Cielo textprintf(screen, font, 4,4, palette_color[11], "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[10], "Platos: %d", NUMDIANAS-numDianaActual); } // Restantes, si no acab unscare_mouse(); } //Se establece la distancia entre dos puntos float distancia(int x1, int x2, int y1, int y2) { return (sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) ); } //Rutina de temporizacin volatile long int contador = 0; void aumentaContador(void) { contador++; } END_OF_FUNCTION(aumentaContador); //Cuerpo del programa int main() { // Se inicializan los intentos if (inicializa() != 0) exit(1); // Bloqueamos la variable y la funcin del temporizador LOCK_ // En esta seccion se repite mientras se mueve VARIABLE( contador ); LOCK_FUNCTION( aumentaContador ); // Se pone el temporizador en marcha: cada 10 milisegundos install_int(aumentaContador, 10); do { // Ciclo que repite el codigo para cada plato nuevoPlato(); // Calculo su posicin inicial redibujaPantalla(); // Y dibujo la pantalla acertado = 0; // Todava no se ha acertado, claro do { // Compruebo el ratn if (mouse_b & 1) { if (distancia(mouse_x, posXdiana, mouse_y,posYdiana) <= radioDiana) { puntos += ANCHOPANTALLA- posXdiana; acertado = 1; } } // Si ya se ha pasado el retardo, muevo if (contador >= contadorActual+RETARDO) { contadorActual = contador+RETARDO; posXdiana += incremXdiana; posYdiana = a*posXdiana*posXdiana + b*posXdiana + c; redibujaPantalla(); } } while ((posXdiana <= ANCHOPANTALLA - radioDiana) && (acertado == 0)); numDianaActual ++; // Se coloca la siguiente diana } while (numDianaActual <= NUMDIANAS); redibujaPantalla(); scare_mouse(); textprintf(screen, font, 40,100, palette_color[2], "Partida terminada"); unscare_mouse(); readkey(); return 0; } /* Se concluye con la "macro" que pide Allegro */ END_OF_MAIN();
CONCLUSION En esta prctica fue utilizar variables ya que utilizamos el uso de las matemticas con la geometra plana para los grficos del juego y la librera de Allegro , me pareci fcil ya que el cdigo no contena errores que se pudieran corregir, aunque si tenamos que comprender los cdigos que ingresamos al programa.