You are on page 1of 13

Practica 6

Elabora una aplicacin de videojuego con uso de Mapas para que


una figura avance por la pantalla; si choca con la pared exterior,
con su propia "cola" o con algn otro obstculo, muere.
El juego est dirigido a los nios y jvenes.
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 en donde pondremos el nombre
a nuestro proyecto y elegiremos la ubicacin en donde se
guardara nuestro proyecto

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


#include <allegro.h>
/* Posiciones X e Y iniciales */
Se deben definir las posiciones iniciales de X y Y como se muestra a
continuacin.
#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 */
Declararemos las variables de la posicin actual y el incremento de la
posicin.
#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;
Declaramos la variable que vamos a pulsar para almacenar la Tecla pulsada.
int tecla; Definimos la escala entre el tamao de mapa y de la pantalla.


/* La tecla pulsada */
int tecla;
/* Escala: relacion entre tama?o de mapa y de pantalla */
#define ESCALA 10
/* Ancho y alto de los sprites */
Se define el alto y el ancho de los sprite.
#define ANCHOSPRITE 20
#define ALTOSPRITE 20
/* 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 30
#define MAXCOLS 42

Se va diseando la posicin en la que se guste poner los ladrillos.

char mapa[MAXFILAS][MAXCOLS]={
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"X X",
"X XXX XXXXX X X",
"X X X X",
"X XXX X X X",
"X X X X",
"X X X X",
"X X X",
"X X X X",
"X XXXXXXXXXX X X",
"X X X X",
"X XXXXXX X X",
"X X XXXX X",
"X X X X",
"X XXX X X X",
"X X X X X",
"X X",
"X XX XX X",
"X X",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
};

int numFrutas = 7;
/* Nuestros sprites */
BITMAP *ladrilloFondo, *comida, *jugador;
typedef
char tipoSprite[ANCHOSPRITE][ALTOSPRITE];
/* El sprite en si: matriz de 30x30 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(8, 8);
clear_bitmap(ladrilloFondo);
for(i=0; i<ANCHOSPRITE; i++)
for (j=0; j<ALTOSPRITE; j++)
putpixel(ladrilloFondo, i, j,
palette_color[ spriteLadrillo[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] ]);

}
/* -------------- Rutina de dibujar el fondo ------------- */
void dibujaFondo()
{
int i, j;

clear_bitmap(screen);

for(i=0; i<MAXCOLS; i++)
for (j=0; j<MAXFILAS; j++) {
if (mapa[j][i] == 'X')
draw_sprite(screen, ladrilloFondo, i*ESCALA, j*ESCALA);
if (mapa[j][i] == 'F')
draw_sprite(screen, comida, i*ESCALA, j*ESCALA);
}

}

Ahora crearemos el cuerpo del programa.
int main()
{

allegro_init();
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 */
Empezamos mandamos a llamar las funciones de nuestros sprites y las del
fondo de la pantalla.
posX = POS_X_INI;
posY = POS_Y_INI;

incX = INC_X_INI;
incY = INC_Y_INI;


/* Parte repetitiva: */
do {
dibujaFondo();
draw_sprite (screen, jugador, posX*ESCALA, posY*ESCALA);

terminado = FALSE;




/* Si choco con la pared, se acabo */
if (mapa[posY][posX] == 'X') {
textout(screen, font,
"ups chocaste!", 100, 90, palette_color[13]);
terminado = TRUE;
}

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 indefininamente */
/* (la condici?n de salida la comprobamos "dentro") */

readkey();
return 0;

}
/* Termino con la "macro" que me pide Allegro */
Y de esta manera se estar concluyendo el programa.
END_OF_MAIN();




Conclusion: programa fue uno ms para practicar los siguientes.

You might also like