Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.