Vous êtes sur la page 1sur 9

COLEGIO DE EDUCACION PROFESIONAL TECNICA DEL ESTADO

DEVERACRUZ
LIC. JESUS REYES HEROLES


ALUMNA: Emma Graciela Santos Blanco
COMPAERO DE EQUIPO: ngel Martnez Hernndez


GRUPO: 604
Practica: 11
MATRICULA: 111650076-8
CARERRA: P.T.B. en Informtica

MODULO: Programacin de videojuegos

DOCENTE: Miguel ngel Ramos Grande


PROPSITO: Elabora una aplicacin de videojuego del Tiro Al
Plato usando lenguaje de programacin para la aplicacin de
conceptos de geometra plana.
Prctica11
INTRODUCCION:
Mostraremos como realizamos la prctica nmero 11, que se trat de elaborar una
aplicacin de videojuego del Tiro Al Plato usando lenguaje de programacin para la
aplicacin de conceptos de geometra plana.

DESARROLLO:

Lo que hicimos fue checar que nos peda la gua pedaggica en la practica 11, nos
manda un link en el que se encuentra el cdigo realizamos algunas modificaciones y
quedo de la siguiente manera:

#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 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();


Ejecutamos el programa con F9 nos mandara la ventana de ejecucin

CONCLUSION
Esta prctica estuvo algo complicada de comprender, siempre es ms fcil analizar un
cdigo cuando t lo realizaste, pero checar errores de programas que no fueron
realizados por nosotros es ms difcil de detectarlos, pero la termine con ayuda de mi
compaero de equipo ngel Martnez.

Vous aimerez peut-être aussi