System zarządzający grami programistycznymi Meridius Instytut Informatyki, Uniwersytet Wrocławski 20 września 2011 Promotor: prof. Krzysztof Loryś
Gry komputerowe a programistyczne Gry komputerowe Z punktu widzenia gracza polegają na przekazywaniu programowi (grze) poleceń za pośrednictwem pewnego interfejsu. Gry programistyczne Umożliwiają zapisanie strategii do gry w postaci algorytmu, programu komputerowego (tzw. bota) implementującego tę strategię i jego późniejsze uruchamianie.
Specyfika gier programistycznych Gracze są równocześnie użytkownikami i deweloperami. Rozgrywka wymaga poznania interfejsu służącego do programowania botów. Różnorodność stosowanych interfejsów programistycznych. Często konieczność dodatkowej, skomplikowanej konfiguracji środowiska.
Cel powstania Meridiusa (1) Stworzenie przyjaznej dla graczy platformy, obsługującej wiele gier programistycznych. Udostępnienie graczom spójnego interfejsu programistycznego do wszystkich umieszczonych w systemie gier. Obsługa dużej liczby komercyjnych języków programowania. Umożliwienie rozgrywki bez instalacji dodatkowego oprogramowania. Umożliwienie tzw. gry manualnej, nie wymagającej pisania programu bota.
Tworzenie gier programistycznych Tworząc grę programistyczną trzeba zaprojektować i zaprogramować pewne, wspólne dla większości gier, elementy systemu. 1 Mechanizm określający zasady gry, tzw. logika. 2 Zasady pisania botów, ich bezpiecznego uruchamiania i komunikacji z grą. 3 Metody testowania botów. 4 Zarządzanie społecznością graczy i wymianą oraz udostępnianiem botów. 5 System wizualizacji rozgrywek i oglądania powtórek. 6 Mechanizm służący do gry manualnej.
Cel powstania Meridiusa (2) Zapewnienie twórcom gier mechanizmów wspomagających ich tworzenie. Gra programistyczna jako modyfikowalny element większego systemu. Automatyczne udostępnianie przez system funkcjonalności charakterystycznych dla gier programistycznych, zarządzanie rozgrywką i obsługa błędów. Znalezienie kompromisu pomiędzy uniwersalizmem środowiska a prostotą jego wykorzystania. Minimalizacja nakładu pracy twórców gier, pozwalająca się skupić na określeniu jej zasad.
Architektura systemu Meridius Centralny serwer udostępniający usługi przez różne interfejsy użytkownika (np. WWW). Testowa strona internetowa stworzona w technologii ASP.NET z wykorzystaniem JavaScript, udostępniana przez serwer IIS. Jądro systemu napisane w języku C# i oparte na platformie Microsoft.NET 4.0. Baza danych obsługiwana za pomocą Microsoft SQL Express 2008. Pomocniczy serwer linuksowy, komunikacja przez TCP/IP i protokół SSH. Odtwarzanie wizualizacji, umieszczony na testowej stronie plugin Flash. Organizacja modułowa pozwalająca na alternatywne implementacje poszczególnych komponentów.
Zarządzanie grami programistycznymi 1 Mechanizm określający zasady gry. Biblioteka zawierająca klasę, dziedzicząca po bazowej klasie logiki. Ograniczona lecz szeroka klasa implementowanych gier. Mechanizm Refleksji, zdalne wywoływanie metod. 2 Zasady pisania botów, ich bezpiecznego uruchamiania i komunikacji z grą. Schemat komunikacji przez I/O, ustalona składnia poleceń. Zdalne wywoływanie metod logiki, podział na zapytania i komendy. Wykorzystanie VSS, obsługa wielu językach programowania. Wysyłanie plików źródłowych na serwer, kompilacja przez SSH. Aplikacja Proxy, obsługa VSS i komunikacja TCP/IP. 3 Metody testowania botów Możliwość wysyłania przez bota dowolnego komunikatu tekstowego, który będzie widoczny w trakcie wizualizacji.
Zarządzanie grami programistycznymi cd. 1 Zarządzanie społecznością graczy i wymianą oraz udostępnianiem botów. Centralna, publicznie dostępna baza zawodników. Określenie widoczności bota, wgląd w statystyki. 2 System wizualizacji rozgrywek i oglądania powtórek. Logika zwraca opis tury (tzw. ramkę) w formie tekstu. Zewnętrzny moduł tworzy z ramek animację. Aplikacja Turnip, plugin Flash osadzony na stronie. 3 Mechanizm służący do gry manualnej. System profilów użytkowników odpowiadających botom. Logika zwraca ramki, opisujące sytuację z punktu widzenia danego gracza. Wykorzystanie Turnipa, komunikacja przez HTTP. Okno do wprowadzania poleceń, przypisanie poleceń przyciskom.
Zasady gry Skarb Labiryntu Poszukiwacz przygód Stara się jak najszybciej dotrzeć do skarbu. Może wykonać krok w dowolnym kierunku. Architekt Spowalnia poszukiwacza stawiając przeszkody Nie może całkowicie zablokować drogi, ani stawiać przeszkód bezpośrednio obok skarbu lub poszukiwacza. Parametryzacja rozgrywek Modyfikowalna wielkość labiryntu (dowolna liczba ze zbioru {5,..., 20}). Wybór alternatywnych zasad (poszukiwacz ma ograniczony zasięg widoczności).
Tworzenie Meridiusa Kalendarium wrzesień 2009 skrystalizowany pomysł i pierwsze plany systemu, marzec 2010 rozpoczącie regularnych prac koncepcyjnych, październik 2010 rozpoczącie regularnych prac programistycznych. Skala pracy rdzeń systemu (ręcznie pisany kod, bez komentarzy): ok. 6 300 linii, cały system: ok. 17 000 linii (cały kod ponad 33 tys. linii), 6 gier testowych, 134 boty testowe, 10 obsługiwanych języków programowania.
Podsumowanie Cechy Meridiusa: innowacyjność i uniwersalizm, prostota i bezpieczeństwo rozgrywki z punktu widzenia użytkownika, uproszczenie procesu tworzenia gier programistycznych, obsługa szerokiej klasy gier, możliwość gry manualnej, modułowa architektura, z myślą o alternatywnych implementacjach. Perspektywy rozwoju i wykorzystania: współpraca z Wrocławskim Portalem Informatycznym, organizacja zawodów programistycznych, pomoc dydaktyczna do lekcji informatyki i zajęć akademickich,...