Sunteți pe pagina 1din 19

COLEGIO DE EDUCACION PROFESIONAL TECNICA

DEL ESTADO DE VERACRUZ


LIC. JESUS REYES HEROLES



ALUMNA: Emma Graciela Santos Blanco
COMPAERO DE EQUIPO: ngel Martnez Hernndez
GRUPO: 604
MATRICULA: 111650026-3
CARERRA: P.T.B. en Informtica
MODULO: Programacin De Videojuegos
DOCENTE: Miguel ngel Ramos Grande
CONTENIDO: Esta prctica contiene un videojuego manejando distintas aproximaciones
usando el programa de Dev c++ y el uso del lenguaje de programacin con la librera
allegro.
PRACTICA 15: Manejo de distintas aproximaciones
Usando lenguaje de programacin.

PROPOSITO DE LA PRCTICA: Elabora una aplicacin de videojuego juego de
Marciano usando lenguaje de programacin que muestre los movimientos mediante
varios tipos de acercamientos.





INTRODUCCIN
Mostraremos como realizamos la prctica nmero 15 en la creamos un programa
usando lenguaje de programacin C++ que mostrara movimientos mediante varios
tipos de acercamientos.
DESARROLLO
1.- Para el desarrollo de la prctica 7 realizamos los siguientes pasos:
Abrir Dev-Cpp>Clic en Archivo>Seleccionamos el men Nuevo>Proyecto, como
aparece en la imagen siguiente.






2. - Se abrir la siguiente ventana y seleccionamos el men Multimedia>Allegro
Application (Static), y escribimos el nombre de nuestro proyecto que es
Miniserpiente2.Como se muestra en la imagen de abajo.











Este es el cdigo que nos manda la practica
#include <allegro.h>

/* -------------- Constantes globales ------------- */
#define ANCHOPANTALLA 320
#define ALTOPANTALLA 200

// Los dos siguientes valores son los retardos
// hasta mover la nave y el marciano, pero ambos
// en centsimas de segundo
#define RETARDOCN 10
#define RETARDOCM 25

#define MARGENSUP 40
#define MARGENDCHO 30
#define MARGENIZQDO 30
#define MARGENINF 50
#define INCREMX 5
#define INCREMY 15

/* -------------- Variables globales -------------- */
PALETTE pal;
BITMAP *imagen;
BITMAP *nave;
BITMAP *marciano1;
BITMAP *marciano2;

int fotograma = 1;

int xMarciano = MARGENIZQDO;
int yMarciano = MARGENSUP;
int xNave = ANCHOPANTALLA / 2;
int yNave = ALTOPANTALLA-16-MARGENINF;

int desplMarciano = INCREMX;
int desplNave = INCREMX;

int puedeMoverMarciano = 1;
int puedeMoverNave = 1;
int tecla;

int salir = 0;


/* -------------- Rutinas de temporizacin -------- */
// Contadores para temporizacin
volatile int contadorN = 0;
volatile int contadorM = 0;

// La rutina que lo aumenta cada cierto tiempo
void aumentaContadores(void)
{
contadorN++;
contadorM++;
}

END_OF_FUNCTION(aumentaContadores);




/* -------------- Rutina de inicializacin -------- */
int inicializa()
{
allegro_init(); // Inicializamos Allegro
install_keyboard();
install_timer();

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

// e intentamos abrir imgenes
imagen = load_pcx("spr_inv.pcx", pal);
if (!imagen) {
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("No se ha podido abrir la imagen\n");
return 1;
}
set_palette(pal);

// Ahora reservo espacio para los otros sprites
nave = create_bitmap(16, 16);
marciano1 = create_bitmap(16, 16);
marciano2 = create_bitmap(16, 16);

// Y los extraigo de la imagen "grande"
blit(imagen, nave // bitmaps de origen y destino
, 32, 32 // coordenadas de origen
, 0, 0 // posicin de destino
, 16, 16); // anchura y altura

blit(imagen, marciano1, 0, 32, 0, 0, 16, 16);
blit(imagen, marciano2, 16, 32, 0, 0, 16, 16);

// Rutinas de temporizacin
// Bloqueamos las variables y la funcin del temporizador
LOCK_VARIABLE( contadorN );
LOCK_VARIABLE( contadorM );
LOCK_FUNCTION( aumentaContadores );

// Y ponemos el temporizador en marcha: cada 10 milisegundos
// (cada centsima de segundo)
install_int(aumentaContadores, 10);

// Y termino indicando que no ha habido errores
return 0;
}

