2.4 QuestionGame QuestionGame jest grą z celem zaprojektowaną do gromadzenia pytań zadawanych przez ludzi podczas prób rozpoznawania ras psów. Program ma charakter aplikacji internetowej. W rozgrywcę mogą brać udział tylko zarejestrowani użytkownicy. Rejestracja wymaga podania unikalnej nazwy użytkownika i hasła. W celu zabezpieczenia aplikacji przed automatycznym zakładaniem kont, użytkownik podczas rejestracji musi odczytać dodatkowo kod z obrazka. Po zalogowaniu gracz zostaje przekierowany na stronę domową. Może przeglądać historię swoich rozgrywek jak i obiekty będące celem gry. Dodatkowo w celu uatrakcyjnienia rozgrywki wyświetlany jest ranking najlepszych graczy. Istnieje możliwość porównania swoich osiągnięć z innymi rywalami. Przycisk Play uruchamia grę. Jeżeli nie jest prowadzona żadna gra w tym momencie, system startuje nową rozgrywkę, w przeciwnym wypadku losuje jedną z założonych gier. 2 4 1 Zasady gry 2.4.1.1 Ogólne zasady gry W grze bierze udział dwóch graczy. Każdy uczestnik rozpoczyna rozgrywkę z sumą 210 punktów. Jeden z nich występuje w roli guesser, drugi natomiast odpowiada na pytania, czyli pełni rolę describer. Zadaniem guessera jest odgadnięcie przedmiotu gry, czyli rasy psa, którego zdjęcie jest prezentowane drugiemu graczowi. Na początku z zapisanych obiektów, aplikacja w sposób losowy wybiera jeden, który będzie celem gry. W polu oznaczonym numerem 1 na rysunku 2.4, zostaje wyświetlona nazwa psa oraz jego zdjęcie. Guesser zdobywa informacje o obiekcie poprzez zadawanie kolejnych pytań. Może ich zadać maksymalnie 20. Aktualny numer pytania wyświetlany jest w sekcjach o numerze 2. Istnieją dwa rodzaje pytań, przedstawia je pole oznaczone numerem 1 na rysunku 2.5: próba odgadnięcia rasy - wybór z dostępnych ras w formularzu próba zdobycia dodatkowych informacji - wpisanie pytania w formie: cecha i wartość W każdym przypadku gracz zadając pytanie zmniejsza liczbę punktów do zdobycia o 10. W sekcji numer 2 znajduje się aktualny stan punktów. Dodatkowo system sugeruje 18
Rysunek 2.4: Okno gracza odpowiadającego na pytania Źródło: własne 19
Rysunek 2.5: Okno gracza zadającego na pytania Źródło: własne 20
formę pytań, prezentując przykładowe pytania. Pytania są przesyłane pomiędzy graczami w czasie rzeczywistym i prezentowane w polu oznaczonym numerem 5. Describer może odpowiedzieć na trzy sposoby: yes - odpowiedź twierdząca no - zaprzeczenie dont know - gracz nie potrafi odpowiedzieć na pytanie Na pytania dotyczące rasy, system odpowiada automatycznie. 2.4.1.2 Zakończenie gry Gra może zostać zakończona na wiele sposobów: zadano 20 pytań - gra kończy się, informując o wykorzystanym limicie pytań, gracze za swój trud zostają nagrodzeni 10 punktami, mimo iż nie udało się odgadnąć rasy psa upłynął czas gry - w celu zapewnienia atrakcyjności rozgrywki, gra nie może trawć dłużej nić 5 minut, po upływie tego czasu gra kończy się, a gracze nie otrzymują żadnych punktów rasa psa została odgadnięta - gracz poprawnie określił rasę psa, gra kończy się, a konto każdego z graczy zostaje zwiększone o aktualną sumę punktów 2.4.1.3 Zabezpieczenia W celu zapewnienia poprawności danych, oraz w celu uniknięcia złośliwości niektórych użytkowników aplikacja została wyposażona w proste mechanizmy zabezpieczające: gracze są wybierani w sposób losowy gracz nie może grać sam ze sobą w jednej rozgrywce nie mogą brać udziału gracze o tym samym adresie internetowym cele gry są losowane 21
Dodatkowo administrator może przeglądać pełną historię gier i wyszukiwać anomalie. Pomocny w poszukiwaniu nieuczciwych graczy może być także ranking najlepszych użytkowników. Zbyt duża liczba punktów, lub nagłe pojawienie się bardzo dobrego gracza może budzić podejrzenia. 2 4 2 Implementacja 2.4.2.1 Aplikacja Gra została zaimplementowana w formie aplikacji internetowej. Zrealizowana została w oparciu o technologię Java Platform, Enterprise Edition (zwaną również jako Java Enterprise, lub Java EE) 2 oraz szereg bibliotek. Warstwa logiki biznesowej korzysta ze szkieletu aplikacyjnego Spring Framework. Szablon Spring zawiera rozwiązania dla wielu zagadnień technicznych napotykanych przez programistów aplikacji internetowych. Pozwala w łatwiejszy sposób tworzyć złożone systemy, jakim jest omawiana gra. Biblioteka może być rozważana jako zbiór pomniejszych szablonów, które mogą pracować niezależnie. QuestionGame korzysta między innymi z: Kontenera IoC Szablonu obsługi transakcji Szablonu dostępu do danych Szablonu autoryzacji i autentykacji Interfejs użytkownika został wykonany przy użyciu frameworka Apache Wicket 3. Apache Wicket służy do tworzenia aplikacji internetowych opartych na komponentach. Uwaga programisty skupiona jest na komponentach, z których składa się strona. Każdy z nich ma zdefiniowany swój model (stan) oraz zachowanie. Przykładowo w aplikacji znajduje się komponent odpowiedzialny za obsługę roli gracza odpowiadającego na pytania. Komunikacja pomiędzy graczami w czasie rzeczywistym oparta jest o implementację protokołu Bayeux 4. System używa gotowego komponentu o nazwie wicketstuff-push 5 2 JavaEE: http://java.sun.com/javaee/ 3 Wicket: http://wicket.apache.org/ 4 Bayeux: http://svn.cometd.com/trunk/bayeux/bayeux.html 5 Push: http://sourceforge.net/projects/wicket stuff/ 22
2.4.2.2 Baza danych Aplikacja korzysta z mapowania obiektowo-relacyjnego przy użyciu Java Persistence API 6, który jest oficjalnym standardem mapowania obiektowo-relacyjnego (w skrócie ORM) firmy Sun Microsystems dla języka programowania Java. ORM jest sposobem odwzorowania obiektowej architektury systemu informatycznego na bazę danych. Rozwiązanie to zapewnia przenośność aplikacji. Program może być uruchomiony na niemal każdej bazie danych. Najnowsza wersja pracuje przy użyciu bazy danych PostgreSQL 7, system był testowany również przy użyciu MySQL 8. Model aplikacji zawiera encję opisujące podstawowe elementy gry: Game - zapis gry zawierający między innymi graczy, zadawane pytania oraz cel gry i punktację User - użytkownik systemu GameObject - cel gry, reprezentuję rasę psa, zawiera nazwę i zdjęcie Question - pytanie przechowywane w formie: wartość i cecha wraz z odpowiedzią Aplikacja zawiera standardowe mechanizmy służące do przeglądanie i modyfikowania tych obiektów przy użyciu panela administratora. Encje mają swoje odpowiedniki w bazie danych w postaci tabel. 2.4.2.3 Serwer System jest uruchomiony na serwerze Jetty 9. Jest to otwarty serwer www napisany w języku Java. Ze względu na wykorzystane rozwiązania aplikacja nie wymaga skomplikowanego serwera aplikacyjnego. Może być uruchamiana na niemal dowolnym kontenerze serwletów np. Apache Tomcat 1. Wymagane wówczas jest jedynie dostarczenie bibliotek implementujących protokół Bayeux, przykładowo CometD 11. 6 JPA: http://java.sun.com/javaee/technologies/persistence.jsp 7 PosrgreSQL: http://www.postgresql.org.pl/ 8 MySQL: http://www.mysql.com/ 9 Jetty: http://jetty.codehaus.org/jetty/ 1 Tomcat: http://tomcat.apache.org/ 11 CometD: http://cometd.org/ 23
2 4 3 Analiza zgromadzonych pytań Czekam na oficjalny start 24