You are on page 1of 9

COLEGIO DE EDUCACION PROFESIONAL TECNICA DEL ESTADO DE

VERACRUZ
PLANTEL “Lic. Jesús Reyes Heroles” #165

UNIDAD: 2

NOMBRE DEL ALUMNO: MATRÍCULA:
MARTHA L. LORENZO CERVANTES 111650276- 4

DOCENTE:
ING. MIGUEL ANGEL RAMOS GRANDE


MÓDULO:
PROGRAMACION DE VIDEOJUEGOS

CARRERA: GRUPO: SEMESTRE:
Profesional Técnico en Informática 603 6°




TITULO DE LA INVESTIGACIÓN O TAREA:


PRÁCTICA NUMERO 8





Evitar los parpadeos, juego miniserpiente 3 mediante aproximaciones


OBSERVACIONES:




















CALIFICACIÓN

Este es el código de la práctica 8:
#include <allegro.h>
/* Posiciones X e Y iniciales */
#define POS_X_INI 16
#define POS_Y_INI 10

#define INC_X_INI 1
#define INC_Y_INI 0
/* Pausa en milisegundos entre un "fotograma" y otro */
#define PAUSA 350
/* Teclas predefinidas */
#define TEC_ARRIBA KEY_E
#define TEC_ABAJO KEY_X
#define TEC_IZQDA KEY_S
#define TEC_DCHA KEY_D

int posX, posY; /* Posicion actual */
int incX, incY; /* Incremento de la posicion */
/* Terminado: Si ha chocado o comida todas las frutas */
int terminado;
/* La tecla pulsada */
int tecla;
/* Escala: relacion entre tama?o de mapa y de pantalla */
#define ESCALA 10
/* Ancho y alto de los sprites */
#define ANCHOSPRITE 10
#define ALTOSPRITE 10
/* Y el mapa que representa a la pantalla */
/* Como usaremos modo grafico de 320x200 puntos */
/* y una escala de 10, el tablero medira 32x20 */
#define MAXFILAS 20
#define MAXCOLS 33
char mapa[MAXFILAS][MAXCOLS]={
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"X X X",
"X F X X",
"X F X F X",
"X XXXXX X X",
"X X X X",
"X X X X X",
"X X X X XXXX",
"X X X X",
"X X",
"X X X",
"X F X X",
"X X X",
"X X F X",
"X X X X",
"X X X X",
"X X F X X",
"X F X X X",
"X F X",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
};
int numFrutas = 8;
/* Nuestros sprites */
BITMAP *ladrilloFondo, *comida, *jugador;
BITMAP *pantallaOculta; /* Y la pantalla oculta */
typedef
char tipoSprite[ANCHOSPRITE][ALTOSPRITE];
/* El sprite en si: matriz de 10x10 bytes */
tipoSprite spriteLadrillo =
{{0,2,2,2,2,2,2,2,2,0},
{2,1,1,1,1,1,1,1,1,2},
{2,1,1,1,1,1,1,1,1,2},
{2,1,1,1,1,1,1,1,1,2},
{2,1,1,1,1,1,1,1,1,2},
{2,1,1,1,1,1,1,1,3,2},
{2,1,1,1,1,1,1,3,3,2},
{2,1,1,1,1,1,3,3,2,2},
{2,2,2,2,2,2,2,2,2,0}
};
tipoSprite spriteComida =
{{0,0,0,2,0,0,0,0,0,0},
{0,0,2,2,0,0,2,2,0,0},
{0,4,4,4,2,2,4,4,0,0},
{4,4,4,4,4,2,4,4,4,0},
{4,4,4,4,4,4,4,4,4,0},
{4,4,4,4,4,4,4,4,4,0},
{4,4,4,4,4,4,4,4,4,0},
{4,4,4,4,4,4,4,4,4,0},
{0,4,4,4,4,4,4,4,0,0}
};
tipoSprite spriteJugador =
{{0,0,3,3,3,3,3,0,0,0},
{0,3,1,1,1,1,1,3,0,0},
{3,1,1,1,1,1,1,1,3,0},
{3,1,1,1,1,1,1,1,3,0},
{3,1,1,1,1,1,1,1,3,0},
{3,1,1,1,1,1,1,1,3,0},
{0,3,1,1,1,1,1,3,0,0},
{0,0,3,3,3,3,3,0,0,0}
};


