OPIS 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OGÓLNIE

Na wstępie gry należy zainicjować połączenie bez którego nie jest możliwe rozstawienie swoich statków a tym samym i rozpoczęcie gry. Po ustanowieniu połączenia użytkownicy mogą rozstawić statki albo pogadać ze sobą przy użtyciu dołączonej do gry opcji do porozumiewania się ("Kwilu-Kwilu" nie mylić z "Gadu-Gadu"). Przystępując do rozstawienia statków należy pamiętać, że rozstawiamy je według z góry określonej kolejności, czyli od jednego czteromasztowca do czterech jednomasztowców. Gra posiada zabezpieczenia uniemożliwiające postawienie dwóch statków w bezpośrednim swoim sąsiedztwie. Po rozstawieniu wszystkich statków rozpoczyna się gra (rozpoczyna ją użytkownik, którego komputer pełni role Serwera). Strzały oddawane są naprzemiennie. W przypadku gdy jakiś gracz trafi w maszt ma prawo do następnego strzału. Zasady takie jak przy grze w statki na kartce, starej, dobrej i sprawdzonej na wielu lekcjach.

OPIS PODSTAWOWYCH ALGORYTMOW

  • ROZSTAWIANIE STATKÓW

Na początku inicjowana jest tablica składająca sie z kolejno-ponumerowanych pól od 0 do 99, której elementy są początkowo zerami. W momencie stawiania statku, element tablicy odpowiadający zaznaczonemu polu ustawiany jest na wartość 2 zaś wszystkie sąsiadujące z nim pola (elementy) ustawiane są na 1. Zapobiega to postawieniu dwóch statków obok siebie. Kolejność ustawiania statków jest z góry narzucona z tego względu by program mógł zezwolić na postawienie w odpowiednim momencie "masztu" na polu, które ma wartość 1, w tym przypadku, tym "nieodpowiednim momentem"  jest stawianie nowego statku. Gdy wszystkie statki są rozstawione, odpowiednio wypełniona tablica przesyłana jest do przeciwnika...

  • "STRZELANIE"

Tablica z rozstawionymi statkami przesłana jest do komputera przeciwnika po rozstawieniu wszystkich statków, w celu porównywania wartości pola zaznaczonego jako strzał z wartościami pól całej tablicy z rozstawionymi statkami w celu odpowiedniej reakcji na "trafiony" albo "pudło". W momencie trafienia wyświetlany jest niebieski kwadracik, pudło to kółeczko. Podobna operacja wykonywana jest również na komputerze przeciwnika. W momencie trafienia, strzelający ma prawo do następnego strzału czyli ma dostępne obiekty wykorzystywane do oddania strzału.. 

KLASY ZNAJDUJĄCE SIĘ W NASZYM PROJEKCIE

CAboutDlg - klasa zawierająca wszystkie informacje związane z oknem "About" (czyli o nas)

CGniazdaApp - klasa generowana przez kreatora. Jest ona pochodną klasy CWinApp. Zarządza ona inicjalizacją aplikacji. Odpowiedzialna jest za tworzenie powiązań pomiędzy klasami dokumentu, widoku i ramki.

CGniazdaDlg - jest to główna klasa, w której zawiera sięcały kod programu.

CMojeGniazdo - jest to klasa potomna, dziedzicząca własności po klasie CAsyncSocket. klasa ta powstała w celu przechwytywania i opowiadania na komunikaty.

KOMUNIKACJA SIECIOWA

Nasza gra używa standardowych reguł i funkcji do komunikowania się. Jedna aplikacja pracuje jako serwer druga jako klient. Aplikacja będąca serwerem tworzy połączenie komunikacyjne i nasłuchuje żądania połaczenia na kanale wybranym przez użytkownika. Klient próbuje połączyć się z serwerem wybierając nazwę serwera i kanał na którym najprawdopodobniej występuje nasłuch do utworzenia połączenia. Po ustanowieniu połączenia możliwa jest wymiana danych miedzy nimi. Połączenie to jest połączeniem dwukierunkowym. Gdy klient lub serwer postanowi rozłączyć się następuje zamknięcie połączenia, wtedy druga ze stron może wykryć brak połączenia i zamknąć je ze swojej strony bez względu na przyczyny.

 PROTOKÓŁ TCP/IP

