Witam, mam na zajęcia zrobić grę komputerową. Do realizacji zadania wybrałem bibliotekę allegro, gdyż wydała mi się w miarę prosta, a przy ocenie liczyć się będzie prawie tylko sam algorytm, jednak choćby do samych testów warto mieć interfejs graficzny.
Chodzi o prostą grę, którą "gra się na papierze" na nudnych lekcjach/zajęciach- piłkę.
Nie zagłębiając się za bardzo, mam graf (tablicę list). Każde pole z gry ma indeks (od 0 do 100) odpowiadający nr tabeli. Każdemu polu przypisana jest lista wierzchołków, do których można dojść. Klikając na jakiś punkt jest zaIFowane, że jeśli kursor jest na punkcie, i jeśli wciśnięty jest przycisk myszy, i jeśli punkt w którym obecnie jest piłka ma wśród dostępnych dróg w liście ten wierzchołek na który kliknięto, to rysujemy linię, i usuwamy daną ściężkę z listy dostępnych.
Wszystko było fajnie do momentu, w którym poza grafiką doszła właśnie operacja usuwania (lub dodawania) elementu do listy.
Ja dopiero zaczynam, no i szlag mnie trafił, bo zrobiłem sobie interfejs graficzny, i wychodzi na to, że jest bezużyteczny, ale do rzeczy:
Oto fragment, ze tak powiem pętli głównej
while( !key[ KEY_ESC ] )
{
myszka();
TMP =(( mx - 75 ) / 50 ) +((( my - 75 ) / 50 ) - 1 ) * 9;
TMP2 =(( PILKA.X - 75 ) / 50 ) +((( PILKA.Y - 75 ) / 50 ) - 1 ) * 9;
if( my < 125 ) TAB2[ TMP ].indeks = 0;
if( my > 675 ) TAB2[ TMP ].indeks = 100;
textprintf_ex( screen, font, 20, 20, makecol( 200, 200, 200 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !, punkt nr %d, pilka w punkcie %d", mx, my, mb, TAB2[ TMP ].indeks, TAB2[ TMP2 ].indeks );
rectfill( screen, 0, 0, 800, 80, makecol( 128, 128, 128 ) );
if(( mb == 1 ) )
{
line( screen, PILKA.X, PILKA.Y, TAB2[ TMP ].X, TAB2[ TMP ].Y, makecol( 0, 0, 0 ) );
PILKA.X = TAB2[ TMP ].X;
PILKA.Y = TAB2[ TMP ].Y;
G.Usun_krawedz( TAB2[ TMP2 ].indeks, TAB2[ TMP ].indeks );
}
}
No i właśnie w miejscu w którym usuwam pojawia się błąd, to znaczy program śmiga, ale w momencie naciśnięcia przycisku myszy (mb==1) linia się ładnie rysuje, ale przy dojściu do usuniecia od razu się wywala (komunikat:"Program Pilka.exe przestałdziałać").
Myślałem, że to dlatego, że będąc w while`u kliknięcie myszki trwa na tyle, że usuwa to z 100 razy i się zawiesza, ale próbowałem dać Sleep(1000) zaraz po usunięciu, to do lini Sleepa nawet nie dochodzi (w sensie, że nie zdąży poczekać tej sekundy, tylko momentalnie po kliknięciu rysuje się linia i się wykrzacza)
Dodam, że bez allegro, w zwykłym pliku cpp funkcje dodaj i usuń śmigają aż miło :/
Dodam również, że korzystam z szablonu list
Dodam również cały kod
http://notepub.com/?note=36630Korzystam z Dev C++ V. 4.9.9.2 z zaktualizowaną biblioteką allegro
Ktoś się zna na tym i może pomóc?
Z góry dziękuje za pomoc :)