PlantUML Macro |
---|
interface GridGame {
public void init(String level)
public void run(GameOutput output)
public Integer doCommand(String command)
public GridProvider getGridProvider()
public String getTextFor(Object)
public String getImageFor(Object o)
public Integer gridElementSelected(int x, int y)
}
interface GameOutput {
public void info(String message)
public void warning(String message)
public void error(String message)
}
class DittRutenettspill {
}
class GridGameImpl {
}
GridGame <|-- DittRutenettspill
DittRutenettspill --> GameOutput: gridOutput
GameOutput <|-- GridGameImpl
GridGameImpl --> GridGame: gridGame |
Code Block |
---|
language | java |
---|
title | GridGame- og GameOutput-grensesnittene |
---|
collapse | true |
---|
| public interface GridGame {
/**
* Loads and initializes the game to a (new) specified level. The String can be anything, e.g. a file name or a String encoding a level.
* Note that there should be no output at this point.
* @param level the String decribing a level, e.g. path or URL
*/
public void init(String level);
/**
* Start the game (that was just initialized with init) and use the argument for all game output
* @param output the object used for providing text-based output to the user (messages, warnings and errors)
*/
public void run(GameOutput output);
/**
* Perform a command (line). This method may update the underlying grid and provide output to the user using the GameOutput object given to.
* @param command
* @return
*/
public Integer doCommand(String command);
/**
* Returns the object that encapsulates the underlying grid.
* @return the object that encapsulates the underlying grid
*/
public GridProvider getGridProvider();
/**
* Returns the locationtext (URLlabel) or file) of the image corresponding to the provided grid elementcorresponding to the provided grid element, or null of there is none.
* @param o the object
* @return the locationtext (URL or file) of the image label) corresponding to the provided grid element
*/
public String getImageForgetTextFor(Object o);
/**
* PerformReturns anthe actionlocation corresponding(URL toor selectingfile) aof gridthe element.image Thiscorresponding methodto may update the underlyingprovided grid andelement, provideor outputnull toof thethere user using the GameOutput object given tois none.
* @param o commandthe object
* @return
the location (URL or */
file) of the image publiccorresponding Integerto gridElementSelected(int x, int y);
}
public interface GameOutput {the provided grid element
*/
public String getImageFor(Object o);
/**
* OutputsPerform an aaction messagecorresponding to user, e.g. selecting a statusgrid update.
* @param message the message
*/element. This method may update the underlying grid and provide output to the user using the GameOutput object given to.
public void* info(String message);@param command
*/**
public *void Outputs a message to user, with a style indicating it is a warning.gridElementSelected(int x, int y);
/**
* @paramPerform messagean theaction warningcorresponding message
to moving in a certain */
direction. This method may publicupdate voidthe warning(String message);
/**
* Outputs a message to user, with a style indicating it is an errorunderlying grid and provide output to the user using the GameOutput object given to.
* @param message the error messagecommand
*/
public void errordirectionInput(String message);
}int dx, int dy);
}
public interface GameOutput {
/**
* Outputs a message to user, e.g. a status update.
* @param message the message
*/
public void info(String message);
/**
* Outputs a message to user, with a style indicating it is a warning.
* @param message the warning message
*/
public void warning(String message);
/**
* Outputs a message to user, with a style indicating it is an error.
* @param message the error message
*/
public void error(String message);
} |
| Det er GUI-et som lager en instans av spillklassen og styrer oppstart og utvikling av spillet, dvs. laster inn et nytt nivå eller bra, setter spillet igang og driver det fremover ved å ta imot input fra brukeren og videreformidle det til spillet. Spillklassen din må innordne seg hvordan GUI-et gjør dette, ved å tilby et standard sett med metoder definert i GridGame-grensesnittet. De viktigste metodene er knyttet til den overordnede livssyklusen til spillet: - void init(String) - denne metoden kalles av GUI-et for å initialisere et nytt spill, men uten at det settes igang. Argumentet er ment å angi et nivå, brett eller det som gir mening for spillet ditt. Det kan f.eks. være en nettadresse hvor nivået ligger, nivået koden direkte i en String eller dimensjonene til et brett. Det er brukeren som skriver String-argumentet inn, og det er opp til implementasjonen av metoden å tolke og bruke det.
- GridProvider getGridProvider() - denne metoder returnerer objektet som representerer selve rutenettet, som ble initialisert av init-metoden. Ved hjelp av dette objektet, kan GUI-et vise frem rutenettet og registrere seg som lytter for å få beskjed om endringer i rutenettet.
- void run(GameOutput) - denne metoden setter igang spillet. Argumentet er et objekt som spillet må huske og som under spillets gang kan brukes for å gi meldinger og statusoppdateringer til brukeren. (I praksis er dette objektet GUI-et selv, og GUI-ets implementasjon av GameOutput-metodene angjør hvordan meldinger vises til brukeren.)
- Integer doCommand(String) - det er denne metoden som driver spillet fremover ved at brukerinput formidles fra GUI-et til spillet. Argumentet er en slags kommandolinje, på et format som kan tolkes og brukes av spillet. Returverdien er spillets måte å fortelle GUI-et om spillet er ferdig og i tilfelle hva som ble resultatet. En null-verdi betyr at spillet ikke er ferdig og 0 betyr at det ikke ble noe resultat (eller uavgjort). En negativ eller positiv verdi angir hhv. tap eller seier, evt. hvilken av to spillere som vant.
Den viktigste logikken i spillet ligger typisk i doCommand-metoden, siden den håndterer input fra brukeren. Som respons vil spillet typisk endre rutenettet, og dette fanges opp av GUI-et, som lytter til rutenettendringer, og dermed kan oppdatere den grafisk visningen. I tillegg kan spillet gi meldinger og statusoppdateringer til brukeren vha. GameOutput-objektet som ble gitt til run-metoden, da spillet startet. Det er derfor dette objektet må lagres unna, slik at det er tilgjengelig for doCommand-metoden. GameOutput-objektet tilbyr tre metoder, for meldinger av ulik alvorlighetsgrad: - info(String) - viser String-argumentet som en enkelt statusoppdatering, f.eks. "x sin tur" eller "4 av 8 bokser er på plass".
- warning(String) - viser String-argumentet som et (forsiktig) varsel. f.eks. "Ulovlig trekk".
- error(String) - viser String-argumentet som et (kraftig) varsel. f.eks. "Inkonsistent brett".
Akkurat hvordan meldingen vises er opp til GUI-et, som implementerer metodene, men tanken er når alvorlighetsgraden øker, så blir meldinger mer tydelig og påtrengende. F.eks. kan info oppdatere en statuslinje, mens error åpner en meldingsdialog. GridGame har i tillegg til metodene angitt over, metoder for å angi hvordan elementene i rutenettet vises og for å håndtere ikke-tekstlig input. Tanken er at hver rute i rutenettet Det er GUI-et som lager en instans av spillklassen og styrer oppstart og utvikling av spillet, dvs. laster inn et nytt nivå eller bra, setter spillet igang og driver det fremover ved å ta imot input fra brukeren og videreformidle det til spillet. |