Está en la página 1de 7

Colegio nacional de educacion profesional

tecnico
lic. Jesus reyes heroles



Nombre Del Alumno: Epigmenia Santes Tolentino


Nombre Del Docente: Miguel Angel Ramos Grande


Nombre Del Modulo: Programacion De Videojuegos


Practica : 11


Grupo: 603


Carrera: Informatica



























Practica 11


Propsito de la prctica:
Elabora una aplicacin de videojuego de TiroAlplato usando lenguaje de
programacin para la aplicacin de conceptos de geometra plana.


Este programa se trata de que con el uso de nuestra flecha, cada vez
que pase un crculo le demos clic para sumar puntos.
En el caso de que no se llegue a tocar las pelotitas este seguir
corriendo hasta llegar al puntaje ms alto.

#include <stdlib.h>
#include <math.h>
#include <allegro.h>

Estas son 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

En esta parte estamos declarando las Variables
int
TamanyoDianaActual,
numDianaActual,
posXdiana,
posYdiana,
radioDiana,
incremXdiana,
incremYdiana,
acertado = 0;
long int
puntos = 0,
contadorActual = 0;

float
a,b,c;


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;
}


Ahora se inicializan las variables

numDianaActual = 1;
srand(time(0));
show_mouse(screen);

return 0;
}

Esto es para la Rutina del nuevo circulo

void nuevoPlato()
{
int xVerticeParabola,
yVerticeParabola;
float pParabola;

radioDiana = (rand() % (MAXRADIODIANA - MINRADIODIANA))
+ MINRADIODIANA;

incremXdiana = (rand() % (MAXINCREMXDIANA - MININCREMXDIANA))
+ MININCREMXDIANA;

xVerticeParabola = ANCHOPANTALLA/2 + (rand() % 40) - 20;
yVerticeParabola = (rand() % (ALTOPANTALLA/2));


pParabola = ALTOPANTALLA/2;
a = 1 / (2*pParabola);
b = -xVerticeParabola / pParabola;
c = ((xVerticeParabola*xVerticeParabola) / (2*pParabola) )
+ yVerticeParabola;


posXdiana = radioDiana;
posYdiana =
a*posXdiana*posXdiana +
b*posXdiana +
c;
}

void redibujaPantalla()
{
scare_mouse();

clear_bitmap(screen);
vsync();

rectfill(screen,0,0,ANCHOPANTALLA,ALTOPANTALLA-40,
makecol(70, 70, 255)); //Cielo
textprintf(screen, font, 4,4, palette_color[13],
"Puntos: %d", puntos);
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);
} // Restantes, si no acab

unscare_mouse();
}


float distancia(int x1, int x2, int y1, int y2) {
return (sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) );
}

volatile long int contador = 0;

void aumentaContador(void) { contador++; }
END_OF_FUNCTION(aumentaContador);



int main()
{
if (inicializa() != 0)
exit(1);

LOCK_VARIABLE( contador );
LOCK_FUNCTION( aumentaContador );

// Y ponemos el temporizador en marcha: cada 10 milisegundos
install_int(aumentaContador, 10);


do {

nuevoPlato();
redibujaPantalla();
acertado = 0;


utilizamos un dowhile Parte que se repite mientras se mueve
do {
if (mouse_b & 1) {
if (distancia(mouse_x, posXdiana, mouse_y,posYdiana)
<= radioDiana) {
puntos += ANCHOPANTALLA-posXdiana;
acertado = 1;
}
}

if (contador >= contadorActual+RETARDO) {
contadorActual = contador+RETARDO;
posXdiana += incremXdiana;
posYdiana =
a*posXdiana*posXdiana +
b*posXdiana +
c;
redibujaPantalla();
}

} while ((posXdiana <= ANCHOPANTALLA - radioDiana)
&& (acertado == 0));

numDianaActual ++; // Siguiente diana

} while (numDianaActual <= NUMDIANAS);


redibujaPantalla();
scare_mouse();
textprintf(screen, font, 40,100, palette_color[15],
"Partida terminada");
unscare_mouse();
readkey();
return 0;

}
Terminamos el programa y cerramos allegro

END_OF_MAIN();


As es como fusiona nuestro programa:






Para que nuestro programa funcione no debe de tener ningn error, si
lo tiene tenemos que revisar el cdigo hasta encontrar la falla.