Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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.