Skip to content

lenafiedor/battleships

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Gra w okręty

Aplikacja do gry w okręty przez sieć. Łączy się z inną aplikacją i rozgrywa partię gry w okręty.

Parametry uruchomieniowe

Aplikacja obługuje następujące parametry:

  • -mode [server|client] - wskazuje tryb działania (jako serwer: przyjmuje połączenie, jako klient: nawiązuje połączenie z serwerem)
  • -server S - tylko w trybie client; serwer, z którym aplikacja ma się połączyć.
  • -port N - port, na którym aplikacja ma się komunikować.
  • -map map-file - ścieżka do pliku zawierającego mapę z rozmieszczeniem statków (format opisany w sekcji Mapa).

Mapa

  • Mapa jest dokładnie taka sama jak w zadaniu nr 3 z zestawu 03-collections. Należy użyć uprzednio napisanego generatora do tworzenia losowych map.

Protokół komunikacji

  • Komunikacja odbywa się z użyciem protokołu TCP, z kodowaniem UTF-8.
  • Klient i serwer wysyłają sobie na przemian wiadomość, która składa się z 2 części: komendy i współrzędnych, odzielonych znakiem ;, i zakończonych znakiem końca linii \n.
    • Format wiadomości: komenda;współrzędne\n
    • Przykład wiadomości: pudło;D6\n
  • Komendy i ich znaczenie:
    • start
      • komenda inicjująca rozgrywkę.
      • Wysyła ją klient tylko raz, na początku.
      • Przykład: start;A1\n
    • pudło
      • odpowiedź wysyłana, gdy pod współrzędnymi otrzymanymi od drugiej strony nie znajduje się żaden okręt.
      • Przykład: pudło;A1\n
    • trafiony
      • odpowiedź wysyłana, gdy pod współrzędnymi otrzymanymi od drugiej strony znajduje się okręt, i nie jest to jego ostatni dotychczas nie trafiony segment.
      • Przykład: trafiony;A1\n
    • trafiony zatopiony
      • odpowiedź wysyłana, gdy pod współrzędnymi otrzymanymi od drugiej strony znajduje się okręt, i trafiono ostatni jeszcze nie trafiony segment tego okrętu.
      • Przykład: trafiony zatopiony;A1\n
    • ostatni zatopiony
      • odpowiedź wysyłana, gdy pod współrzędnymi otrzymanymi od drugiej strony znajduje się okręt, i trafiono ostatni jeszcze nie trafiony segment okrętu całej floty w tej grze.
      • Jest to ostatnia komenda w grze. Strona wysyłająca ją przegrywa.
      • Przy tej komendzie nie podaje się współrzędnych strzału (już nie ma kto strzelać!).
      • Przykład: ostatni zatopiony\n
  • Możliwe (choć strategicznie nierozsądne) jest wielokrotne strzelanie w to samo miejsce. Należy wtedy odpowiadać zgodnie z aktualnym stanem planszy:
    • pudło w razie pudła,
    • trafiony gdy okręt już był trafiony w to miejsce, ale nie jest jeszcze zatopiony,
    • trafiony zatopiony gdy okręt jest już zatopiony.
  • Obsługa błędów:
    • W razie otrzymania niezrozumiałej komendy lub po 1 sekundzie oczekiwania należy ponownie wysłać swoją ostatnią wiadomość.
    • Po 3 nieudanej próbie należy wyświelić komunikat Błąd komunikacji i zakończyć działanie aplikacji.

Działanie aplikacji

  • Po uruchomieniu (w dowolnym trybie), aplikacja powinna wyświetlić swoją mapę.
  • W czasie działania aplikacja powinna wyświetlać wszystkie wysyłane i otrzymywane wiadomości.
  • Po zakończeniu rozgrywki, aplikacja powinna wyświetlić:
    • Wygrana\n w razie wygranej lub Przegrana\n w razie przegranej,
    • W razie wygranej: pełną mapę przeciwnika,
    • W razie przegranej: mapę przeciwnika, z zastąpieniem nieznanych pól znakiem ?. Uwaga: pola sąsiadujące z zatopionym okrętem należy uznać za odkryte (nie może się na nich znajdować inny okręt).
    • Pusty wiersz
    • Swoją mapę, z dodatkowymi oznaczeniami: ~ - pudła przeciwnika, @ - celne strzały przeciwnika.

Przykład mapy przeciwnika z przegranej sesji:

..#..??.?.
#.????.#..
#....??...
..##....?.
?.....##..
??#??.....
.........#
..##...#..
.##....#.#
.......#..

Przykład swojej mapy po grze (wygranej; nie wszytkie okręty zatopione):

~~@~~.~~~.
@..~.~.@.~
#.~#..~.~.
..##..~..~
..~.~.@@..
.#@~..~...
.~.~.~.~.@
~.##.~.#~~
.##~..~~~~
..~.~.~~~.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages