diff options
Diffstat (limited to '')
| -rw-r--r-- | src/main/java/design/controller/userinput/menus/HolePlayMenu.java | 58 |
1 files changed, 43 insertions, 15 deletions
diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java index 48fff4e..aee6dd7 100644 --- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java +++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java @@ -2,12 +2,15 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; +import design.model.Course; +import design.model.Hole; import design.runtime.Session; import design.model.Club; import design.model.Round; import design.model.holeplay.HolePlayContext; import design.persistence.PersonalDatabase; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Scanner; @@ -17,8 +20,8 @@ public class HolePlayMenu extends Menu { private final Round round; private final HolePlayContext ctx; - public HolePlayMenu(Round round) { - this.round = round; + public HolePlayMenu() { + this.round = createRound(); this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, PersonalDatabase.INSTANCE); } @@ -44,19 +47,9 @@ public class HolePlayMenu extends Menu { } else { // 0) Take a shot opts.add(new MenuOption("take a shot", () -> { - // loads golfers clubs - var golfer = Session.getCurrentGolfer(); - - if (!golfer.hasClubs()) { - System.out.println("You don't have any clubs yet. Add one first."); -// new AddClubMenu().present(); - this.present(); - return; - } - - var selectClub = new SelectClub(golfer); - selectClub.present(); - Club club = selectClub.getResult(); + var selector = new SelectClub(); + selector.present(); + Club club = selector.getResult(); Scanner sc = new Scanner(System.in); @@ -94,4 +87,39 @@ public class HolePlayMenu extends Menu { return opts; } + + private static Round createRound() { + var golfer = Session.getCurrentGolfer(); + + var selector = new SelectCourse(); + selector.present(); + Course course = selector.getResult(); + + Scanner sc = new Scanner(System.in); + // Gets starting hole on course + int startHoleNum = 1; + int holeCount = course.getHoleCount(); + // Asks for a hole number until a valid number is selected + System.out.print("Starting hole (1.." + holeCount + ", blank=1): "); + String s = sc.nextLine().trim(); + if (!s.isEmpty()) { + int start; + try { + start = Integer.parseInt(s); + } catch (NumberFormatException ex) { + System.out.println("Input must be a number"); + return createRound(); + } + if (start < 1 || start > holeCount) { + System.out.println("Starting hole must be between 1 and " + holeCount + "."); + return createRound(); + } + startHoleNum = start; + } + // Starts round and sends user to HolePlayMenu + Hole startHole = course.getHoles().get(startHoleNum - 1); + Round r = new Round(course, LocalDateTime.now(), startHole); + golfer.addRound(r); + return r; + } } |
