void drawGameOver() { background(#000000); textAlign(CENTER, CENTER); drawGrid(); fill(#AA000000); noStroke(); rectMode(CORNER); rect(0, 0, width, height); fill(#FFFFFF); if (selectedLevel < levels.length - 1) { textFont(headingFont); text("You solved this level!", width / 2, height / 4); textFont(textFont); text("You used " + moves.size() + " moves.\n\nPress enter to play next level.\nPress space to play this level again.\nPress l to select a different level.", width / 2, height / 2); } else { textFont(headingFont); text("You solved all levels!", width / 2, height / 4); textFont(textFont); text("You used " + moves.size() + " moves.\n\nPress space to play this level again.\nPress l to select a different level.", width / 2, height / 2); } textAlign(CENTER, BOTTOM); textFont(smallFont); text("Your Solution (" + moves.size() + " moves):\n" + formatMoves(join(moves.array(), ""), 60), width / 2, height - 10); } void keyPressedGameOver() { if (keyCode == ENTER) { if (selectedLevel < levels.length - 1) { selectedLevel++; startGame(selectedLevel); } } else if (key == ' ') { startGame(selectedLevel); } else if (key == 'l') { gameState = GAME_LEVEL_SELECT; } } String formatMoves(String moves, int maxLength) { StringList parts = new StringList(); while (moves.length() > maxLength) { parts.push(moves.substring(0, maxLength)); moves = moves.substring(maxLength); } parts.push(moves); parts.upper(); return join(parts.array(), "\n"); }