ramos practica 11 c

7
Colegio de educación profesional técnica del estado de Veracruz. Plante #165 Lic. Jesús Reyes Heroles Modulo: Programación De Videojuegos Docente: Miguel Ángel Ramos Grande Alumno: Manuel Alexis Hurtado Morales. Carrera: Informática Grupo: 604 info Matrícula: 111650246-7 Práctica 11: Aplicación de matemáticas para Juego: Tiro Al Plato. Usando lenguaje de programación Propósito de la práctica: Elabora una aplicación de videojuego de Tiro Al plato usando lenguaje de programación para la aplicación de conceptos de geometría plana. Dirección del blog:

Upload: alexis-hurtado

Post on 15-Apr-2017

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ramos Practica 11 c

Colegio de educación profesional técnica del estado de Veracruz. Plante #165 Lic. Jesús

Reyes HerolesModulo: Programación De VideojuegosDocente: Miguel Ángel Ramos Grande

Alumno: Manuel Alexis Hurtado Morales.

Carrera: Informática

Grupo: 604 infoMatrícula: 111650246-7

Práctica 11:Aplicación de matemáticas para Juego: Tiro Al

Plato. Usando lenguaje de programaciónPropósito de la práctica:

Elabora una aplicación de videojuego de Tiro Al plato usando lenguaje de programación para la

aplicación de conceptos de geometría plana.Dirección del blog:

http://programaciondevideojuegosalexis.blogspot.mx/

En esta práctica 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 librerías a utilizar ya que son importantes en el videojuego.

#include <stdlib.h> // Para declarar lo que es el "rand"

Page 2: Ramos Practica 11 c

#include <math.h> // Para declarar lo que es el "sqrt"#include <allegro.h>  Definimos 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

 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 parábola del plato.  /* -------------- Se empieza con la Rutina de inicialización -------- */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);

Page 3: Ramos Practica 11 c

  // 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 máximo y el mínimo radioDiana = (rand() % (MAXRADIODIANA - MINRADIODIANA)) + MINRADIODIANA; // La velocidad (incremento de X), similar incremXdiana = (rand() % (MAXINCREMXDIANA - MININCREMXDIANA)) + MININCREMXDIANA;  // Vértice de la parábola, 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 parábola pParabola = ALTOPANTALLA/2; a = 1 / (2*pParabola); b = -xVerticeParabola / pParabola; c = ((xVerticeParabola*xVerticeParabola) / (2*pParabola) ) + yVerticeParabola;  // Posición horizontal: junto margen izquierdo posXdiana = radioDiana; // Posición vertical: según la parábola posYdiana = a*posXdiana*posXdiana + b*posXdiana + c; }  /* -------------- Rutina de redibujar pantalla ---- */void redibujaPantalla(){ // Oculto ratón scare_mouse(); // Borro pantalla clear_bitmap(screen); // Sincronizo con barrido para menos parpadeos vsync();  

Page 4: Ramos Practica 11 c

// 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); // Puntuación 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 temporización ---- */volatile long int contador = 0; void aumentaContador(void) { contador++; }END_OF_FUNCTION(aumentaContador);

/* -------------- Cuerpo del programa ------------- */ int main(){  // Intentamos inicializar if (inicializa() != 0) exit(1);  // Bloqueamos la variable y la función del temporizador LOCK_VARIABLE( contador ); LOCK_FUNCTION( aumentaContador );  // Y ponemos el temporizador en marcha: cada 10 milisegundos install_int(aumentaContador, 10);    do { // Parte que se repite para cada plato  nuevoPlato(); // Calculo su posición inicial redibujaPantalla(); // Y dibujo la pantalla acertado = 0; // Todavía no se ha acertado, claro 

Page 5: Ramos Practica 11 c

do { // Parte que se repite mientras se mueve  // Compruebo el mouse if (mouse_b & 1) { if (distancia(mouse_x, posXdiana, mouse_y,posYdiana) <= radioDiana) { puntos += ANCHOPANTALLA-posXdiana; acertado = 1; } }  // Si ya 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 ++;   } while (numDianaActual <= NUMDIANAS);   redibujaPantalla(); scare_mouse(); textprintf(screen, font, 40,100, palette_color[15], "Partida terminada"); unscare_mouse(); readkey(); return 0; }END_OF_MAIN() Aquí termina Allegro.

Programa compilado Aquí se muestran los puntos que llevamos acumulados.

Page 6: Ramos Practica 11 c

Conclusión: En esta práctica 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 más comandos, y definimos constantes.

Plato

Indica que nuestra partida ha terminado