Protokół TCP specyfikuje format danych i potwierdzeń, które komputery wymieniają między sobą, aby uzyskać niezawodne przesyłanie. Opisuje również procedury, których używają maszyny w celu upewnienia się, że dane dotarły bez zakłóceń. Wyznacza on sposób, w jaki oprogramowanie TCP rozróżnia odbiorców na danej maszynie oraz jak komunikujące maszyny dają sobie radę z błędami takimi jak utrata pakietu lub jego zduplikowanie. Protokół ten określa też sposób, w jaki dwa komputery inicjują przesyłanie za pomocą strumienia TCP oraz w jakiej sytuacji zgadzają się one na jego zakończenie.

Warstwa transportowa składa się z dwóch ważnych protokołów: protokołu kontroli transmisji (Transmission Control Protocol, TCP) oraz protokołów pakietów użytkownika (User Datagram Protocol, UDP). TCP udostępnia usługi niezawodnego przesyłania danych wrazz kontrolą i korekcją błędów. UDP wykonuje usługę bezpołączeniowego (ale i wymagającego małego nakładów środków) dostarczania datagramów (pakietów). Oba protokoły przekazują dane pomiędzy warstwą Internetu. Twórca aplikacji może zdecydować, który z protokołów bardziej 
odpowiada jego celom, i wykorzystać go do transmisji danych.

 SPOSÓB DZIAŁANIA KOMUNIKACJI SIECIOWEJ W NASZYM PROJEKCIE

Do rozwiązania problemu komunikacji sieciowej w grze stworzyliśmy klasę potomną CMojeGniazdo dziedziczącą własności po klasie CAsyncSocket. Dla klienta i serwera tworzone jest gniazdo przy pomocy funkcji Create. Dla serwera wywoływana jest funkcja Listen zaś dla klienta Connect . W momencie połączenia aplikacji generowane jest zdarzenie wywołujące funkcje OnAccept (dal serwera), która akceptuje żądane połączenie. Dodatkowo po stronie klienta wywoływana jest funkcja OnConnect. Dla przesyłania informacji korzystamy z funkcji Send wywoływanej dla okreśonego gniazda. Jeśli wynik operacji wysłania jest negatywny to funkcja zwraca wartość FALSE lub SOCKET_ERROR. Do odbierania danych wykorzystywana jest funkcja Receive wywołana dla odpowiedniego gniazda (aktywnego). W przypadku błędu funkcja zwraca wartość FALSE lub SOCKET_ERROR.. Dla zamknięcia połączenia z gniazdem wywoływana jest funkcja OnClose.   

PROTOKÓŁ KOMUNIKACJI

chcesz wiedzieć więcej wejdź...

Po rozstawieniu statków tablica konwertowana jest z int na string i przesyłana jest do komputera przeciwnika. U przeciwnika następuje zdekodowanie tablicy ze string'a na int. W miejscach znajdowania się masztu wpisywana jest wartość 2 w pozostałych miejscach wartość 0. Po wybraniu pola strzału wartość odpowiadające temu polu jest stringiem i jako taki zostaje wysłany do drugiego komputera, w którym następuje odpowiednie zdekodowanie tego stringa. Polega to na tym, że pobieramy 4-ty znak stringa odpowiadający literze kolumny. Jest on następnie konwertowany na kod Ascii i od uzyskanej wartości odejmujemy 65 w wyniku czego otrzymujemy numer kolumny, w której to znajduje się oddany strzał. Następnie pobierany jest 5 znak stringa, uzyskiwany jest kod Ascii i odejmowana jest wartość 49, co w wyniku daje numer wiersza. Numer wiersza mnożony jest x10 i dodawany do numeru kolmny. W tablicy przeciwnika odnajdywane jest pole, którego współrzędne otrzymaliśmy w wyniku powyrzszych operacji i sprawdzana jest wartość tego pola. Jeśli jest ona równ 2 to trafiony jeśli 0 to pudło. Sprawdzanie "czy trafiony" odbywa się u obu graczy jednocześnie. Umożliwiło to przesyłanie w momencie strzału tylko w jedna stronę, tzn. po sprawdzeniu trafności informacja z wynikiem nie musi być odsyłana. Gdy pudło to obiekty odpowiadające za oddanie strzału stają się nieaktywne a u przeciwnika są one aktywne i umożliwiają oddanie strzału.

     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Powrót do strony głównej