...
PlantUML Macro |
---|
class MemoryProgram { } class Memory { -List<Integer> expectedItems -int acceptedCount +int nextItem() +Boolean acceptItem(int) } MemoryProgram -right-> Memory: memory |
Med Memory-klassen på plass, er det lettere å skrive hovedprogram-klassen MemoryProgram, siden den kan bygge på tjenestene som Memory tilbyr og heve seg litt over detaljer om datarepresentasjon. Som nevnt over er spillet hovedsaklig en dobbel løkke, hvor den ytre forlenger tallsekvensen med et nytt element og den indre ber om et nytt tall inntil brukeren skriver feil eller har skrevet inn alle tallene i sekvensen. Dersom en skal kunne spille flere spill i samme slengen, så legges enda en løkke utenpå der igjen, som kjører gjennom ett spill og spør om en vil prøve på nytt. Her er koden:
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().trim());
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().trim().equals("ja")); // repeat as long as the user wants to play another game
scanner.close(); |
Dette er ren prosedyre-orientert kode og må plasseres inn i en metode i hovedprogram-klassen MemoryProgram.