/* -------------- Rutina de inicializacin -------- */
int mueveMarciano()
{
// Finalmente, calculo nueva posicin
xMarciano += desplMarciano;
// Compruebo si debe bajar
if ((xMarciano > ANCHOPANTALLA-16-MARGENDCHO)
|| (xMarciano < MARGENIZQDO))
{
desplMarciano = -desplMarciano; // Direccin contraria
yMarciano += INCREMY; // Y bajo una lnea
}
// O si debe volver arriba
if (yMarciano > ALTOPANTALLA-16-MARGENINF) {
xMarciano = MARGENIZQDO;
yMarciano = MARGENSUP;
desplMarciano = INCREMX;
}
}

/* ------------------------------------------------ */
/* */
/* -------------- Cuerpo del programa ------------- */

int main()
{

// Intento inicializar
if (inicializa() != 0)
exit(1);


do { // Parte que se repite hasta pulsar tecla

// Slo se pueden mover tras un cierto tiempo
if (contadorM >= RETARDOCM) {
puedeMoverMarciano = 1;
contadorM = 0;
}
if (contadorN >= RETARDOCN) {
puedeMoverNave = 1;
contadorN = 0;
}

if (puedeMoverMarciano || puedeMoverNave) {

// Compruebo teclas pulsadas para salir
// o mover la nave
if (keypressed()) {
tecla = readkey() >> 8;
if ( tecla == KEY_ESC)
salir = 1;
if (puedeMoverNave) {
if (( tecla == KEY_RIGHT)
&& (xNave < ANCHOPANTALLA-16-MARGENDCHO)) {
xNave += INCREMX;
puedeMoverNave = 0;
}
if (( tecla == KEY_LEFT)
&& (xNave > MARGENIZQDO+16)) {
xNave -= INCREMX;
puedeMoverNave = 0;
}
clear_keybuf();
}
}

// Sincronizo con el barrido para evitar
// parpadeos, borro la pantalla y dibujo la nave
vsync();
clear_bitmap(screen);
draw_sprite(screen, nave, xNave, yNave);

// Dibujo un marciano u otro, alternando
if (fotograma==1) {
draw_sprite(screen, marciano1, xMarciano, yMarciano);
if (puedeMoverMarciano)
fotograma = 2;
} else {
draw_sprite(screen, marciano2, xMarciano, yMarciano);
if (puedeMoverMarciano)
fotograma = 1;
}

// Y calculo su nueva posicin si corresponde
if (puedeMoverMarciano) {
mueveMarciano();
puedeMoverMarciano = 0;
}

}

} while (!salir);

destroy_bitmap(imagen);
readkey();
return 0;

}

/* Termino con la "macro" que me pide Allegro */
END_OF_MAIN();
Cambiamos la direccin de donde se encuentran nuestras imgenes y el cdigo quedo
de la siguiente manera:
#include <allegro.h>

/* -------------- Constantes globales ------------- */
#define ANCHOPANTALLA 320
#define ALTOPANTALLA 200

// Los dos siguientes valores son los retardos
// Hasta mover la nave y el marciano, pero ambos
// en cent?simas de segundo
#define RETARDOCN 10
#define RETARDOCM 25

#define MARGENSUP 40
#define MARGENDCHO 30
#define MARGENIZQDO 30
#define MARGENINF 50
#define INCREMX 5
#define INCREMY 15

/* -------------- Variables globales -------------- */
PALETTE pal;
BITMAP *imagen;
BITMAP *nave;
BITMAP *marciano1;
BITMAP *marciano2;

int fotograma = 1;

int xMarciano = MARGENIZQDO;
int yMarciano = MARGENSUP;
int xNave = ANCHOPANTALLA / 2;
int yNave = ALTOPANTALLA-16-MARGENINF;

int desplMarciano = INCREMX;
int desplNave = INCREMX;

int puedeMoverMarciano = 1;
int puedeMoverNave = 1;
int tecla;

int salir = 0;


/* -------------- Rutinas de temporizaci?n -------- */
// Contadores para temporizaci?n
volatile int contadorN = 0;
volatile int contadorM = 0;

// La rutina que lo aumenta cada cierto tiempo
void aumentaContadores(void)
{
contadorN++;
contadorM++;
}

END_OF_FUNCTION(aumentaContadores);


/* -------------- Rutina de inicializacion -------- */
int inicializa()
{
allegro_init(); // Inicializamos Allegro
install_keyboard();
install_timer();

// 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;
}
// e intentamos abrir im?genes
imagen = load_bitmap("C:\\Users\\Emma\\Desktop\\imagen.bmp", pal);
marciano1 = load_bitmap("C:\\Users\\Emma\\Desktop\\marciano1.bmp", pal);
nave = load_bitmap("C:\\Users\\Emma\\Desktop\\nave.bmp", pal);
marciano2 = load_bitmap("C:\\Users\\Emma\\Desktop\\marciano2.bmp", pal);

