Program napisany w ramach laboratoriów z Algortymów i Struktur Danych, jako program sędziujący grę, będącą tematem przewodnim
drugiej połowy semestru tegoż przedmiotu. Do uruchomienia programu wymagana jest java se 8 runtime environment.
##Zasady
Na planszy n x n pól, gdzie n jest naturalną nieparzystą liczbą z zakresu od 5 do 255 gracze stawiają klocki w rozmiarach 2 x 1
lub 1x2 pól. Wygrywa gracz który jako ostatni będzie miał możliwość wykonania ruchu. Algortymy grająca mają 1 sekundę czasu na
wykonanie ruchu. Przekroczenie tego czasu, lub wykonanie błędnego ruchu powoduje przegraną danego programu.
##Protokół Komunikacji
Uwaga: Wszelki wysyłany tekst pisany jest dużymi literami, a numeracja pól planszy mieści się w zakresie od 1 do n, a nie od 0 do n-1.
s - sędzia
p1 - program pierwszy
p2 - program drugi
- PING (s) -> (p1)
- PONG (p1) -> (s)
- PING (s) -> (p2)
- PONG (p2) -> (s)
- rozmiar planszy (przykład: "5") (s) -> (p1)
- rozmiar planszy (przykład: "5") (s) -> (p2)
- "ZACZYNAJ" (s) -> (p1)
- Ruch (przykład: 1 1 1 2) (p1) - > (s)
- Poprzedni ruch (przykład: 1 1 1 2) (s) -> (p2)
- Ruch (p2) - > (s)
- Poprzedni ruch (s) - > (p1)
- Powrót do punktu 8
- WYGRALES (s) -> zwyciezca
- PRZEGRALES (s) -> przegrany
Dozwolone języki programowania: Każdy, obsługujący standardowe wejście i wyjście (w ustawieniach programu sędziującego można podać mu instrukcję jak uruchomić program o danym rozszerzeniu).
Wysyłanie tekstu przez programy grające musi odbywać się "jednym ciągiem", przez komendę typu "println" (ze znakiem nowej linii na końcu). Wysyłanie kolejnych liczb po jednej, nawet jeśli wszytkie zmieszczą się w terminie jednej sekundy i nawet, jeśli dodawmy na końcu samodzielnie znak nowej linii, uznane będzie za niezgodne z protokołem i program sędziujący uzna to za ruch niepoprawny.
##Zmiany (od wersji pierwotenej)
-Naprawa kilkunastu błędów (w tym już niemal całkowita poprawa w kwestiach kompatybilności z protokołem)
-Dodanie partii automatycznych (rozgrywek), wraz z zapisywaniem ich wyników
-Zmiana wyglądu programu, przepisanie do javyfx, dodanie alternatywnego stylu graficznego programu
-Dodanie możliwości wykonywania automatycznych gier pomiędzy definiowanymi programami
-Dodanie możliwości prezentowania wyników w tabelach i na wykresach