Mail Archives: djgpp/1996/10/21/18:25:07
Hello,
I was wondering how you moved a sprite around using the arrow keys in
allegro?
I wanted to draw the background and then move another sprite on top
of it using the arrow keys. I also don't want the background to get
erased while the sprite is being moved.
Below I have included my code..,so everybody can see that I actually
tried and that I don't just want someone to do it for me :-)
If anybody can give me some sample code or show me what I'm doing wrong
please help me :-)
thanks
Jeremy Ford
p.s. I know the code below probaly isn't very good but I'm just
learning..everybody has to start somewhere :-)
/* this code will not compile without my header and data file
* if your interested in compiling this just -mail me and I will send
*you the files*/
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <dir.h>
#include <pc.h>
#include "rifle.h"
#include "allegro.h"
char *datafile_name = "rifle.dat";
DATAFILE *rifle_data;
BITMAP *sprite_buffer;
int *file_attr;
int next;
void animate(void);
void scope_move();
void main()
{
if((file_exists(datafile_name, 32, file_attr))==0)
{
printf("Datafile %s not found..Exiting program",datafile_name);
exit(0);
}
allegro_init();
install_keyboard();
install_mouse();
clear_keybuf();
set_gfx_mode(GFX_VGA,320,200,0,0);
rifle_data = load_datafile(datafile_name);
set_pallete(rifle_data[PALLETE_001].dat);
sprite_buffer = create_bitmap(320,200);
clear(sprite_buffer);
do
{
draw_sprite(sprite_buffer,rifle_data[INTRO].dat,0,0);
animate();
}
while(next == 1);
readkey();
fade_out(1);
set_pallete(rifle_data[PALLETE_001].dat);
clear_keybuf(); rectfill(screen,0,0,320,200,0);
do
{
draw_sprite(sprite_buffer,rifle_data[MAIN].dat,0,0);
animate();
}
while(next == 1);
clear_keybuf();
scope_move();
unload_datafile(rifle_data);
allegro_exit();
exit(0);
}
void animate()
{
vsync(); vsync();
blit(sprite_buffer,screen,0,0,0,0,320,200);
clear(sprite_buffer);
next = 1;
if(keypressed)
next = 0;
}
void scope_move()
{
int pos_x;
int pos_y;
int c;
pos_x = pos_y = 30;
c = getch();
switch(c)
{
case KEY_UP:
pos_y++;
vsync();
draw_rle_sprite(screen,rifle_data[SCOPE].dat,pos_x,pos_y);
break;
case KEY_DOWN:
pos_y--;
vsync();
draw_rle_sprite(screen,rifle_data[SCOPE].dat,pos_x,pos_y);
break;
case KEY_LEFT:
pos_x--;
vsync();
draw_rle_sprite(screen,rifle_data[SCOPE].dat,pos_x,pos_y);
break;
case KEY_RIGHT:
pos_x++;
vsync();
draw_rle_sprite(screen,rifle_data[SCOPE].dat,pos_x,pos_y);
break;
case 'Q'|| 'q':
fade_out(1);
allegro_exit();
exit(0);
break;
default:
scope_move();
break;
}
}
- Raw text -