------------------------------ Sieci Komputerowe Laboratorium Zadanie 2 Termin: ??.??.2001 ------------------------------ M*I*M*O*P*O*L (R) Gra w Mimopol(R) sklada sie z nastepujacych elementow: - Gracze. Wystepuja w dowolnej ilosci, kazdy gracz ma unikalny identyfikator np imie oraz koto w banku na ten identyfikator; - Bank. Jest obiektem CORBA. Moze wykonac nastepujace funkcje: - Zalozenie konta o podanej nazwie, pocztkowo zawiera $500 - Zmiana stanu konta. Stan konta nie moze spasc ponizej $0. Operacja, ktora by to powodowala nie moze zostac wykonana - Pobranie wysokosci salda danego konta - Skasowanie konta - Zestaw pol gry (w liczbie conajmniej 10). Kazde pole jest obiektem CORBA. Pola zorganizowane sa w cykliczna liste. Generyczne pole potrafi wykonac nastepujace czynnosci: - Wejdz(gracz): Gracz przechodzi na to pole. W wyniku otrzymuje opis pola. Na polu moze znajdowac sie jednoczesnie nie wiecej niz jeden gracz (proba wejscia na zajete pole powoduje blad). - DajAkcje(): Pobiera liste akcji (z opisami kazdej z nich) dostepnych dla gracza. Akcje sa zalezne od rodzaju pola (patrz ponizej). Jako efekt uboczny akcja moze zmienic stan konta gracza przebywajacego na polu (byc moze rowniez innych graczy). - WykonajAkcje(akcja): wybiera jedna z otrzymanych poprzednia funkcja akcji. Jesli jej wykonanie jest mozliwe gracz jako rezultat otrzymuje nazwe nastepnego pola. W przeciwnym przypadku (np brak $ na koncie) blad i nalezy wybrac inna akcje. Zawsze dostepna jest akcja 'Przegralem', w wyniku ktorej nie otrzymuje sie nazwy nastepnego pola. Gracz, ktory ja wybierze, przegrywa (jego konto w Banku jest kasowane). Wykonanie akcji powoduje opuszenie pola przez gracza. Celem zadania jest napisanie implementacji obiektow Banku i Pol oraz dwoch programow. Pierwszy program rejestruje obiekty i dziala jako serwer. Drugi jest interaktywnym programem klienta sluzacym do prowadzenia rozgrywki przez gracza. Klient na poczatku pobiera identyfikator gracza i zaklada odpowiednie konto w Banku. Nastepnie pozwala na wykonanie nastepujacych czynnosci: - przejscie na pole (o ile sie na zadnym nie znajduje; jesli to poczatkek rozgrywki to jest to pole o nazwie 'start'), powoduje pojawienie sie opisu pola i listy akcji do wyboru; jesli pole jest zajete to gracz zostaje o tym poinformowany i moze powtorzyc probe przejscia do skutku - sprawdzenie stanu konta; - wybor akcji (w wyniku czego otrzyma nazwe nastepnego pola). - przerwanie rozgrywki (jesli znajduje sie aktualnie na polu, to powoduje to automatyczny wybor akcji 'Przegalem') Obiekty CORBA w tym zadaniu powinny rejestrowac sie w serwisie nazw w nastepujace drzewo: Mimopol (context) --> Bank (context) \-> Pola (context) --> nazwa pola 1 |-> ... \-> nazwa pola n Wiecej o polach: 1. Wybor kolejnego pola Jesli nie zostalo to inaczej zdefiniowane (dla okreslonego rodzaju pola) uzywany jest nastepujacy algorytm wyboru pola (wersja z jedna kostka): Znajac k kolejnych pol (gdzie k to zwyczjowo 6) w ustalonym cyklicznym porzadku pol, jako pole nastepne podane zostaje losowo wybrane z tych k pol. Dla chetnych (jesli rozumieja ten opis) - zaimplementowac wersje z 2 kostkami (musi byc wtedy sensownie duzo pol), w ktorej znane jest 11 kolejnych pol z pominiecie pierwszego i losowanie pola nastepuje z odpowiednim rozkladem prawdopodobienstwa. 2. Rodzaje pol a. Start - jest dokladnie jedno takie pole (nazwa 'start') Pole startowe, jedyna dostepna akcja jest 'Wyplata', gracz otrzymuje $100. b. Relaks Jedna akcja - pusta (nic nie zmienia). c. Ryzyko/Szansa Jest zawsze jedna akcja powodujaca losowe (ale podane wczescniej w opisie akcji) zmiany na koncie bankowym gracza. Akcjom tym towarzysza irracjonalne opisy typu 'Bank pomylil sie na twoja korzysc, otrzymujesz $1000', 'Mandat za przekroczenie predkosci, placisz $10' itp. Wynikiem wylosownej akcji moze byc arbitralne przeniesienie na pole o okreslonej nazwie np 'Idziesz do wiezienia' podaje 'Wiezienie' jako nastepne pole. d. Grunt - najczesciej wystepujace pole Pole gruntu posiada nastepujace charakterustyki: - cene gruntu - nazwe wlasciciela (na poczatku bez) - ilosc hoteli (od 0 do 5, poczatkowo 0) - cene wybudowania hotelu - oplate za postoj (zalezna od ilosci hoteli) Dostepne akcje sa zalezne od wlasciciela gruntu: - brak wlasciciela: - kupno gruntu (pomniejsza stan konta o cene gruntu, ustawia aktualnego gracza na wlasciciela) - nic - wlasny grunt: - budowa hotelu (o ile liczba hoteli < 5; pomniejsza stan konta o cene hotelu) - nic - grunt innego gracza: - oplata (pomniejsza stan konta o cene postoju i powieksza o ta sama kwote koto wlasciciela) Uwagi: - Gra, tak jak zostala wyspecyfikowana, nie dzieli rozgrywki na tury i jest to zamierzone; - Program klienta musi buforowac zapytania do serwisu nazw, nie moze pobierac dwukrotnie odwolania do pola o tej samej nazwie; - Bledy opisane powyzej (za maly stan konta, pole zajete) a takze inne, nie przewidziane, nalezy obslugiwac przez zdefiniowanie i uzywanie odpowiednich wyjatkow; - W miejscach, gdzie jako argumentow dla zdalnych wywolan wydaje sie naturalne uzycie sekwencji, mozna ograniczyc sie do przesylania napisow i/lub stosowania metod-iteratorow w celu uproszczenia zarzadzania pamiecia; Na pytania dotyczace zadania odpowiada: Michal Szafranski <stalker@mimuw.edu.pl> Powodzenia!