Witam ! Jestem w trakcie tworzenia szachów przy pomocy allegro i mam problem z przesuwaniem się pojedynczych bitmap w momencie przesuwanie jednej np wierzy przesuwam również pion zapętliłem się już w tym wszystkim proszę o podpowiedź. Nie które elementy kodu są nie potrzebne i jestem tego świadom.
#include <allegro.h>
#include<alpng.h>
#define WIDTH 800
#define HEIGHT 800
BITMAP * bufor;
BITMAP * plansza;
BITMAP * bierki;
BITMAP * pionek;
BITMAP * pionekb;
BITMAP * wieza;
BITMAP * wiezab;
BITMAP * skoczek;
BITMAP * skoczekb;
BITMAP * goniec;
BITMAP * goniecb;
BITMAP * hetman;
BITMAP * hetmanb;
BITMAP * krol;
BITMAP * krolb;
int mx = 0, my = 0, mb = 0;
int ticks = 0;
bool wyjscie = false;
bool stan = false;
float x = 0, y = 0;
int wiezab_x = 692, wiezab_y = 692, wiezab_s = 65, wiezab_w = 65;
int pionek_x = 42, pionek_y = 135, pionek_s = 65, pionek_w = 65;
void timerproc()
{
ticks++;
}
bool kolizja( int x1, int y1, int s1, int w1, int x2, int y2, int s2, int w2 )
{
if( x2 <= x1 + s1 && x2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else
if( x2 <= x1 + s1 && x2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true; else
if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else
if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true;
else return false; };
void init()
{
allegro_init();
install_mouse();
install_keyboard();
set_color_depth( 32 );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, WIDTH, HEIGHT, 0, 0 );
install_int( timerproc, 30 );
}
int install_int( void( * proc )(), int speed );
void load()
{
show_mouse( screen );
unscare_mouse();
bufor = create_bitmap( WIDTH, HEIGHT );
plansza = load_bitmap( "plansza.bmp", NULL );
bierki = create_bitmap( 65, 65 );
pionek = load_bmp( "pionek.bmp", NULL );
pionekb = load_bmp( "pionekb.bmp", NULL );
wieza = load_bmp( "wieza.bmp", NULL );
wiezab = load_bmp( "wiezab.bmp", NULL );
skoczek = load_bmp( "skoczek.bmp", NULL );
skoczekb = load_bmp( "skoczekb.bmp", NULL );
goniec = load_bmp( "goniec.bmp", NULL );
goniecb = load_bmp( "goniecb.bmp", NULL );
hetman = load_bmp( "hetman.bmp", NULL );
hetmanb = load_bmp( "hetmanb.bmp", NULL );
krol = load_bmp( "krol.bmp", NULL );
krolb = load_bmp( "krolb.bmp", NULL );
}
void myszka()
{
if( mx != mouse_x || my != mouse_y || mb != mouse_b )
{
mx = mouse_x;
my = mouse_y;
mb = mouse_b;
}
};
void draw()
{
clear_to_color( bufor, makecol( 255, 0, 255 ) );
masked_blit( plansza, bufor, 0, 0, 0, 0, WIDTH, HEIGHT );
int w = 42, tmp;
for( int i = 0; i < 8; i++ )
{
masked_blit( pionek, bufor, 0, 0, pionek_x, pionek_y, pionek_s, pionek_w );
tmp = w + 93;
w = tmp;
}
for( int i = 0; i < 8; i++ )
{
masked_blit( pionekb, bufor, 0, 0, w - 93, 600, WIDTH, HEIGHT );
tmp = w - 93;
w = tmp;
}
masked_blit( wieza, bufor, 0, 0, 42, 42, WIDTH, HEIGHT );
masked_blit( skoczek, bufor, 0, 0, 135, 42, WIDTH, HEIGHT );
masked_blit( goniec, bufor, 0, 0, 227, 42, WIDTH, HEIGHT );
masked_blit( hetman, bufor, 0, 0, 320, 42, WIDTH, HEIGHT );
masked_blit( krol, bufor, 0, 0, 413, 42, WIDTH, HEIGHT );
masked_blit( goniec, bufor, 0, 0, 506, 42, WIDTH, HEIGHT );
masked_blit( skoczek, bufor, 0, 0, 599, 42, WIDTH, HEIGHT );
masked_blit( wieza, bufor, 0, 0, 692, 42, WIDTH, HEIGHT );
masked_blit( wiezab, bufor, 0, 0, 42, 692, WIDTH, HEIGHT );
masked_blit( skoczekb, bufor, 0, 0, 135, 692, WIDTH, HEIGHT );
masked_blit( goniecb, bufor, 0, 0, 227, 692, WIDTH, HEIGHT );
masked_blit( hetmanb, bufor, 0, 0, 320, 692, WIDTH, HEIGHT );
masked_blit( krolb, bufor, 0, 0, 413, 692, WIDTH, HEIGHT );
masked_blit( goniecb, bufor, 0, 0, 506, 692, WIDTH, HEIGHT );
masked_blit( skoczekb, bufor, 0, 0, 599, 692, WIDTH, HEIGHT );
masked_blit( wiezab, bufor, 0, 0, wiezab_x, wiezab_y, wiezab_s, wiezab_w );
blit( bufor, screen, 0, 0, 0, 0, WIDTH, HEIGHT );
}
void fwieza()
{
if( mx >= wiezab_x && mx <= wiezab_x + 65 &&
my >= wiezab_y && my <= wiezab_y + 65 &&
mb & 1 ) stan = true;
if( mb == 0 ) stan = false;
if( stan == true ) wiezab_x = mx - 32, wiezab_y = my - 32;
if( wiezab_x == 692 && wiezab_y == 135 );
}
void fpionek()
{
if( mx >= pionek_x && mx <= pionek_x + 65 &&
my >= pionek_y && my <= pionek_y + 65 &&
mb & 1 ) stan = true;
if( mb == 0 ) stan = false;
if( stan == true ) pionek_x = mx - 32, pionek_y = my - 32;
if( pionek_x == 42 && pionek_y == 135 );
}
void logic()
{
if( key[ KEY_ESC ] ) wyjscie = true;
}
void release()
{
destroy_bitmap( plansza );
destroy_bitmap( bufor );
allegro_exit();
}
int main()
{
void alpng_init();
init();
load();
while( !wyjscie )
{
draw();
myszka();
fwieza();
fpionek();
while( ticks > 0 )
{
logic();
ticks--;
}
}
release();
return 0;
}
END_OF_MAIN();