GLIK na komputerze

Informacje o planszówkach on-line, offline itp.
Awatar użytkownika
ja_n
Recenzent
Posty: 2303
Rejestracja: 28 lip 2004, 10:42
Lokalizacja: Warszawa
Been thanked: 1 time

GLIK na komputerze

Post autor: ja_n »

Folko właśnie opublikował na swojej stronie komputerową wersję GLIKa, zaprogramowaną przeze mnie przy użyciu języka Python. Złożenie nazwy języka i nazwy gry daje zgrabną nazwę programu - pyglik. Zapraszam do sciągania i testowania. Pobrany zip należy rozpakować i uruchomić program pyglik.exe. Pomysł napisania gry pojawił się w celu popularyzacji GLIKa na BGG, stąd całe menu gry jest po angielsku.

Algorytmy komputerowe nie są specjalnie skuteczne niestety, zainteresowanym ich wzmocnieniem chętnie udostępnię kod źródłowy. Sam testowałem kilka różnych algorytmów i żaden (poza podstawowym, zaimplementowanym w grze w dwóch wariantach) nie okazał się wystarczająco szybki i skuteczny żeby miał praktyczne znaczenie.
Awatar użytkownika
Rathi
Posty: 883
Rejestracja: 04 cze 2004, 10:00
Lokalizacja: Kraków
Kontakt:

Post autor: Rathi »

Pod XP dziala jak trzeba.
Pod Windows 2003 Serwer nie dziala (zrobil sie jakis totalny syf na ekranie zamiast planszy). Aczkolwiek mozliwe, ze problemem bylo uruchamianie przez terminal serwer.
Robert Jaskuła
Dragonus - gry planszowe, sklep i wypożyczalnia
http://dragonus.pl/
Awatar użytkownika
ja_n
Recenzent
Posty: 2303
Rejestracja: 28 lip 2004, 10:42
Lokalizacja: Warszawa
Been thanked: 1 time

Post autor: ja_n »

Spotkałem się z jednym komputerem (notebook pod Win XP) na którym program nie zadziałał. Pozostałe (kilka różnych testowałem) działały. Problem musi leżeć gdzieś w czeluściach biblioteki pygame Pythona, albo multimedialnej bilioteki SDL, którą pygame wykorzystuje.

Python to język skryptowy i w zasadzie nie jest przeznaczony do uruchamiania jako samodzielny plik exe. Wprawdzie sam język jest bardzo uniwersalny i przenaszalny między platformami, jednak pakiet exe utworzony (nieco sztucznie) z programu w pythonie już takiej gwarancji dawać nie musi. No i same biblioteki graficzne również mogą mieć własne ograniczenia. Użytkownikom innych systemów niż WinXP (nie wiem czy gra działa pod Vistą) mogę poradzić instalację Pythona wraz z wymaganą bibilioteką pygame i kod źródłowy gry, który wówczas prawdopodobnie będzie można bez problemu uruchomić.

Stosowne strony, z których można pobrać instalki:
http://www.python.org
http://www.pygame.org

Po kod źródłowy gry proponuję zgłosić się do mnie przez PW.
pk286
Posty: 12
Rejestracja: 03 kwie 2006, 11:26

Post autor: pk286 »

skoro to python to czemu tylko pod W**

pod wine nie działa, u mnie, więc może jakaś *normalna* wersja :-)
Awatar użytkownika
ja_n
Recenzent
Posty: 2303
Rejestracja: 28 lip 2004, 10:42
Lokalizacja: Warszawa
Been thanked: 1 time

Post autor: ja_n »

Przygotowałem pakiet dla Windows wykorzystując narzędzie py2exe. Oczywiście taki pakiet będzie działał wyłącznie pod Windows, mimo że program jest napisany w pythonie. Zrobiłem tak dlatego, że jak sądzę większość zainteresowanych grą używa właśnie Windows, a dodatkowo zainstalowanie pythona i pygame jest dla nich wystarczająco kłopotliwe żeby zrezygnowali w ogóle z testowania gierki. Tak jak napisałem wyżej, użytkownicy innych systemów mogą sobie pythona i pygame zainstalować i napisać do mnie PW, a chętnie wyślę im plik źródłowy, który przypuszczalnie bez żadnych problemów będą mogli uruchomić. Wyślij mi na PW swój email, to otrzymasz plik źródłowy.
Awatar użytkownika
lukaszkuch
Posty: 243
Rejestracja: 09 gru 2006, 23:02
Lokalizacja: Rybnik
Has thanked: 2 times
Been thanked: 9 times

Post autor: lukaszkuch »

ja_n pisze:Przygotowałem pakiet dla Windows wykorzystując narzędzie py2exe. Oczywiście taki pakiet będzie działał wyłącznie pod Windows, mimo że program jest napisany w pythonie. Zrobiłem tak dlatego, że jak sądzę większość zainteresowanych grą używa właśnie Windows, a dodatkowo zainstalowanie pythona i pygame jest dla nich wystarczająco kłopotliwe żeby zrezygnowali w ogóle z testowania gierki. Tak jak napisałem wyżej, użytkownicy innych systemów mogą sobie pythona i pygame zainstalować i napisać do mnie PW, a chętnie wyślę im plik źródłowy, który przypuszczalnie bez żadnych problemów będą mogli uruchomić. Wyślij mi na PW swój email, to otrzymasz plik źródłowy.
Ja już dostałem. Niestety póki co u mnie na Linux Mint Bianca nie udało mi się go odpalić.
Awatar użytkownika
ja_n
Recenzent
Posty: 2303
Rejestracja: 28 lip 2004, 10:42
Lokalizacja: Warszawa
Been thanked: 1 time

