Autor Wątek: Warcaby, dozwolne ruchy, obowiązkowe bicia  (Przeczytany 1388 razy)

Offline KaBaSZo

  • Użytkownik

# Kwiecień 08, 2011, 13:32:56
Jestem w trakcie pisania warcabów na konsolę w C, szło wszystko dobrze, dopóki nie zacząłem pisać logiki gry. Trochę się zakręciłem i chyba najlepszym pomysłem będzie napisanie jej od zera, dlatego proszę o pomocne wskazówki przy projektowaniu rozgrywki.

W skrócie założenia są takie:
- plansza 8x8, 12 pionków na gracza
- remis jeżeli nie można wykonać ruchu, albo każdy gracz wykona 15 ruchów damką bez bicia
- pionki poruszają się o jedno pole, a damka o wiele
- damka po zbiciu musi zatrzymać się zaraz za zbitym pionkiem
- w jednym ruchu można zbić więcej niż jeden pionek
- bicia są obowiązkowe
- pionek może bić damkę

Planszę reprezentuje jako typ wyliczeniowy
typedef enum { FD_EMPTY, FD_AVAILABLE, FD_WHITE, FD_BLACK, FD_KING_WHITE, FD_KING_BLACK } FIELD;grafika obsługiwana jest za pomocą pdcurses.
Pętla gry:
while(quit != TRUE) {
handle_input();
logic();
draw();
}
W handle_input zapisuje najpierw pozycję wybranego pionka, a później pozycję docelową. Draw to narysowanie planszy ze wszystkimi elementami, scoreboarda i odświeżenie ekranu.

Największym problemem jest to, że chcę wyświetlać wszystkie dostępne ruchu(po to służy mi stała FD_AVAILABLE), tyle, że jeżeli są jakieś bicia to nie powinny być zaznaczone inne ruchy jak tylko te bicia. Po wyborze pionka ma się wyświetlić jego ścieżka.
Napisałem funkcję, która przechodzi przez całą tablicę i dla każdego pionka gracza wyznacza możliwe ruchy(ustawia FD_AVAILABLE w tym polu), jeżeli było jakieś bicie to usuwałem ruchy, w których nie występowało. Tyle, że ta funkcja nie jest zgrana z logiką i jeżeli wybierze się pionek zbiciem to nie pokazuje jego ścieżki ;/. Ta część napisana jest na razie tylko dla zwykłych pionków, z damkami pewnie będzie jeszcze większy kłopot.
Ogólnie kod mi wyszedł dość pokrętny i pewnie coś pochrzaniłem przy projektowaniu.

Moje pytania są następujące:
1. Jak, za pomocą czego, podczas sprawdzania możliwych ruchów zapamiętać, gdzie gracz może stanąć(jeżeli jest to pionek to nowa pozycja musi być pierwszą w ścieżce, dla damki nie koniecznie) ?
2. Jak reprezentować obowiązkowe bicia ?  Szczerze tutaj mam najwięcej problemów, bo po przeszukaniu tablicy mam wszystkie możliwe, z tego muszę odsiać tylko bicia no i trzeba jeszcze wiedzieć, gdzie te bicia się zaczynają, żeby gracz mógł wybierać tylko te pionki.
3. Kilka bić pod rząd. Myślałem, żeby dla wybranego pionka zliczać ruchy i zmniejszać ich ilość, aż do zera(co kończy turę), ale może sobą lepsze sposoby ? Jak najlepiej przechowywać pozycję bitych pionków w ścieżce ?
4. Jak powinna wyglądać logika gry, co robić po kolei.

Kiedy wpadam na coś to później mam problem, żeby to połączyć w całość. Na początku zrobiłem drzewko binarne do reprezentowania ruchów pionka, ale drzewko nie nadaje się dla damki :).

Jeżeli ktoś chciałby zerknąć w kod to mogę udostępnić ;).


// -----------------------------------------
Już sobie poradziłem.
« Ostatnia zmiana: Kwiecień 10, 2011, 19:16:29 wysłana przez KaBaSZo »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych