Programowanie w języku JAVA, Zadanie_6

Pisanie programów w Javie zgodnych ze standardem CORBA rozpoczyna się zawsze od definicji interfejsu w języku IDL. W pliku CORBAtest.zip znajdują się źródła przykładu aplikacji, w której skorzystano z interfejsu zdefiniowanego jak niżej:
module MTestApp {
 interface MInformator { 
  long GetCallNumber();
  void AddToSum(in long i, out long sum); };
};	
Metoda GetCallNumber() zwraca ilość wywołań metody AddToSum(), metoda AddToSum() zwiększa sumę przechowywaną na serwerze o i, zwracając jej aktualną wartość w parametrze sum. Aby prześledzić działanie aplikacji MTest należy wykonać instrukcje zawarte w pliku commandline (uruchomić należy dwie instancje MTest, które powinny zacząć komunikować się ze sobą). 

Zadanie do wykonania: 
napisz program, który umożliwi przeprowadzenie gry w statki pomiędzy dwoma graczami.  
Założenia:
1.	Każdy z graczy to program, który:
•	z jednej strony pracuje jako serwer implementujący interfejs StatkiInterface zdefiniowany w j. IDL jak niżej:
#ifndef __STATKI_IDL__
#define __STATKI_IDL__
interface StatkiInterface {
 void Shot(in short x , in short y, out char result);
};
#endif	
•	z drugiej strony pracuje jako klient, który wywołuje metodę Shot() drugiego gracza.
2.	W implementacji korzysta się z serwera nazw. Program gracza powinien umożliwiać wprowadzenie nazwy przeciwnika, aby z serwisu nazw można było uzyskać odpowiednią referencję. 
3.	Nawiązanie połączenia powinno nastąpić po naciśnięciu klawisza "Connect".
4.	Wykonanie "Connect" powinno odblokować możliwość oddawania strzałów.
5.	Aplikacja, która pierwsza odda strzał na stronę przeciwnika definiuje kolejność strzałów.
6.	Strzały odbywają się dopóty, dopóki strzelający nie spudłuje. Pudło zmienia strzelającego.
7.	Strzał z parametrami ujemnymi kończy grę (tj. jeśli strzelający stwierdzi, że trafił już wszystko, strzela wtedy ostatni raz, z parametrami ujemnymi; przeciwnik powinien wtedy zerwać połączenie i wyrejestrować się z serwisu nazw; podobnie powinien zrobić strzelający).
8.	Wynik strzału przekazywany jest w parametrze result:
result = 0 – pudło, result = 1 trafiony, result = 2 – trafiony zatopiony.
9.	Graficzny interfejs bazuje na klasach Swing. Pozwala on na wyświetlanie planszy własnej jaki i planszy przeciwnika. Umożliwia on wykonywanie strzałów za pomocą kliknięć myszki (strzał z parametrami ujemnymi powinien pochodzić z wnętrza aplikacji).
Przykładowe schemat dwóch aplikacji przedstawia rysunek:

10.	Każdy program gracza pozwala na losowe lub odręczne umieszczenie statków na własnej planszy (wymiary planszy: 10x10, statki: 1 x 4m, 2x3m, 3x2m, 4x1m, reguła: statki to kolumny lub wiersze nie stykają się ze sobą (m – maszt(y))).