if (!imagen) {
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("No se ha podido abrir la imagen\n");
return 1;
}
set_palette(pal);

// Ahora reservo espacio para los otros sprites
nave = create_bitmap(16, 16);
marciano1 = create_bitmap(16, 16);
marciano2 = create_bitmap(16, 16);

// Y los extraigo de la imagen "grande"
blit(imagen, nave // bitmaps de origen y destino
, 32, 32 // coordenadas de origen
, 0, 0 // posicion de destino
, 16, 16); // anchura y altura

blit(imagen, marciano1, 0, 32, 0, 0, 16, 16);
blit(imagen, marciano2, 16, 32, 0, 0, 16, 16);

// Rutinas de temporizacion
// Bloqueamos las variables y la funcion del temporizador
LOCK_VARIABLE( contadorN );
LOCK_VARIABLE( contadorM );
LOCK_FUNCTION( aumentaContadores );

// Y ponemos el temporizador en marcha: cada 10 milisegundos
// (cada cent?sima de segundo)
install_int(aumentaContadores, 10);

// Y termino indicando que no ha habido errores
return 0;
}

/* -------------- Rutina de inicializaci?n -------- */
int mueveMarciano()
{
// Finalmente, calculo nueva posici?n
xMarciano += desplMarciano;
// Compruebo si debe bajar
if ((xMarciano > ANCHOPANTALLA-16-MARGENDCHO)
|| (xMarciano < MARGENIZQDO))
{
desplMarciano = -desplMarciano; // Direccion contraria
yMarciano += INCREMY; // Y bajo una linea
}
// O si debe volver arriba
if (yMarciano > ALTOPANTALLA-16-MARGENINF) {
xMarciano = MARGENIZQDO;
yMarciano = MARGENSUP;
desplMarciano = INCREMX;
}
}

/* ------------------------------------------------ */
/* */
/* -------------- Cuerpo del programa ------------- */

int main()
{

// Intento inicializar
if (inicializa() != 0)
exit(1);


do { // Parte que se repite hasta pulsar tecla

// Solo se pueden mover tras un cierto tiempo
if (contadorM >= RETARDOCM) {
puedeMoverMarciano = 1;
contadorM = 0;
}
if (contadorN >= RETARDOCN) {
puedeMoverNave = 1;
contadorN = 0;
}

if (puedeMoverMarciano || puedeMoverNave) {

// Compruebo teclas pulsadas para salir
// o mover la nave
if (keypressed()) {
tecla = readkey() >> 8;
if ( tecla == KEY_ESC)
salir = 1;
if (puedeMoverNave) {
if (( tecla == KEY_RIGHT)
&& (xNave < ANCHOPANTALLA-16-MARGENDCHO)) {
xNave += INCREMX;
puedeMoverNave = 0;
}
if (( tecla == KEY_LEFT)
&& (xNave > MARGENIZQDO+16)) {
xNave -= INCREMX;
puedeMoverNave = 0;
}
clear_keybuf();
}
}

// Sincronizo con el barrido para evitar
// parpadeos, borro la pantalla y dibujo la nave
vsync();
clear_bitmap(screen);
draw_sprite(screen, nave, xNave, yNave);

// Dibujo un marciano u otro, alternando
if (fotograma==1) {
draw_sprite(screen, marciano1, xMarciano, yMarciano);
if (puedeMoverMarciano)
fotograma = 2;
} else {
draw_sprite(screen, marciano2, xMarciano, yMarciano);
if (puedeMoverMarciano)
fotograma = 1;
}

// Y calculo su nueva posici?n si corresponde
if (puedeMoverMarciano) {
mueveMarciano();
puedeMoverMarciano = 0;
}

}

} while (!salir);

destroy_bitmap(imagen);
readkey();
return 0;

}

/* Termino con la "macro" que me pide Allegro */
END_OF_MAIN();
Ejecutamos el programa con F9 y nos manda la pantalla de ejecucin as como se
muestra a continuacin:




En caso de que la imagen no pudiera ser cargada nos mandara un mensaje de alerta
diciendo que No se ha podido abrir la imagen

CONCLUSION
Despus de que el profesor nos explicara como enlazar las imgenes a el programa
realizar la prctica 14 y 15 nos result ms sencillo terminarla, la realice con mi
compaero de equipo ngel Martnez.

S-ar putea să vă placă și