Excerpt |
---|
Denne oppgaven er en videreføring av de tidligere spilloppgavene TicTacToe, Sokoban, Sudoku og Sudoku Battleship, hvor en skal gjøre rutenettet observerbart og implementere et par grensesnitt, så spillogikken kan kobles til et ferdig skrevet grafisk brukergrensesnitt. I tillegg skal spillet utvides med ekstra funksjonalitet. |
I denne oppgaven skal spillogikken og (det innkapslede) rutenettet fra tidligere spill kobles til et ferdig skrevet grafisk brukergrensesnitt (GUI). Det samme GUI-et skal kunne fungere mot mange spill og realiseringsteknikker, og den beste måten å gjøre det på er å definere spesifikke grensesnitt som brukergrensesnittet kan forutsette er implementert. De ulike grensesnittene svarer til ulik type funksjonalitet som (må) finnes i rutenettbaserte spill for å kunne kobles til et GUI.Dette er en videreføring av de samme brukergrensesnittene som ble utdelt i tidligere utgaver av spilloppgavene. Nytt for brukergrensesnittet utdelt i denne oppgaven er at de nå også skal ha mulighet for å registrere seg som lyttere på spillklassen, for å legge til rette for oppdatering av skjermbildet når det skjer endringer i tilstanden.
Filene som er nødvendig for å knytte ditt spill opp mot vårt GUI er tilgjengelig i Del 2 av denne oppgaven.
ObservableGrid- og GridListener-grensesnittene
Det første grensesnittet er knyttet til rutenettdata og heter GridProvider ObservableGrid. Tanken er at GUI-et må kunne spørre rutenettet om dimensjoner og innhold og kunne registrere seg som lytter, slik at det holdes oppdatert når rutenettet endres. Dette er observert-delen av observatør-observert-teknikken. Observatør-delen av observatør-observert-teknikken utgjøres av GridListener-grensesnittet, og siden det er GUI-et som skal holdes oppdatert, så er det den ferdigimplementerte GUI-klassen som må implementere GridListener. GUI-klassen utdelt i Del 2 av denne oppgaven implementerer allerede GridListener, så det er kun nødvendig å la din spillklasse implementere ObservableGrid og samt skrive logikken for å varsle registrerte GridListener-objekter når det skjer endringer i rutenettet.
| ObservableGrid har følgende metoder for lytterhåndtering: Metodene i GridProvider er som følger:
GridListener har kun én Lytterne må implementere GridListener og dermed følgende metode:
Hvis f.eks. metoden kalles med x=1, y=2, w=2 og h=1, så angir det at rutene 1,2 og 2,2 er endret. Merk at selv om en kaller denne metoden, så er det ikke dermed sagt at alle rutene i det angitte rektangelet er endret, det betyr bare at en eller flere (eller ingen!) ruter i dette rektangelet kan det være endret.Det er opp til rutenett-klassen å avgjøre om endringer av flere ruter rapporteres med ett eller flere kall til gridChanged-metoden. DersomSå endringer i rutene 1,2 og 2,2 er endret, såkan detogså rapporteres med to kall hvor både w=1 og h=1, ett hvor x=1, y=2 og ett hvor x=2, y=2, med w=1 og h=1 for begge. Så selv om en kaller denne metoden, så er det ikke dermed sagt at alle rutene i det angitte rektangelet er endret (strengt tatt trenger ingen å være det).
|
For denne delen av oppgaven trenger du følgende filer:
imagegrid/GridListener.java og imagegrid/ObservableGrid.java
Del 2: Utvidelse av spillet
I denne deloppgaven skal spillet utvides med ny funksjonalitet. Hva denne funksjonaliteten består i avhenger av hvilket spill du har valgt å implementere. Dette er beskrevet på egne sider for hvert spill:
- Sokoban - Del 3
- Sudoku - Del 3
- TicTacToe - Del 3
- Battleship - Del 3
- Selvvalgt spill: gjør en utvidelse av spillet ditt med en arbeidsmengde omtrent tilsvarende utvidelsen av de andre spillene.
Filene som er nødvendige for å kjøre det forhåndsskrevne GUI-et er tilgjengelig på disse ulike oppgavesidene. Siden det er GUI-et som styrer showet, så er det klassen <spill>FX.java som skal startes ved kjøring av spillet ditt.I denne oppgaven inngår en del grensesnitt som må forstås og evt. implementeres. Disse