Kilka osób widziało, jak kodowałem na Foreverze gierkę. Oto krótkie demko, czyli wersja daleka od finału. Jest to pewnie ostatnia publikowana wersja demostracyjna, bo pewnie wystawię gierkę na Abbuc. No i to demonstracja, że kod w C kompilowany CC65 może być całkiem szybki :-) (czyste C bez wstawek asemblerowych)
Inspiracje są wszędzie :-) Tym razem pomysł przyszedł po zagraniu w "3030 Deathwar" i "Wing Commander Saga". Na konkurs Nomam przygotowałem handlówkę kosmiczną w 10 liniach basica i stwierdziłem, że gdyby przepisać do C to spokojnie da radę zrobić ją na 4 graczy w czasie rzeczywistym, nawet ze sztuczną inteligencją. A tego na Atari nie było. Kusi co prawda rozszerzyć tę grę np. o podbijanie planet, ale nie wiem, czy czasowo ogarnę większy projekt...
Patrzę tak, ale każdy z graczy ma inne osiągi, można się fajnie bawić projektując zachowanie takich gości (boty), a potem wejść w polemikę z realnym finansistą co do tego jaka strategia jest najlepsza. I tu powoli wchodzimy (chyba niechcący) w dziedzinę symulacji;) Dla tych co nie studiowali informatyki dodam, że raptem gra staje się poważnym narzędziem, które może posłużyć od analiz otrzymanych wyników w konfrontacji z realnymi zachowaniami podmiotów na rynku itp.
W tym przypadku starałem się zrobić AI, która będzie działać szybko i będzie symulować prostą strategię gracza. Przy niewielkich usprawnieniach AI człowiek by nie miał szans. Matematyka za ekonomią jest zbyt prosta.
He he no tak;) Ale czy każdy z graczy ma swoją strategię?
--- Tak sobie myślę, że wcale nie trzeba tutaj używać matematyki. Wystarczy aby boty "wiedziały" gdzie jest dobra cena, najdroższego dostępnego towaru. Samo to dałoby dużą przewagę nad człowiekiem, tym większą im gorszą ma pamięć dany osobnik. Co więcej oferty się zmieniają co jakiś czas i człowiek musi dolecieć aby sprawdzić co się zmieniło i jak bardzo (widziałem że zmiany są co jakiś czas, czasami niewielkie, a czasami zmiana jest duża np. sprzedaż zamienia się w skup itp.). Dodatkowym ułatwieniem jest fakt że odległości faktycznie nie mają znaczenia, gdyż koszt paliwa jest niski. Czyli człowieka da się tutaj pokonać bardzo łatwo, stawiając na jego największą słabość pamięć;)
Aktualne AI jest bardzo proste: 1. Znajdź losową planetę (w zasięgu paliwa) i leć do niej. Jeżeli planeta jest "zajęta" przez innego gracza, Goto 1. 2. Sprzedaj wszystko, co możesz. 3. Kup najdroższe towary, które kupuje poprzednio odwiedzona planeta (jeżeli kupuje ich ponad 20). Jeżeli nie ma co kupić, Goto 1. 4. Leć do poprzedniej planety. Goto 2.
Działa dobrze, ale nie jest wyzwaniem dla gracza. Samo przerobienie punktu 2 na "kup najbardziej opłacalne towary" wystarczyłoby do zapewnienia wyzwania.
Aha czyli wszyscy są identyczni, ale jednak osiągają znacznie różniące się rezultaty - co oznacza że to jedynie ich "szczęście" decyduje o tych różnicach.
Raczej pech i niedoskonałości powyższego algorytmu. Przykładowo może zdarzyć się, że planeta już nie kupuje towaru, który AI ma w dużej ilości w ładowni. Dopóki jest możliwość handlować czymś innym pomiędzy aktualną a poprzednią planetą AI będzie między nimi kursować, mając bardzo mało miejsca w ładowni na tę operację. Inny przykład to wykupienie towaru za wszystkie pieniądze i śmierć z braku paliwa. Trudo po czymś takim nadgonić innych graczy.
Ale to są typowe problemy, gdy grałem mi też się takie zdarzały;) W końcu nie wiem co uda mi się zaraz sprzedać i jak dobrze. Po drugie śmierć z braku paliwa uważam za całkiem realistyczną, właśnie tak powinno być, przeciwnik raz na jakiś czas powinien zrobić jakiś duży błąd - Errare humanum est. He he;)
Ale mówię poważnie, popełnianie błędów w tym wypadku jest próbą emulacji ludzkiej "mądrości";) Kolejnym krokiem byłoby uczenie się na błędach, czyli w miarę czasu zmniejszanie takich błędów (przy równoczesnym braku wyeliminowania popełniania błędów, bo przecież EHS ;) Opcjonalne jest dostosowywanie średniej inteligencji wszystkich przeciwników do poziomu gracza (fajnie by było gdyby była to wartość zmieniająca się nieliniowo, czyli tak aby gracz nie mógł zauważyć czy właśnie algorytm jest od niego (chwilowo) lepszy czy gorszy).