Zadanie to implementacja SERWERA i klienta gry w Marynarza
W grze początkowo bierze udział 3 graczy. W każdej rundzie wystepuje gracz który zaczyna grę. Gra polega na tym, że w każdej rundzie kazdy gracz podaje liczbę między 1 a 10. Serwer zaczynając od gracza zaczynającego rundę liczy wartość modulo liczba graczy, gracz na którego wypadło odpada z gry. Gdy gracz 10 razy przegra odpada z gry na zawsze i gra jest kontynuowana przez pozostałych graczy. Jeżeli w grze pozostanie tylko jeden zawodnik, wygrywa całą grę.
Grę przegrywa gracz, który osiągnie ustalony limit kart, dla nas będzie to 5 kart, czyli jeśli rundę przegrał gracz z 4 kartami w ręku, odpada on z dalszej rywalizacji. Grę wygrywa gracz, który pozostanie sam w grze.
Serwer każdą poprawną komendę potwierdza komunikatem OK, każdą niepoprawną oznacza wysyłając ERROR.
OPIS KOMEND:
W momencie połączenia serwer przesyła do użytkownika komunikat
WITAM
Przed włączeniem się do gry każdy gracz musi się "zalogować" podając swój login (niepusty ciąg znaków)
LOGIN <login>
W momencie, gdy 3 osoby włączą się do gry, gra zostaje uruchomiona a serwer przesyła do zawodników komunikat wraz z numerem danego gracza i numerem zawodnika zaczynającego grę
RUNDA <twój ID> <id_zawodnika_zaczynającego grę>
Użytkownik, który ma wykonać ruch otrzymuje od serwera komunikat
TWOJ RUCH
Na który w ciągu 3 sekund musi odpowiedzieć podając liczbę między 1 a 10
np. 1
Gdy wszyscy garcze podadzą liczbę serwer przesyła wynik rundy do wszystkich graczy:
<liczba graczy> <id_gracza1> <podana_wart_gracz_1> ... <id_gracza2> <podana_wart_gracz_2> ....np. 3 0 1 1 3 2 10
następnie przesłany jest aktualny stan gry na kolejną rundę:
<liczba graczy> <id_gracza1> <ile_razy_przegrał_1> <id_gracza2> <ile_razy_przegrał_2> ....np. 3 0 0 1 3 2 1
Powyższy komunikat przesyłany jest nawet w przypadku ostatniej rundy. Następnie przesyłany jest komunikat o kolejnej rundzie
RUNDA <nr_rundy> <id_gracza rozpoczynajacego>
lub
KONIEC <uszerwegowane_loginy_graczy_od wygranego do ostatniego miejsca>np KONIEC s123456 s654321 s123987 ...
Przykładowy log rozgrywki z punktu widzenia gracza nr 1:
Uwaga!! << oraz >> nie sa czescia protokolu, obrazuja jedynie czy komunikacja zachodzi od czy do klienta!!<< WITAM>> LOGIN MARCIN_W<< OK<< RUNDA 0 0<< TWOJ RUCH>> 1<< OK<< 3 0 1 1 1 2 1<< 3 0 1 1 0 2 0<< RUNDA 0 1<< TWOJ RUCH...
Dodatkowe założenia:
w przypadku, gdy klient nie odpowiada przez 3 sekundy jest wyrzucany z gry,
w przypadku gdy klient wyśle powyżej 100 złych komunikatów, jako pojedyncza odpowiedź jest on wyrzucany z gry,
Program może być wykonany w dowolnym języku programowania ale musi wykorzystywać do komunikacji protokół TCP. Czas wykonania zadania: 02.09.2016.