/* -------------- Rutina de crear los sprites ------------- */
void creaSprites()
{
int i, j;

ladrilloFondo = create_bitmap(10, 10);
clear_bitmap(ladrilloFondo);
for(i=0; i<ANCHOSPRITE; i++)
for (j=0; j<ALTOSPRITE; j++)
putpixel(ladrilloFondo, i, j,
palette_color[ spriteLadrillo[j][i] ]);

comida = create_bitmap(10, 10);
clear_bitmap(comida);
for(i=0; i<ANCHOSPRITE; i++)
for (j=0; j<ALTOSPRITE; j++)
putpixel(comida, i, j,
palette_color[ spriteComida[j][i] ]);

jugador = create_bitmap(10, 10);
clear_bitmap(jugador);
for(i=0; i<ANCHOSPRITE; i++)
for (j=0; j<ALTOSPRITE; j++)
putpixel(jugador, i, j,
palette_color[ spriteJugador[j][i] ]);

pantallaOculta = create_bitmap(320, 200);
}
/* -------------- Rutina de dibujar el fondo ------------- */
void dibujaFondo()
{
int i, j;

clear_bitmap(pantallaOculta);

for(i=0; i<MAXCOLS; i++)
for (j=0; j<MAXFILAS; j++) {
if (mapa[j][i] == 'X')
draw_sprite(pantallaOculta, ladrilloFondo, i*ESCALA, j*ESCALA);
if (mapa[j][i] == 'F')
draw_sprite(pantallaOculta, comida, i*ESCALA, j*ESCALA);
}
}
/* -------------- Cuerpo del programa ------------- */
int main()
{
allegro_init(); /* Inicializamos Allegro */
install_keyboard();
install_timer();
/* Intentamos entrar a modo grafico */
if (set_gfx_mode(GFX_SAFE, 320, 200, 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;
}
/* ----------------------- Si todo ha ido bien: empezamos */
creaSprites();
dibujaFondo();
/* Valores iniciales */
posX = POS_X_INI;
posY = POS_Y_INI;

incX = INC_X_INI;
incY = INC_Y_INI;
/* Parte repetitiva: */
do {
dibujaFondo();
draw_sprite (pantallaOculta, jugador, posX*ESCALA, posY*ESCALA);

terminado = FALSE;
/* Si paso por una fruta: la borro y falta una menos */
if (mapa[posY][posX] == 'F') {
mapa[posY][posX] = ' ';
numFrutas --;
if (numFrutas == 0) {
textout(pantallaOculta, font,
"Ganaste!", 100, 90, palette_color[14]);
terminado = TRUE;
}
}
/* Si choco con la pared, se acabo */
if (mapa[posY][posX] == 'X') {
textout(pantallaOculta, font,
"Chocaste!", 100, 90, palette_color[13]);
terminado = TRUE;
}
/* En cualquier caso, vuelco la pantalla oculta */
blit(pantallaOculta, screen, 0, 0, 0, 0, 320, 200);

if (terminado) break;
/* Compruebo si se ha pulsado alguna tecla */
if ( keypressed() ) {
tecla = readkey() >> 8;

switch (tecla) {
case TEC_ARRIBA:
incX = 0; incY = -1; break;
case TEC_ABAJO:
incX = 0; incY = 1; break;
case TEC_IZQDA:
incX = -1; incY = 0; break;
case TEC_DCHA:
incX = 1; incY = 0; break;
}
}

posX += incX;
posY += incY;

/* Peque?a pausa antes de seguir */
rest ( PAUSA );
}
while (TRUE); /* Repetimos indefinidamente */
/* (la condici?n de salida la comprobamos "dentro") */
readkey();
destroy_bitmap(pantallaOculta);
destroy_bitmap(jugador);
destroy_bitmap(comida);
destroy_bitmap(ladrilloFondo);
return 0;

}

/* Termino con la "macro" que me pide Allegro */
END_OF_MAIN();




Primero que nada declaramos ALLEGRO e introducimos las
librerías…

Después declaramos posición, el inicio….



Ahora como se puede ver se da el alta, ancho, dibujamos el
modo grafico el recorrido de la serpiente…






Ahora sigue trabajar con las frutas…







Ahora se ocupara un void y for para la rutina de la serpiente
para poder colocar los ladrillos que serán las barreras de la
serpiente también se define el ancho de la serpiente, su
comida …


Aquí se muestra la parte repetitiva, lo que pasa
cuando la serpiente pasa por una fruta, muestra el
mensaje de ganaste y el de chocaste…













Ahora ya solo mostramos el final y como sabemos para
finalizar es con END_OF_MAIN();












Por ultimo ejecutamos, checamos que el programa este correcto y funcionando…

Aquí la serpiente solo esta moviéndose…


y aquí muestra el mensaje cuando choca
contra un muro…