Está en la página 1de 13

COLEGIO DE EDUCACION PROFESIONAL TECNICA DEL ESTADO DE

VERACRUZ
PLANTEL Lic. Jess Reyes Heroles #165
UNIDAD: 2
NOMBRE DEL ALUMNO: Blanca Arely Benitez Miguel
Irasema Mndez Reyes
MATRICULA:111650167-5
DOCENTE:
ING. MIGUEL ANGEL RAMOS GRANDE
MDULO:
PROGRAMACION DE VIDEOJUEGOS
CARRERA: GRUPO: SEMESTRE:
Profesional Tcnico en Informtica 603 6
TITULO DE 11












PROPOSITO:
Elaborar una aplicacin de videojuego de TiroAlplato usando lenguaje de programacin para la
aplicacin de conceptos de geometra plana.
En esta prctica se realiz lo siguiente:
#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 de 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
Parabola = 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();
// Borro pantalla
clear_bitmap(screen);
// Sincronizo con barrido para menos parpadeos
vsync(); // 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[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();
}
//Distncia 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()
{
// Intentamos inicializar
if (inicializa() != 0)
exit(1);
// Bloqueamos la variable y la funcin 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 posicin inicial
redibujaPantalla(); // Y dibujo la pantalla
acertado = 0; // Todava no se ha acertado, claro

do { // Parte que se repite mientras se mueve

// Compruebo el ratn
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 ++; // Siguiente diana

} while (numDianaActual <= NUMDIANAS);

redibujaPantalla();
scare_mouse();
textprintf(screen, font, 40,100, palette_color[2],
"Partida terminada");
unscare_mouse();
readkey();
return 0;
}
/* Termino con la "macro" que me pide Allegro */
END_OF_MAIN();













1.- Para la elaboracin de esta prctica lo primero que realice es:
Abrir Dev-Cpp
Damos clic en ARCHIVO
Seleccionamos el men NUEVO
Enseguida damos clic en PROYECTO

2. Se abrir la ventana












3.- de todas estas aplicaciones elegimos la siguiente

Damos clic en aceptar
5.- Se abrir la siguiente ventana donde pondremos el nombre a
nuestro proyecto y elegiremos la ubicacin en donde se guardara
nuestro proyecto

6.-El siguiente paso es programar, para la elaboracin de este
programa el cdigo de la prctica es el siguiente.
*Empezamos introduciendo el codigo agregndole las
libreras correspondientes entre ellas la librera de
<allegro.h>


Se debe de compilar el programa para poder detectar
los errores.







Una vez terminado el programa compilamos para
empezar a jugar, probar que todo est bien y
Funcionando


Nos muestra los platillos y sus respectivos tamaos
que se muestran :




Y como pueden ver en la ltima pantalla pues nos
muestra los puntos
que acumulaste y el final de la partida, por ultimo
este programa se
juega con el mas y no con el teclado

También podría gustarte