Gra planszowa - implementacja

0

Witam mam dostałem właśnie kolejny projekcik od wykładowcy jest to gra prowadzona jest na planszy 7 na 7 pól z użyciem pionów w dwóch kolorach (np. niebieski i czerwony). Gra polega na zajęciu jak największej liczby pól przez swoje piony. Gracze układają swoje piony na przemian, po jednym w każdej kolejce. Gracze mogą wykonywać ruch z dowolnego (zaznaczonego) pionu o jedno lub dwa pola(na pole puste),inne ruchy są zabronione. To tak z grubsza bo jeszcze są tam pewne warunki.

Jestem zielony jeśli chodzi o programowanie gierek.Wizualizacja gry oczywiście w allegro.Prosiłbym o parę wskazówek.

  • Jak zaimplementować planszę do gry? ( po prostu w postaci tablicy 7 na 7 ??)
  • W jaki sposób reprezentować algorytm sztucznej inteligencji??(chodzi czy jakaś klasa z metodami)

Bo na razie to nie mam pojęcia jak to zrobić:P

Proszę o wyrozumiałość

0
usm_auriga napisał(a)
  • Jak zaimplementować planszę do gry? ( po prostu w postaci tablicy 7 na 7 ??)

to chyba najbardziej intuicyjne, nie sądzisz? :>

usm_auriga napisał(a)

-- W jaki sposób reprezentować algorytm sztucznej inteligencji??(chodzi czy jakaś klasa z metodami)

technicznie jeden ch*j czy to będzie klasa czy jakiś zestaw funkcji, co to za różnica? aby działało, nie sądzisz :>

0

Grę można zrobić z wykorzystaniem klas lub bez nich. To już zależy od upodobań i wymagań wykładowcy ;). Moim zdaniem program zrobiony w oparciu o klasy jest bardziej przejrzysty i łatwiejszy do modyfikacji.
Do reprezentacji takiej prostej planszy z figurami wystarczy tablica ( równie dobrze może to być klasa, której składową jest tablica ). Puste pole będzie miało np. wartość 0, pole z pionem jednego gracza 1, a drugiego 2.
Przy implementacji sztucznej inteligencji będziesz potrzebował znać wszystkie możliwe ruchy, przechować gdzieś tymczasowe mapy, aby zaplanować kilka ruchów do przodu. Ja bym to robił na klasach. Jakbyś tego nie robił, musisz wiedzieć, do czego zmierzasz, a więc najpierw poczytaj nieco o SI ( np. o funkcjach heurystycznych ).

0
jarzynek napisał(a)

Grę można zrobić z wykorzystaniem klas lub bez nich. To już zależy od upodobań i wymagań wykładowcy ;). Moim zdaniem program zrobiony w oparciu o klasy jest bardziej przejrzysty i łatwiejszy do modyfikacji.

Hmm, bardziej przejrzysty, w teorii na pewno... w praktyce różnie z tym bywa :D szczególnie jak zaczniesz dopisywać nieplanowane fragmenty kodu :>
zresztą sam zobaczysz :>
a czy łatwiejszy do modyfikacji, tu myślę że to bez różnicy, zależy jak duże te modyfikacje są :>

jarzynek napisał(a)

Do reprezentacji takiej prostej planszy z figurami wystarczy tablica ( równie dobrze może to być klasa, której składową jest tablica ). Puste pole będzie miało np. wartość 0, pole z pionem jednego gracza 1, a drugiego 2.

jak chcesz trzymać się OOP to zamiast prostego inta, bo znaczy technicznie nadal prosty int to będzie, ale opakowany w ładną OPPową klasę :>

class Pole
{
public:
 void SetPionek(int player_index); //hehe, zajebiaszcza nazwa metody :>
 bool IsEmpty(); //sprawdza czy juz jakiś gracz tu stoi
 //itd.

private:
  int value; //to prosty int, ale już z :>
};
Pole tablica[7][7];
tablica[0][0].SetPiontek(1);

czyli ładnie zrobisz inta i metody do operaowania na polu, związane z tym intem :> żeby było w OOP :>

jarzynek napisał(a)

Przy implementacji sztucznej inteligencji będziesz potrzebował znać wszystkie możliwe ruchy, przechować gdzieś tymczasowe mapy, aby zaplanować kilka ruchów do przodu. Ja bym to robił na klasach. Jakbyś tego nie robił, musisz wiedzieć, do czego zmierzasz, a więc najpierw poczytaj nieco o SI ( np. o funkcjach heurystycznych ).

w tym wypadku ja bym zrobił ta łopatologicznie, czyli analizujesz wszystkie możliwe ruchy komputera, czyli zbudujesz jakieś drzewko ruchów (dla tablicy 7x7, spokojnie algorytm będzie działał poniżej 1ms :>) i sprawdzisz która droga jest najbardziej korzystna (budując drzewko będziesz danemu ruchowi przypisywał jakąś wartość, jak bardzo "opłacalny" jest) i powinno to jakiś działać, gdy kilka dróg będzie tak samo "punktowanych", możesz np. losować, w grze będzie element losowości, czyli nawet przy takim samych ruchach komputer może inaczej zagrać :>

