Sieci Komputerowe

Projekt poprawkowy

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:

<< 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
...
Uwaga!! << oraz >> nie sa czescia protokolu, obrazuja jedynie czy komunikacja zachodzi od czy do klienta!!

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.