Obligatorisk oppgave -H�sten 2004

Oppgaven -distribuert spill

Det skal lages et distribuert fem-p�-rad spill (bondesjakk) ved hjelp av Java, CORBA og Orbacus.

Felles ressursen er en spilltjener som registrerer spillere som �nsker et nytt spill, og starter et nytt spill for annen hver spiller som registrerer seg. Et par av spillere skal ikke m�tte vente til det forrige paret er ferdig med sitt spill. Spilltjeneren og selve spillet er separate objekter, men de skal kj�re i samme prosess (dog ikke i samme tr�d).

Spillerne er klientene, som kj�rer i egne prosesser p� vilk�rlige maskiner. De skal benytte seg av spilltjeneren til � startet et spill, utf�re spillet og avslutte.

IDL-koden er laget for dere. Denne skal brukes og ikke editeres under utviklingen.

Scenario for bruk:

  1. Spilltjeneren startes opp (og, i teorien, tusler og g�r "evig").
  2. Spilltjeneren starter et spill-objekt som skal vente p� neste par spillere.
  3. En bruker starter en spillerklient for � spille.
  4. Spillerklienten f�r tak i en referanse til spilltjeneren. Bruk CORBA Naming Service for dette.
  5. Klientprogrammet oppretter et spiller-objekt.
  6. Klientprogrammet kaller register_player(...) hos spilltjeneren med det nye spiller-objektet som parameter. Spillerklienten f�r som retur en referanse til spill-objektet.
  7. Spill-objektet f�r en referanse til spiller-objektet.
  8. Bruker nummer 2 starter en ny spillerklient for � spille. Dette nye klientprogrammet gj�r som det f�rste i punkt 4, 5 og 6, og spill-objektet f�r en referanse til det nye spiller-objektet.
  9. Spillserveren m� opprette et nytt spill-objekt som skal vente p� neste par av spiller-objekter.
  10. Siden spill-objektet n� har to spillere, kan spillet starte. Spill-objektet kaller new_position(...) hos spiller-objektene.
  11. N�r brukeren (spilleren) pr�ver � legge en brikke, m� spiller-objektet opplyse spill-objektet om hendelsen ved � kalle place_piece(...). Oppdaterte brett sendes til begge spiller-objektene med metoden new_position(...).
  12. N�r spillet er ferdig, sender spill-objektet game_over(...) til spiller-objektene. Spill-objektet skal n� d�. Brukerne kan avslutte spillet, eventuelt velge � starte et nytt spill ved � registrere seg igjen, klientprogrammet utf�rer da punkt 6.

Noen sm� punkter som dere m� huske p�:

  • Brukerne b�r f� s� mye informasjon som mulig.
  • Brukerne skal n�r som helst kunne avslutte klientprogrammet.
  • Brukerne skal n�r som helst kunne velge � avslutte et spill for � omregistrere seg til et nytt spill.

Brukergrensesnittet

Spillene skal ha et grafisk brukergrensesnitt (i betydning et vindu som tegner opp spill og brikker) i Java. Det har blitt laget et Java GUI, PlayerWindow, som dere kan bruke. Fordelene med PlayerWindow er at dere slipper � bruke masse tid p� � programmere i Java AWT, det er blitt testet gjennom flere kurs og fungerer bra. Ulempen er at det er litt kjedelig.

Koden er samlet i tre filer. PlayerWindow, PlayerWindowEvent, PlayerWindowListener. Kompilert kode er ogs� tilgjengelig i en pakke. Den kan lastes ned og inkluderes i CLASSPATH til Java VM. playerWindow.jar.

Merk at implementasjonen av PlayerWindow har tilstanden til spillet, men dette er av grafikkeffektivitetsgrunner, dere skal ikke (og dere skal heller ikke ha tilgang til �) bruke informasjon fra vinduets tilstand.

PlayerWindow har 6 metoder for oppdatering av vinduet, som koden deres m� bruke for � kommunisere til brukeren. Brukeren p� sin side kommuniserer ved hjelp av hendelser; PlayerWindow lager hendelser (events) som deres kode m� abonnere p�. Disse hendelsene er spesiallaget for kurset. Dere skal ikke abonnere p� andre hendelser PlayerWindow m�tte lage. Koden skal v�re rimelig godt dokumentert. De java-filene som inneholder kode som skal bruke PlayerWindow, m� importere alle klasser i pakken playerWindow, dette gj�res ved � legge til "import playerWindow.*;" sammen med de andre import-setningene.

Den klassen som skal abonnere p� hendelsene PlayerWindow genererer, m� implementere grensesnittet PlayerWindowListener og alle metoder dette grensesnittet deklarerer, slik:

class MyClass extends MySuperClass implements PlayerWindowListener {
	  .
	  .
	  .
	  public void onExitGame(PlayerWindowEvent e) {...}
	  public void onNewGame(PlayerWindowEvent e) {...}
	  public void onBoardClicked(PlayerWindowEvent e) {
	    // i denne metoden (og kun denne) gir det mening � snakke
	    // om e.getX() og e.getY(), dette for � f� tak i hvilken 
	    // rute i brettet brukeren klikket i
	  }
	}

Til sist, for at det abonnerende objektet skal starte sitt abonnement, m� det melde sin interesse til PlayerWindow-objektet f�r den skal motta hendelsene, og det gj�res ved � kalle PlayerWindow-objektet sin addPlayerWindowListener-metode et passende sted (tidlig i utf�rt kode), slik:

PlayerWindowObjektet.addPlayerWindowListener(MyclassObjektet); 

Gruppesamarbeid

Dere skal l�se oppgaven i grupper p� to til tre personer, iht. til gruppelisten. Blir det et problem i gruppen, s� si ifra! Det forventes at alle bidrar aktivt og like mye.

Innlevering

Implementasjonen av CORBA grensesnittene i IDLen skal dere selv teste. Kj�r spillet og sjekk at det fungerer med ulike spillere p� ulike maskiner. Pr�v � kj�r andre sine klienter mot deres spilltjener, og omvendt. Til gruppel�rer stena aa simula.no skal dere sende inn:

  • Kildekoden.
  • Javadoc av kildekoden.
  • Et dokument som forklarer hvordan dere har l�st oppgaven. Det skal gis p� et h�yt detaljniv�, med blandt annet UML class- og sequence-diagram. Dokumentet skal ha et "user guide" kapittel som forklarer hvordan man installerer, konfigurer og starter spillet.

Sist oppdatert 20 September 2004