Post autor: ja_n »

Jakieś konkretne błędy zgłasza czy uruchamia się bez błędów ale nie widać grafiki?
Awatar użytkownika
lukaszkuch
Posty: 243
Rejestracja: 09 gru 2006, 23:02
Lokalizacja: Rybnik
Has thanked: 2 times
Been thanked: 9 times

Post autor: lukaszkuch »

ja_n pisze:Jakieś konkretne błędy zgłasza czy uruchamia się bez błędów ale nie widać grafiki?
Już działa. Na jednym komputerze uruchamia się bez błędów i grafiki. Za to na drugim zadziałało dobrze.
Awatar użytkownika
Duch
Posty: 209
Rejestracja: 03 lut 2007, 16:59
Lokalizacja: Gdynia

Re: GLIK na komputerze

Post autor: Duch »

ja_n pisze:Algorytmy komputerowe nie są specjalnie skuteczne niestety, zainteresowanym ich wzmocnieniem chętnie udostępnię kod źródłowy.
Faktycznie. Raptem kilkanascie minut grania (konfiguracja: 4 graczy, 7 zetonow kazdy, jeden czlowiek + 3 komputerki dwojki) i powstal impas. Gracze parami sie blokuja, jeden drugiemu nie pozwalajac zakonczyc gry. :)

Swoja droga moze to taki specyficzny przypadek mi sie trafil i faktycznie kazdy gra najoptymalniej jak mozna w danej chwili. Szkoda tylko, ze grajac optymalnie od poczatku, az 3 boty doprowadzily do takiej sytuacji.

Ogolnie mam wrazenie, ze algorytm sprawdza sie lepiej w grze przy konfiguracji "mniej ciasnej".

Chetnie bym nawet sobie go obejrzal, ale nie w Pythonie. Mozna by dostac go w jakims przyjaznym jezyku?
Awatar użytkownika
ja_n
Recenzent
Posty: 2303
Rejestracja: 28 lip 2004, 10:42
Lokalizacja: Warszawa
Been thanked: 1 time

Post autor: ja_n »

Wzajemne blokowanie to nieodłączna cecha GLIKa dla 4 osób. Zwłaszcza jeśli grasz 7 pionami na gracza. To wszystko można ustawić sobie w opcjach - przestaw na 5 pionów i będzie luźniej. Przy czterech graczach raz po raz zdarza się partyjka gdzie nie wygrywa się tak łatwo i trzeba pokombinować. Ale faktycznie rzadko.

Co do algorytmu - po pierwsze Python jest niezwykle przyjaznym językiem i wygodnym do czytania dzięki niewielkiej liczbie dziwnych znaczków w kodzie (typu {} lub ; chociażby), obowiązkowym porządnym formatowaniu kodu (wcięcia stanowią zarazem o blokach kodu) i obiektowości. Ale ten algorytm w postaci kodu źródłowego jest rzeczywiście bardzo skomplikowany do czytania. Napiszę jak działa "swoimi słowami".

Po pierwsze, to algorytm "brutalnej siły". Najpierw robi listę wszystkich możliwych ruchów z obecnej pozycji. Potem powstałe po tych ruchach pozycje ocenia wg specyficznego algorytmu (za chwilę o nim). Sortuje listę wg wyznaczonej oceny i odcina górne 20 (chyba) z najlepszym wynikiem. Z nich robi kolejną iterację wszystkich możliwych ruchów i znowu odcina górkę i tak dalej, dopóki nie zużyje 5 punktów akcji. Potem wybiera najlepszą docelową pozycję.

Ocena pozycji polega na zsumowaniu kwadratu odległości wszystkich własnych pionów od bazy. Piony, które dojechały do bazy dostają -50 punktów, piony poza planszą (niewprowadzone do gry) dostają -10 punktów.

Dodatkowo istnieje jeszcze mechanizm blokowania. Liczona jest liczba wolnych (niedoprowadzonych do bazy) pionów przeciwnika po przekątnej. Jeżeli jest ich jeszcze sporo, to opłaca się stanąć niedokładnie przy swojej bazie, ale po przekątnej od bazy - na dwóch polach po przekątnej od własnej bazy zazwyczaj najskuteczniej się blokuje przeciwnika. Bonus za to jest równy -(liczba_wolnych_pionów_przeciwnika-1)*30.

Ostatecznie im niższa wartość oceny pozycji, tym lepiej (tym więcej pionów mamy blisko bazy). Wg tego są odsiewane pozycje.

