Witam
Pisze prostą gre kółko i krzyżyk i mam problem otóż w grze może wygrać tylko krzyżyk a gdy kółko ustawi znaki w rzędzie nic się nie dzieje
kod:
#include <allegro.h>
#include <iostream>
#include<cstdlib>
#include<time.h>
// Inicjowanie timera
volatile long speed = 0;
void increment_speed()
{
speed++;
}
END_OF_FUNCTION(increment_speed);
LOCK_VARIABLE(speed);
LOCK_FUNCTION(increment_speed);
// Zmienne potrzebne do mapy
int mapa_x = 0, mapa_y = 0;
BITMAP *teren = NULL;
BITMAP *bufor = NULL;
// DEFINICJA MAPY
int map[5][5] =
{
0,0,0,0,0,
0,1,1,1,0,
0,1,1,1,0,
0,1,1,1,0,
0,0,0,0,0,
};
// Funkcja wyswietlajaca mape:
void wys_mape()
{
int licznik_x, licznik_y;
for (licznik_x = 0; licznik_x < 5 ; licznik_x++)
{
for (licznik_y = 0; licznik_y < 5 ; licznik_y++)
{
masked_blit(teren,bufor,
(map[licznik_y + mapa_y][licznik_x + mapa_x]%4) * 40,
(map[licznik_y + mapa_y][licznik_x + mapa_x]/4) * 40,
licznik_x * 40,licznik_y * 40,40,40);
}
}
};
//klasa odpowiedzialna za gracza
class gracz
{
public:
int znak;
//funkcja sprawdzająca czy gracz wygrał
bool wygrana()
{
if(
(pola[0][0]&&pola[1][0]&&pola[2][0])||
(pola[0][1]&&pola[1][1]&&pola[2][1])||
(pola[0][2]&&pola[1][2]&&pola[2][2])||
(pola[0][0]&&pola[0][1]&&pola[0][2])||
(pola[1][0]&&pola[1][1]&&pola[1][2])||
(pola[2][0]&&pola[2][1]&&pola[2][2])||
(pola[0][0]&&pola[1][1]&&pola[2][2])||
(pola[2][0]&&pola[1][1]&&pola[0][2])
)
{
return true;
}
};
std::string znaki;
//tablica z miejscami znaków
bool pola[3][3];
//funkcja stawiająca znak
bool znakowanie()
{
if (mouse_x>40&&mouse_y>40&&mouse_x<150&&mouse_y<150&&mouse_b==1)
{
pola[(mouse_x/40)-1][(mouse_y/40)-1]=true;
map[mouse_y/40][mouse_x/40]=znak;
}
return true;
}
};
int main()
{
gracz kulko;
gracz krzyzyk;
allegro_init();
install_mouse();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,200,200,0,0);
install_timer();
install_int_ex(increment_speed, BPS_TO_TIMER(10));
// Tworzenie bufora
BITMAP*bufor1=NULL;
BITMAP*menu=NULL;
bufor =create_bitmap(250,250);
// ³adowanie grafiki
teren = load_bmp("grafika/teren.bmp",default_palette);
// Czyszczenie bufora
clear_to_color(bufor, makecol(150,150,150));
//ukazanie myszki
show_mouse(screen);
unscare_mouse();
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{
kulko.pola[i][j]=false;
krzyzyk.pola[i][j]=false;
}
}
kulko.znak=2;
krzyzyk.znak=3;
kulko.znaki="kulko";
krzyzyk.znaki="krzyzyk";
//wyswietlanie grafiki
bool kliknieto = false;
int nrKlikniecia=0;
while ((!krzyzyk.wygrana())||(!kulko.wygrana()))
{
if( !kliknieto && mouse_b== 1 )
{
kliknieto = true;
nrKlikniecia++;
}
if( mouse_b == 0 )
{
kliknieto = false;
}
if( nrKlikniecia % 2 == 0 )
{
krzyzyk.znakowanie();
}
else
{
kulko.znakowanie();
}
wys_mape();
blit(bufor,screen,0,0,0,0,250,250);
}
remove_int( increment_speed);
rest(100);
//destruktory wskazników
destroy_bitmap(teren);
destroy_bitmap(bufor);
allegro_exit();
return 0;
}
END_OF_MAIN();