summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller/userinput/menus
diff options
context:
space:
mode:
authorMichael Lizzio <mjl2396@rit.edu>2025-10-05 16:42:54 -0400
committerMichael Lizzio <mjl2396@rit.edu>2025-10-05 16:42:54 -0400
commit042c456a542a60262e71f694fa21e0dfcfc25f3a (patch)
tree9a9fc9b17db70a280f32949e423c7138bd0a69fd /src/main/java/design/controller/userinput/menus
parent204654ad4a69677e9f38308344760ddb33316758 (diff)
downloaddesignproject-design-6-042c456a542a60262e71f694fa21e0dfcfc25f3a.tar.gz
designproject-design-6-042c456a542a60262e71f694fa21e0dfcfc25f3a.tar.bz2
designproject-design-6-042c456a542a60262e71f694fa21e0dfcfc25f3a.zip
Completed HolePlayMenu and basic CourseSelectionMenu, minal updates to other classes
Diffstat (limited to 'src/main/java/design/controller/userinput/menus')
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSelectMenu.java50
-rw-r--r--src/main/java/design/controller/userinput/menus/HolePlayMenu.java88
-rw-r--r--src/main/java/design/controller/userinput/menus/MainMenu.java6
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectUser.java12
4 files changed, 150 insertions, 6 deletions
diff --git a/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
new file mode 100644
index 0000000..cf6f4b1
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/CourseSelectMenu.java
@@ -0,0 +1,50 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+import design.controller.userinput.Session;
+import design.model.Course;
+import design.model.Hole;
+import design.model.Round;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class CourseSelectMenu extends Menu {
+
+ @Override
+ public String getTitle() {
+ return "course select";
+ }
+
+ @Override
+ public List<MenuOption> getMenuOptions() {
+ List<MenuOption> opts = new ArrayList<>();
+
+ // 0) pick course by number TODO: add error checking
+ opts.add(new MenuOption("pick course by number (1..1000)", a -> {
+ Scanner sc = new Scanner(System.in);
+
+ System.out.print("Course number (1..1000): ");
+ int n = Integer.parseInt(sc.nextLine().trim());
+ Course c = Session.MDB.getCourse(n - 1);
+
+ System.out.print("Starting hole (1..18, blank=1): ");
+ String s = sc.nextLine().trim();
+ int start = s.isEmpty() ? 1 : Integer.parseInt(s);
+
+ Hole startHole = c.getHoles().get(start - 1);
+
+ Round r = new Round(c, LocalDateTime.now(), startHole);
+ Session.getCurrentGolfer().addRound(r);
+ new HolePlayMenu(r).present();
+ }));
+
+ // 1) back
+ opts.add(new MenuOption("back to main menu", a -> new MainMenu().present()));
+
+ return opts;
+ }
+}
diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
new file mode 100644
index 0000000..63447e2
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
@@ -0,0 +1,88 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+import design.controller.userinput.Session;
+import design.model.Club;
+import design.model.Round;
+import design.model.holeplay.HolePlayContext;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class HolePlayMenu extends Menu {
+
+ private final Round round;
+ private final HolePlayContext ctx;
+
+ public HolePlayMenu(Round round) {
+ this.round = round;
+ this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, Session.PDB);
+ }
+
+ @Override
+ public String getTitle() {
+ return String.format("hole play - %s | hole %d", round.getCourse().getName(),
+ round.getCurrentHole().getNumber());
+ }
+
+ @Override
+ public List<MenuOption> getMenuOptions() {
+ List<MenuOption> opts = new ArrayList<>();
+
+ boolean inSetup = (ctx.getCurrentPlay() == null);
+
+ if (inSetup) {
+ // 0) Start hole
+ opts.add(new MenuOption("start hole", (a) -> {
+ ctx.startHole();
+ System.out.println("Started hole " + round.getCurrentHole().getNumber() + ".");
+ this.present();
+ }));
+ } else {
+ // 0) Take a shot
+ opts.add(new MenuOption("take a shot", (a) -> {
+ // Gets club
+ Scanner sc = new Scanner(System.in);
+ System.out.print("Club nickname: ");
+ String nick = sc.nextLine().trim();
+ // Defaulted to Driver for now
+ // TODO update logic
+ Club club = new Club("Generic", nick, Club.ClubType.DRIVER);
+
+ // Get shot distance (defaults to 0 of not stated)
+ System.out.print("Distance (yds, blank=0): ");
+ String ds = sc.nextLine().trim();
+ int dist = 0;
+ if (!ds.isEmpty()) {
+ dist = Integer.parseInt(ds);
+ }
+
+ // Records shot
+ ctx.recordShot(club, dist);
+ System.out.println("Shot recorded: " + dist + " yds with " + club.getNickname());
+
+ this.present();
+ }));
+
+ // 1) Hole out
+ opts.add(new MenuOption("hole out", (a) -> {
+ // Precedes to next hole
+ int prev = round.getCurrentHole().getNumber();
+ ctx.holeOut();
+ System.out.println("Holed out on " + prev + ". Next: " + round.getCurrentHole().getNumber());
+ this.present();
+ }));
+ }
+
+ // End round (always shown)
+ opts.add(new MenuOption("end round", (a) -> {
+ ctx.endRoundNow();
+ System.out.println("Round ended.");
+ new MainMenu().present();
+ }));
+
+ return opts;
+ }
+}
diff --git a/src/main/java/design/controller/userinput/menus/MainMenu.java b/src/main/java/design/controller/userinput/menus/MainMenu.java
index fb3cee9..bbf008e 100644
--- a/src/main/java/design/controller/userinput/menus/MainMenu.java
+++ b/src/main/java/design/controller/userinput/menus/MainMenu.java
@@ -16,8 +16,8 @@ public class MainMenu extends Menu {
return List.of(
new MenuOption("user settings...", (a) -> new UserSettings().present()),
new MenuOption("statistics...", (a) -> new StatisticsMenu().present()),
- new MenuOption("log round...", (a) -> {}),
- new MenuOption("quit", (a) -> {})
- );
+ new MenuOption("log round...", (a) -> new CourseSelectMenu().present()),
+ new MenuOption("quit", (a) -> {
+ }));
}
}
diff --git a/src/main/java/design/controller/userinput/menus/SelectUser.java b/src/main/java/design/controller/userinput/menus/SelectUser.java
index 1963f1d..d93e687 100644
--- a/src/main/java/design/controller/userinput/menus/SelectUser.java
+++ b/src/main/java/design/controller/userinput/menus/SelectUser.java
@@ -2,6 +2,7 @@ package design.controller.userinput.menus;
import design.controller.userinput.Menu;
import design.controller.userinput.MenuOption;
+import design.controller.userinput.Session;
import design.persistence.PersonalDatabase;
import java.util.ArrayList;
@@ -19,9 +20,14 @@ public class SelectUser extends Menu {
@Override
public List<MenuOption> getMenuOptions() {
var l = new ArrayList<MenuOption>();
- l.addAll(Arrays.stream(personalDB.getGolfers())
- .map(i -> new MenuOption(i.getUsername(), (a) -> {})).toList());
- l.add(new MenuOption("<create>", (a) -> {}));
+ // Sets user in Session too
+ l.addAll(Arrays.stream(personalDB.getGolfers()).map(i -> new MenuOption(i.getUsername(), (a) -> {
+ Session.setCurrentGolfer(i);
+ System.out.printf("Loaded user: %s%n", i.getUsername());
+ new UserSettings().present();
+ })).toList());
+ l.add(new MenuOption("<create>", (a) -> {
+ }));
return l;
}
}