diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2025-10-09 21:03:25 -0400 |
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2025-10-09 21:03:25 -0400 |
| commit | 5f1ea0ee335a73edf53939b87218a34e93fe4de9 (patch) | |
| tree | 077878354a1c17dca986a843d9ecfb9f8169e3b2 /src/main/java/design/controller/userinput/menus/CourseSelectMenu.java | |
| parent | 1eca2f8681752ad359e8372780cdf719e2b1747d (diff) | |
| download | designproject-design-6-5f1ea0ee335a73edf53939b87218a34e93fe4de9.tar.gz designproject-design-6-5f1ea0ee335a73edf53939b87218a34e93fe4de9.tar.bz2 designproject-design-6-5f1ea0ee335a73edf53939b87218a34e93fe4de9.zip | |
Menu cleanup - pass 1
Diffstat (limited to '')
| -rw-r--r-- | src/main/java/design/controller/userinput/menus/CourseSelectMenu.java | 96 |
1 files changed, 32 insertions, 64 deletions
diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java index af825e0..581b0b9 100644 --- a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java +++ b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java @@ -3,18 +3,19 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; import design.model.Course; +import design.model.Golfer; import design.model.Hole; import design.model.Round; import java.time.LocalDateTime; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Scanner; -import design.persistence.MasterDatabase; import design.runtime.Session; public class CourseSelectMenu extends Menu { + Golfer golfer = Session.getCurrentGolfer(); @Override public String getTitle() { @@ -23,78 +24,45 @@ public class CourseSelectMenu extends Menu { @Override public List<MenuOption> getMenuOptions() { - List<MenuOption> opts = new ArrayList<>(); - - // 0) back - opts.add(new MenuOption("back to main menu", () -> new MainMenu().present())); - - // 1) go to CourseSearchMenu to search for a course and add it profile - opts.add(new MenuOption("Add Course to Profile", () -> new MainMenu().present())); - - // 2) pick course from MY PROFILE only - opts.add(new MenuOption("pick course from my profile", () -> { - var golfer = Session.getCurrentGolfer(); - Course[] mine = (golfer == null) ? new Course[0] : golfer.getCourses(); - - // Checks user has courses of not informs them to add one to there profile - if (mine == null || mine.length == 0) { - System.out.println("You don't have any courses saved to your profile yet."); - System.out.println("Use the 'Add Course to Profile' menu first."); - this.present(); - return; - } - // Select a course - Scanner sc = new Scanner(System.in); + return Arrays.stream(golfer.getCourses()) + .map(i -> new MenuOption(i.toString(), () -> promptHole(i))) + .toList(); + } - // Prints all courses - System.out.println("-- MY COURSES --"); - for (int i = 0; i < mine.length; i++) { - Course c = mine[i]; - System.out.printf("%d: %s (%s) | Holes: %d | Total Par: %d | Difficulty: %.1f%n", - i + 1, c.getName(), c.getLocation(), c.getHoleCount(), c.getTotalPar(), - c.getDifficultyRating()); - } - // Select course by number - Course selected = null; - while (selected == null) { - System.out.print("Select course # (1.." + mine.length + "): "); - String line = sc.nextLine().trim(); - int idx = Integer.parseInt(line); - if (idx < 1 || idx > mine.length) { - System.out.println("Out of range. Try again."); - continue; - } - selected = mine[idx - 1]; - } - // Gets starting hole on course - int startHoleNum = readStartingHole(sc, selected.getHoleCount()); - // Starts round and sends user to HolePlayMenu - startRound(selected, startHoleNum); - })); + @Override + public void present() { + // Checks user has courses of not informs them to add one to there profile + if (golfer.getCourses().length == 0) { + System.out.println("You don't have any courses saved to your profile yet."); + System.out.println("Use the 'Add Course to Profile' menu first."); + new MainMenu().present(); + return; + } - return opts; + super.present(); } - private int readStartingHole(Scanner sc, int holeCount) { + private void promptHole(Course selected) { + Scanner sc = new Scanner(System.in); + // Gets starting hole on course + int startHoleNum = 1; + int holeCount = selected.getHoleCount(); // Asks for a hole number until a valid number is selected - while (true) { - System.out.print("Starting hole (1.." + holeCount + ", blank=1): "); - String s = sc.nextLine().trim(); - if (s.isEmpty()) - return 1; + System.out.print("Starting hole (1.." + holeCount + ", blank=1): "); + String s = sc.nextLine().trim(); + if (!s.isEmpty()) { int start = Integer.parseInt(s); if (start < 1 || start > holeCount) { System.out.println("Starting hole must be between 1 and " + holeCount + "."); - continue; + return; } - return start; + startHoleNum = start; } - } - - private void startRound(Course c, int startHoleNum) { - Hole startHole = c.getHoles().get(startHoleNum - 1); - Round r = new Round(c, LocalDateTime.now(), startHole); - Session.getCurrentGolfer().addRound(r); + // Starts round and sends user to HolePlayMenu + Hole startHole = selected.getHoles().get(startHoleNum - 1); + Round r = new Round(selected, LocalDateTime.now(), startHole); + golfer.addRound(r); new HolePlayMenu(r).present(); } + } |
