Excerpt |
---|
Memory er et spill hvor en prøver å huske og gjenta en så lang sekvens som mulig med tall, bilder eller andre "objekter". Sekvensen blir lengre og lengre og spillet fortsetter helt til en gjentar den feil. Dette kodeeksemplet viser hvordan vi kan implementere en enkel tekstlig versjon av spillet. |
Selv om et slikt enkelt spill kan implementeres med én klasse, så legger vi opp til en klassisk todeling i én hovedprogram-klasse, som håndterer kommunikasjone med brukeren, og én logikk-klasse, som håndterer spill-logikken. Dersom logikk-klassen gjøres anvendelig og generell nok, vil en senere kunne gjenbruke den i en grafisk versjon. Todelingen illustreres under med et objektdiagram:
...
|
|
...
Code Block |
---|
Scanner scanner = new Scanner(System.in); do { Memory memory = new Memory(); // new game instance while (true) { // repeat as long as the user does not make a mistake int nextItem = memory.nextItem(); // extend sequence with another value System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); // scroll previous dialog away System.out.println("Element nr. " + memory.getItemCount() + " er " + nextItem); Boolean result = null; do { // get another number from the user System.out.println("Gjenta element nr. " + (memory.getAcceptedCount() + 1) + " av " + memory.getItemCount()); int nextInt = Integer.valueOf(scanner.nextLine().trimnextInt()); result = memory.acceptItem(nextInt); // check item } while (result == null); // repeat until there is a definite result, either a mistake or a complete and correct sequence if (result == Boolean.FALSE) { // if the user made a mistake, break out of loop System.out.println("Feil, den lengste sekvensen du klarte var på " + (memory.getItemCount() - 1) + " elementer."); break; } } System.out.println("Vil du prøve på nytt (ja/nei)?"); } while (scanner.nextLine().trimnext().equals("ja")); // repeat as long as the user wants to play another game scanner.close(); |
...
Code Block |
---|
public class MemoryProgram { private Memory memory; public void init() { memory = privatenew Memory(); // new game instance } public void run() { ... // insert the code above } // entry point for Java program public static void main(String[] args) { new MemoryProgram().run(); // instantiate program object and call its run() method } } |
I versjon 2 av Memory-programmet så ser vi på hvordan koden kan gjøres litt mer generell og gjenbrukbar. I versjon 3 bytter vi ut det tekstlige brukergrensesnittet med et minimalistisk grafisk grensesnitt bygget på JavaFX-rammeverket. Dette videreutvikles i versjon 4 til et rikere brukergrensesnitt, hvor flere JavaFX-mekanismer prøves ut.