Problem z wykonaniem repaint() na bieżąco

0

Witam

Piszę grę w applecie, gdzie na kliknięcie przycisku myszy wykonuje się ruch gracza, następnie chciałbym odświeżyć planszę (wstawić odpowiedni pionek na nią) i automatycznie wykonać ruch komputera (który chwile trwa). Wywołuję to tak:

 
player_move(x,y);
repaint();
computer_move();

Problem w tym, że plansza odświeża się jednak dopiero po ruchu komputera (czyli ktoś klika w planszę i dopiero po ruchu komputera (po paru sekundach) pojawia się zarówno ruch gracza jak i komputera).
Jak poradzić sobie z tym, by repaint() wykonał się zaraz po ruchu gracza?

Z góry dzięki za pomoc.

0

To w ogóle robi się nie tak. Zarówno ruch człowieka, jak i ruch komputera zajmuje trochę czasu. W szczególności ruch człowieka może trwać nieskończony czas. A w klasach uruchamianych w wątkach Swinga lub jakiegokolwiek innego GUI w ogóle nie wolno używać takiego kodu ponieważ prowadzi to do "zamrożenia" GUI. Co do repaint(), to jest to zlecenie do kolejki GUI aby przy pierwszej możliwej okazji w której otrzyma sterowanie przemalowała obiekt na którego rzecz to repaint jest wywołane. Tylko jak ma to zrobić skoro aby przemalować obiekt musi poczekać na zakończenie wykonania computer_move? Aby sterowanie wróciło do kolejki zdarzeń, to najpierw musi zakończyć wykonywanie bieżących instrukcji.
Powinieneś poszukać jakiejś książki lub tutoriala, który wyjaśni w jaki sposób programuje się gry oraz jak kod gry powinien współdziałać z interfejsem asynchronicznym i jednowątkowym jakim jest większość GUI (np. Swing).
Napisanie dobrej gry pod GUI jest możliwe, ale bezwzględnie trzeba przestrzegać przede wszystkim reguł tego interfejsu - nawet kosztem sprawnego działania gry.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.