Ten algorytm ma oczywiście wiele wad. Nie bierze zupełnie pod uwagę możliwości i potrzeby blokowania innych, w zależności od ustawienia plansz. Często nie zauważa, że warto się cofnąć pionem a potem pójść do przodu i ominąć przeszkody w ten sposób (cofnięcie pogarsza wynik pozycji więc może nie załapać się do dalszej ewaluacji). Generalnie to kiepski i skomplikowany algorytm. Ale badałem wiele innych pomysłów i tylko ten był wystarczająco wydajny żeby w ogóle był sens z nim grać.
Awatar użytkownika
Duch
Posty: 209
Rejestracja: 03 lut 2007, 16:59
Lokalizacja: Gdynia

Post autor: Duch »

ja_n pisze:Wzajemne blokowanie to nieodłączna cecha GLIKa dla 4 osób. Zwłaszcza jeśli grasz 7 pionami na gracza. To wszystko można ustawić sobie w opcjach - przestaw na 5 pionów i będzie luźniej. Przy czterech graczach raz po raz zdarza się partyjka gdzie nie wygrywa się tak łatwo i trzeba pokombinować. Ale faktycznie rzadko.
Chodzilo mi o taki efekt, ze komputer sie zapetla. Nie tylko blokuja sie na wzajem, ale dodatkowo powtarzaja w nieskonczonosc te same ruchy, ktore de fecto sa bez sensu. (Przykladowo: odjazd pionem, zawracanie i powrot w to samo miejsce.) I kazdy z trzech kompow powtarzal to do z nudzenia, az do momentu, kiedy ja zagralem nieoptymalnie i sklonilem jednego do zmiany decyzji. (Przy okazji nie zwrocil wcale uwagi na to, ze daje mi wygrac.)
ja_n pisze: Ale badałem wiele innych pomysłów i tylko ten był wystarczająco wydajny żeby w ogóle był sens z nim grać.
Sadze, ze najwiekszym problemem jest tu wlasnie Python. Przy takich skomplikowanych algorytmach jednak potrzebne jest C. Predkosc dzialania moze byc kilkakrotnie wieksza.

Jak kiedys bede mial toche wiecej czasu...
Awatar użytkownika
ja_n
Recenzent
Posty: 2303
Rejestracja: 28 lip 2004, 10:42
Lokalizacja: Warszawa
Been thanked: 1 time

Post autor: ja_n »

Duch pisze:Chodzilo mi o taki efekt, ze komputer sie zapetla. Nie tylko blokuja sie na wzajem, ale dodatkowo powtarzaja w nieskonczonosc te same ruchy, ktore de fecto sa bez sensu. (Przykladowo: odjazd pionem, zawracanie i powrot w to samo miejsce.)
Tak, tak, to się może zdarzyć przy dużym tłoku. Niestety, ten algorytm nie potrafi "spojrzeć szerzej" i zauważyć, że taki zestaw ruchów nie ma sensu. Widzi tylko, że to najlepsze co może znaleźć i tyle. Zresztą gdy grają ludzie to taka wzajemna blokada też może się łatwo zdarzyć i zdarza się nawet częściej niż z komputerem. Ludzie potrafią być znacznie bardziej przewidujący i złośliwi, a gdy jeden gracz może wygrać, to pozostali trzej za wszelką cenę go blokują.

Zawsze można pograć w wersji dla dwóch graczy, która i tak moim zdaniem w GLIKU sprawdza się zdecydowanie lepiej.

Co do Pythona vs C - zapewne masz rację, program w C jest dużo wydajniejszy niż w Pythonie. Jednak GLIKa napisałem w kilka dni w sumie. Gdybym pisał w C, zajęłoby mi to pewnie kilka tygodni raczej.
Awatar użytkownika
Duch
Posty: 209
Rejestracja: 03 lut 2007, 16:59
Lokalizacja: Gdynia

Post autor: Duch »

ja_n pisze:Co do Pythona vs C - zapewne masz rację, program w C jest dużo wydajniejszy niż w Pythonie. Jednak GLIKa napisałem w kilka dni w sumie. Gdybym pisał w C, zajęłoby mi to pewnie kilka tygodni raczej.
Cos, za cos.
Bardzo czesto pisze sie program w jakims jezyku skryptowym, zeby bylo szybko. Sprawdza sie czy pomysl dziala, a potem ktos to przez miesiac przepisuje na C.
Ja tez preferuje ten pierwszy etap : )

Swoja droga gierka bardzo ladnie sie prezentuje.
Chwala Ci za poswiecenie tych kilku dni.
Awatar użytkownika
ja_n
Recenzent
Posty: 2303
Rejestracja: 28 lip 2004, 10:42
Lokalizacja: Warszawa
Been thanked: 1 time

Post autor: ja_n »

Duch pisze:Swoja droga gierka bardzo ladnie sie prezentuje.
Chwala Ci za poswiecenie tych kilku dni.
Dzięki :D
Awatar użytkownika
Duch
Posty: 209
Rejestracja: 03 lut 2007, 16:59
Lokalizacja: Gdynia

Post autor: Duch »

Bez kozery.

Po pijaku (czyli np. teraz) gram sobie w to z kompami i sa rowne szanse ; )
ODPOWIEDZ