hola...
hey creo que me malinterpretaron en mi duda anterior, yo no quiero que me hagan la tarea lo que quiero es que me colaboren, una guia para poder hacer el movimiento del pacman...
ahora mi duda que les planteaba anterior mente era que no he podido hacer el pacman se un solo espacio por la matriz, lo que pasa es que se mueve deliveradamente y no se por que y yo creo que es por que no estoy usando correctamente la libreria, me gustaria que me ayudaran encontrando el error de este codigo para que el muñeco sol se mueva una posicion y no deje nada detras de el...
aqui dejo el codigo que tengo hasta ahora..
las referencias de las imagenes son las siguientes si quieren compilar el codigo:
voy a dar el nombre del archivo segido de su dimencion y formato:
galletaG es de 8x8.bmp
galletaP es de 7x9.bmp
nogalleta es de 14x14.bmp
pared es de 7x9.bmp
pacman es de 14x14.bmp
--------------------------------------------------------------------------------------------------
#include <allegro.h>
#include<stdio.h>
void arriba(int a[31][28], int b, int *c);
void derecha(int a[31][28], int *b, int c);
void abajo(int a[31][28] , int b , int *c);
void izquierda(int a[31][28], int *b, int c);
int main()
{
int MAX = 14; //cantidad de bitmaps de espaci entre imagen e imagen
int y = 23 , x = 13 ;
//initialize Allegro
allegro_init();
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
install_keyboard();
BITMAP *galletaP;
BITMAP *galletaG;
BITMAP *nogalleta;
BITMAP *pared;
BITMAP *pacman;
int fil,col;
//tablero de las galletas
//los 5's son espacios donde iran los fantasmas mas adelante
int galletas[31][28]={
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,4,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,4,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,2,
2,0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,2,
2,0,0,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,
2,2,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,2,5,5,5,5,2,2,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,5,5,5,5,5,5,2,0,2,2,0,2,2,2,2,2,2,
0,0,0,0,0,0,0,0,0,0,2,5,5,5,5,5,5,2,0,0,0,0,0,0,0,0,0,0,
2,2,2,2,2,2,0,2,2,0,2,5,5,5,5,5,5,2,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,4,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,4,2,
2,2,2,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,2,2,2,
2,2,2,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,2,2,2,
2,0,0,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,
2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,
2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,};
//tablero de las paredes
int paredes[31][28]={
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,2,
2,0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,2,
2,0,0,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,
2,2,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,2,0,0,0,0,2,2,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,0,0,0,0,0,0,2,0,2,2,0,2,2,2,2,2,2,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,
2,2,2,2,2,2,0,2,2,0,2,0,0,0,0,0,0,2,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,
2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,2,2,2,2,2,0,2,2,2,2,0,2,
2,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,2,
2,2,2,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,2,2,2,
2,2,2,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,2,2,2,
2,0,0,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,
2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,
2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,};
//cargamos el bitmap
galletaP = load_bitmap("galletaP.bmp", NULL);
nogalleta = load_bitmap("nogalleta.bmp", NULL);
pared = load_bitmap("pared.bmp", NULL);
pacman=load_bitmap("pacman.bmp",NULL);
galletaG=load_bitmap("galletaG.bmp",NULL);
//draw the sprite
for ( fil=0 ; fil<31;fil++)
{
for ( col=0 ; col<28;col++)
{
//dibujamos las galletas
if(galletas[fil][col]==0){
draw_sprite(screen, galletaP, col*MAX, fil*MAX);
}
if(galletas[fil][col]==4){
draw_sprite(screen, galletaG, col*MAX, fil*MAX);
}
//dibujamos las paredes
if(paredes[fil][col]==2)
{
draw_sprite(screen, pared, col*MAX, fil*MAX);
}
}
}
draw_sprite(screen, nogalleta, x*MAX, y*MAX);
draw_sprite(screen, pacman,x*MAX , y*MAX);
galletas
//coordenadas de x y y de paman en la matriz
while(!key[KEY_ESC])
{
if(key[KEY_UP])
{
if (galletas
{
arriba(galletas, x,&y);
draw_sprite(screen, nogalleta, x*MAX, (y+1)*MAX);
draw_sprite(screen, pacman, (x)*MAX, (y)*MAX);
}
}
if(key[KEY_DOWN])
{
if (galletas
- [y+1]==0 && galletas
- [y+1]!= 2)
{
abajo(galletas, x,&y);
draw_sprite(screen, nogalleta, x*MAX, (y-1)*MAX);
draw_sprite(screen, pacman, (x)*MAX, (y)*MAX);
}
}
if(key[KEY_RIGHT])
{
if (galletas [x+1][y]==0 && galletas [x+1][y]!= 2 )
{
derecha(galletas, &x,y);
draw_sprite(screen, nogalleta, (x-1)*MAX, y*MAX);
draw_sprite(screen, pacman, (x)*MAX, (y)*MAX);
}
}
if(key[KEY_LEFT])
{
if (galletas [x-1][y]==0 && galletas [x-1][y]!=2 )
{
izquierda (galletas, &x,y);
draw_sprite(screen, nogalleta, (x+1)*MAX, y*MAX);
draw_sprite(screen, pacman, (x)*MAX, (y)*MAX);
}
}
}
allegro_exit();
return 0;
destroy_bitmap(pacman);
destroy_bitmap(galletaP);
}
END_OF_MAIN();
void arriba(int a[31][28] , int b , int *c)
{
int i, j;
i = b ;
j = *c ;
if ( a
[j-1] == 0 )
{
j = j-1;
}
*c = j;
}
void abajo(int a[31][28] , int b , int *c)
{
int i, j;
i = b ;
j = *c ;
if ( a[j+1] == 0 )
{
j = j+1;
}
*c = j;
}
void derecha(int a[31][28], int *b, int c)
{
int i, j;
i = *b ;
j = c ;
if ( a[i+1][j] == 0 )
{
i = i+1;
}
*b = i;
}
void izquierda(int a[31][28], int *b, int c)
{
int i, j;
i = *b ;
j = c ;
if ( a[i-1][j] == 0 )
{
i = i-1;
}
*b = i;
}
espero que no me tomen a mal esta ves emtendiendo que publico esto es para que me lo devuelvan totalmente resuelto, lo que quiero es realizarlo yo mismo, pero esta libreria personalmente es bastante complica por ser un poco novato en este lenguaje de programacion.....
espero que me ayuden....
gracias.....
