SCRABBLE

Opis klas i działania programu

Klasy składowe

CAboutDlg
Obsługuje okienko dialogowe "O programie...".

CGniazdo
Klasa gniazda służąca do komunikacji poprzez sieć.

CGracze
Opisuje graczy: Imię, Punkty, stan.

CKlientGry
Zarządza klientem gry: zajmuje się wyświetlaniem liter na planszy oraz komunikacją z zarządcą gry.

CMistrz
Zarządza całą grą: wysyła komunikaty do klientów, oblicza punkty.

CMydlo
Obsługuje okienko dialogowe służące do wyboru literki w zastępstwie pustego klocka.

CScrabApp
Standardowo generowana przez kreatora klasa aplikacji. Inicjalizująca aplikację.

CStartowyDlg
Obsługuje startowe okienko dialogowe.

CZbiorLiter
Lista łączona zawiera zbiór liter, które są losowane dla klientów.


Opis działania

Po stronie serwera:
Tworzymy gniazda: nasłuchujące, trzy gniazda połączenia - po jednym do każdego klienta oraz jedno odrzucające połączenia. Po połączeniu klienta serwer wysyła mu jego numer, w zamian otrzymuje jego imię. Wysyła imiona pozostałych graczy. Połączenie zostało ustanowione. Gdy naciśniemy przycisk "Start" zostają wylosowane literki dla każdego z graczy i mu wysłane. Grę rozpoczyna gracz na serwerze. W momencie otrzymania liter od klienta serwer wysyła pytanie do wszystkich klientów czy zgadzają się, po otrzymaniu od wszystkich potwierdzającej odpowiedzi wysyła wszystkim litery do położenia na planszy oraz nową punktację.
Po stronie klienta:
Tworzymy jedno gniazdo i łaczymy się z serwerem. Po połaczeniu otrzymujemy nasz numer, wysyłamy nasze imię, otrzymujemy imiona pozostałych graczy. Możemy teraz wysyłać wiadomości. Po rozpoczęciu gry dostajemy literki. Gdy otrzymamy pozwolenie z serwera. Użytkownik może je przemieszczać z paska na planszę, po naciśnięciu przez użytkownika klawisza "Połóż" sprawdzana jest poprawność ułożenia, jeśli jest poprawnie to litery są wysyłane do serwera. po otrzymaniu potwierdzenia wyłączamy obsługę przenoszenia literek i czekamy na naszą kolej.


Protokól transmisji

Każda przesyłana wiadomość składa się z trzech pól:
- nagłówka (1 bajt)
- treści wiadomości (długość w zależności od typu wiadomości)
- zakończenie wiadomości (trzy bajty: znaki o kodach 254, 253 i 252)

Rodzaje wiadomości (według nagłówków)

0 - imię gracza
  treść wiadomości: numer gracza(jeden bajt)+imię gracza
1 - wiadomość Chat
  treść wiadomości: numer gracza(jeden bajt)+wiadomość
A - słowa zostały zaakceptowane przez klienta (wiadomość od klienta do serwera)
  treść wiadomości: numer gracza(jeden bajt)
D - słowa nie zostały zaakceptowane przez klienta (wiadomość od klienta do serwera)
  treść wiadomości: numer gracza(jeden bajt)
E - wiadomość do klienta - ułożone słowa są niepoprawne
  treść wiadomości: brak
F - literki do wymiany (od klienta do serwera)
  treść wiadomości: '0'+ilość liter(jeden bajt)+litery(ilość liter*1 bajt)
G - klient zrezygnował
  treść wiadomości: numer gracza(jeden bajt)
K - zapytanie o poprawnoPć słów
  treść wiadomości: numer gracza(jeden bajt)+wiadomość(ułożone wyrazy oddzielone znakami \n)
L - nowa literka na pasek
  treść wiadomości: '0'+litera(jeden bajt)
P - punkty do wyPwietlenia
  treść wiadomości: numer gracza(jeden bajt)+punkty(w postaci tekstowej)
Q - koniec gry (komunikat od serwera do klientów)
  treść wiadomości: brak
S - klient ułożył słowo
  treść wiadomości: numer gracza(jeden bajt)+ilość liter(jeden bajt)+litera,kolumna,wiersz(3 bajty*ilość liter)
  jeżeli jedna z liter jest pusta to na końcu dodawany jest jej zamiennik(znak jeden bajt)
  jejeśli są dwa to zamienniki są na końcu w odpowiedniej kolejności przesyłania(dwa bajty)
T - wiadomość do klienta - ułożone słowa s+/- poprawne
  treść wiadomości: brak
U - pozwolenie klientowi na ruch
  treść wiadomości: brak
W - litera do położenia na planszy
  treść wiadomości: '0'+litera(1 bajt)+numer kolumny(1 bajt)+numer wiersz(1 bajt)
m - klient otrzymuje numer 2
  treść wiadomości: brak
n - klient otrzymuje numer 3
  treść wiadomości: brak
o - klient otrzymuje numer 4
  treść wiadomości: brak
r - odrzucenie połączenia przez serwer (gra w toku)
  treść wiadomości: brak
x - odrzucenie połączenia przez serwer (brak wolnych miejsc)
  treść wiadomości: brak
* - pierwsze ułożenie (wiadomość od serwera do klienta, że układane słowo jest pierwsze)
  treść wiadomości: brak
! - sprawdź ile masz liter (wiadomość do klienta)
  treść wiadomości: brak
? - koniec gry (komunikat od klienta do serwera gdy brak liter)
  treść wiadomości: brak