0

Hmm, bardziej przejrzysty, w teorii na pewno... w praktyce różnie z tym bywa :D szczególnie jak zaczniesz dopisywać nieplanowane fragmenty kodu :>
zresztą sam zobaczysz :>

Nie sądzę, żeby brak klas uczynił "nieplanowane fragmenty kodu" bardziej przejrzyste ;)

w tym wypadku ja bym zrobił ta łopatologicznie, czyli analizujesz wszystkie możliwe ruchy komputera, czyli zbudujesz jakieś drzewko ruchów (dla tablicy 7x7, spokojnie algorytm będzie działał poniżej 1ms :>) i sprawdzisz która droga jest najbardziej korzystna (budując drzewko będziesz danemu ruchowi przypisywał jakąś wartość, jak bardzo "opłacalny" jest) i powinno to jakiś działać, gdy kilka dróg będzie tak samo "punktowanych", możesz np. losować, w grze będzie element losowości, czyli nawet przy takim samych ruchach komputer może inaczej zagrać :>

Napisałeś dokładnie to samo co ja. Gałęzie drzewa to ruchy, węzły to przejściowe mapy ( stany gry ), a funkcja heurystyczna to właśnie obliczanie "opłacalności" ruchu

0

no więc w czym problem?
bo już się pogubiłem o.0

0

nobody - może tak, mój pierwszy wpis nie był odpowiedzią na Twój. Nie polemizuję z Tobą. Peace.

0
jarzynek napisał(a)

nobody - może tak, mój pierwszy wpis nie był odpowiedzią na Twój. Nie polemizuję z Tobą. Peace.

Ja tylko chciałem pomóc... nie jestem taki straszny :>

tylko czekaj, czekaj... zakładasz wątek pytasz się o 2 rzeczy - to odpowiadam, potem odpowiadasz, że wiesz jak to zrobić, to ja już nie wiem po co ten wątek zrobiłeś, gubię się po prostu, wiesz w pewnym wieku człowiek zaczyna się gubić we wszystkim :>

to w końcu wiesz jak to zrobić, czy nadal oczekujesz jakiejś odpowiedzi, bo inni tez mogą być zdezorientowani :>

0

mhm dzięki za wskazówki jeszcze takie małe pytanko jeśli chodzi o bibliotekę allegro załóżmy ,że cyfrze w tablicy np 0,1,2 przyporządkowana jest jakaś bitmapa itp oznaczająca pole ale jak to później wyświetlić żeby miało to ręce i nogi.tzn planszę w odpowiednich miejscach a nie bitmapki byle gdzie jedno za drugim.Jeszcze jedno jak powiązać kliknięcia myszką z polami w planszy??Też prosiłbym o drobne wskazówki

0

aha i już wszystko jasne...
pomyliłem cie jarzynek z autorem wątku :D nie zwróciłem uwagi i myślałem, że to ty założyłeś temat :D
zieje

0

Allegro nie używałem, ale myślę, że i tu te metodę da się zastosować. Podejście jest łopatologiczne, ale proste:
Wiesz gdzie jest umieszczona plansza, jaka jest wielkość pól, więc kiedy otrzymasz współrzędne zdarzenia ( ruchu, kliknięcia myszką ) możesz zdecydować, czy miało ono miejsce na planszy, na którym konkretnie polu. Dalej już warstwa zajmująca się mechaniką gry musi zadecydować, co z tym fantem zrobić - czy pozwolić na ruch, czy to jest pora na ruch , który gracz i jakim pionkiem się chce ruszyć itd. Następnie wprowadzasz zmiany na "logicznej" mapie i rysujesz na jej podstawie mapę "graficzną".

Z rysowaniem to analogicznie łopatologicznie - najpierw rysujesz planszę jako jedną bitmapę, dzięki czemu zamazujesz poprzednie ustawienie. Dalej, wiesz jakie są współrzędne pola [x][y], jeżeli coś się na nim znajduje, to rysujesz odpowiednią bitmapę.

Krótki research w sieci i proszę - kilka ( być może przydatnych ) linków:
http://www.3dkingdoms.com/chess/slow.htm - szach z kodem źródłowym
http://www.gamespp.com - kilka gier z źródłami ( niektóre z tego co zauważyłem płatne )

0

mhm rozumiem.Ale im więcej pionków komputera na planszy tym więcej możliwości różnych ruchów i dla każdego z osobna będę musiał rozpatrywać możliwości ruchów?? Nie ma zbytnio dużo materiałów o sztucznej inteligencji w grach planszowych.Ma ktoś jakieś materiały na ten tema??

1 użytkowników online, w tym zalogowanych: 0, gości: 1