Sie sind auf Seite 1von 7

Colegio de educacin profesional tcnica del estado de

Veracruz. Plante #165 Lic. Jess Reyes Heroles


Modulo: Programacin De Videojuegos
Docente: Miguel ngel Ramos Grande
Alumno:
Manuel Alexis Hurtado Morales.
Carrera:
Informtica
Grupo: 604 info
Matrcula: 111650246-7
Prctica 11:
Aplicacin de matemticas para Juego: Tiro Al Plato. Usando
lenguaje de programacin
Propsito de la prctica:
Elabora una aplicacin de videojuego de Tiro Al plato usando
lenguaje de programacin para la aplicacin de conceptos de
geometra plana.
Direccin del blog:
http://programaciondevideojuegosalexis.blogspot.mx/
En esta prctica 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 libreras a utilizar ya que son importantes en el videojuego.
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 abrira la siguiente ventana y seleccionamos el men siguiente:



#include <stdlib.h> // Para declarar lo que es el "rand"
#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
Comentario [A1]: Definimos el alto y el
ancho de la pantalla
#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 parbola del plato.


/* -------------- Se empieza con la Rutina de inicializacin -------- */
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);

Comentario [A2]: Instalamos el
teclado, el tiempo y el mouse
// 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 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;
}


/* -------------- Rutina de 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[13],
"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[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 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 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


Conclusin: En esta prctica 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 ms comandos, y definimos constantes.
Esta prctica es algo diferente a las anteriores, pero se utilizan conocimientos ya
empleados, para hacer ms fcil la compresin del cdigo.
Aqu se muestran los puntos
que llevamos acumulados.
Plato
Indica que nuestra partida ha
terminado

Das könnte Ihnen auch gefallen

  • Práctica 10 POVI
    Práctica 10 POVI
    Dokument5 Seiten
    Práctica 10 POVI
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 11 Ramos
    Practica 11 Ramos
    Dokument8 Seiten
    Practica 11 Ramos
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 10
    Práctica 10
    Dokument14 Seiten
    Práctica 10
    Alexis Hurtado
    Noch keine Bewertungen
  • Admón
    Admón
    Dokument10 Seiten
    Admón
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 5 Ramos
    Practica 5 Ramos
    Dokument8 Seiten
    Practica 5 Ramos
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 7
    Práctica 7
    Dokument10 Seiten
    Práctica 7
    Alexis Hurtado
    Noch keine Bewertungen
  • Ramos Practica 11 C
    Ramos Practica 11 C
    Dokument7 Seiten
    Ramos Practica 11 C
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 12 POVI
    Práctica 12 POVI
    Dokument9 Seiten
    Práctica 12 POVI
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica - 8 POVI
    Práctica - 8 POVI
    Dokument12 Seiten
    Práctica - 8 POVI
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 5
    Practica 5
    Dokument8 Seiten
    Practica 5
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica - 6 POVI
    Práctica - 6 POVI
    Dokument7 Seiten
    Práctica - 6 POVI
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica - 4 POVI
    Práctica - 4 POVI
    Dokument9 Seiten
    Práctica - 4 POVI
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 12 Simón Dice
    Práctica 12 Simón Dice
    Dokument9 Seiten
    Práctica 12 Simón Dice
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 10 Punteria
    Práctica 10 Punteria
    Dokument5 Seiten
    Práctica 10 Punteria
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 7
    Práctica 7
    Dokument10 Seiten
    Práctica 7
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 8
    Práctica 8
    Dokument12 Seiten
    Práctica 8
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 6
    Práctica 6
    Dokument7 Seiten
    Práctica 6
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 15
    Practica 15
    Dokument9 Seiten
    Practica 15
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 5
    Practica 5
    Dokument8 Seiten
    Practica 5
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 12 MRDE
    Practica 12 MRDE
    Dokument11 Seiten
    Practica 12 MRDE
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 13 Ramos
    Practica 13 Ramos
    Dokument12 Seiten
    Practica 13 Ramos
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 4
    Práctica 4
    Dokument9 Seiten
    Práctica 4
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 5 Ramos
    Practica 5 Ramos
    Dokument8 Seiten
    Practica 5 Ramos
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 11 Ramos
    Practica 11 Ramos
    Dokument8 Seiten
    Practica 11 Ramos
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 14 Manejo de Redes
    Practica 14 Manejo de Redes
    Dokument8 Seiten
    Practica 14 Manejo de Redes
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 10
    Práctica 10
    Dokument18 Seiten
    Práctica 10
    Alexis Hurtado
    Noch keine Bewertungen
  • Práctica 12 Simón Dice
    Práctica 12 Simón Dice
    Dokument8 Seiten
    Práctica 12 Simón Dice
    Alexis Hurtado
    Noch keine Bewertungen
  • Practica 12 MRDE
    Practica 12 MRDE
    Dokument11 Seiten
    Practica 12 MRDE
    Alexis Hurtado
    Noch keine Bewertungen
  • Proyecto MRDE
    Proyecto MRDE
    Dokument31 Seiten
    Proyecto MRDE
    Alexis Hurtado
    Noch keine Bewertungen