From 170fa376c56de4f7ae4f5571c32627f09c32aabd Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Tue, 25 Mar 2025 10:59:32 -0700 Subject: [PATCH] complete lab 10 --- src/ca/bcit/comp1510/lab10/Collisions.java | 51 +++++++++++++++ src/ca/bcit/comp1510/lab10/DrunkWalker.java | 69 ++++++++++++++++++++ src/ca/bcit/comp1510/lab10/RandomWalker.java | 16 +++++ 3 files changed, 136 insertions(+) create mode 100644 src/ca/bcit/comp1510/lab10/Collisions.java create mode 100644 src/ca/bcit/comp1510/lab10/DrunkWalker.java diff --git a/src/ca/bcit/comp1510/lab10/Collisions.java b/src/ca/bcit/comp1510/lab10/Collisions.java new file mode 100644 index 0000000..20bb4db --- /dev/null +++ b/src/ca/bcit/comp1510/lab10/Collisions.java @@ -0,0 +1,51 @@ +package ca.bcit.comp1510.lab10; + +/** + * Collisions between RandomWalkers. + * @author Braeden Sowinski + * @version 1.0.0 + */ +public class Collisions { + + /** + * samePosition detects if two RandomWalkers + * share the same coordinates. + * @param a RandomWalker + * @param b RandomWaler + * @return boolean of matching coordinates + */ + public static boolean samePosition(RandomWalker a, RandomWalker b) { + return a.getX() == b.getX() && a.getY() == b.getY(); + } + + /** + * main program entry. + * @param args unused + */ + public static void main(String[] args) { + final int bound = 2000000; + final int steps = 100000; + + final int x1 = -3; + final int y1 = 0; + final int x2 = 3; + final int y2 = 0; + + RandomWalker w1 = new RandomWalker(steps, x1, y1, bound); + RandomWalker w2 = new RandomWalker(steps, x2, y2, bound); + + boolean collided = false; + int stepsTaken = 0; + + for (int i = 0; i < steps && !collided; i++) { + w1.takeStep(); + w2.takeStep(); + collided = samePosition(w1, w2); + stepsTaken++; + } + + String message = collided ? "Collision!" : "No Collision."; + System.out.println(message); + System.out.println("After " + stepsTaken + " steps"); + } +} diff --git a/src/ca/bcit/comp1510/lab10/DrunkWalker.java b/src/ca/bcit/comp1510/lab10/DrunkWalker.java new file mode 100644 index 0000000..971a1f6 --- /dev/null +++ b/src/ca/bcit/comp1510/lab10/DrunkWalker.java @@ -0,0 +1,69 @@ +package ca.bcit.comp1510.lab10; + +import java.util.Scanner; + +/** + * DrunkWalker stuff. + * @author Braeden Sowinski + * @version 1.0.0 + */ +public class DrunkWalker { + + /** + * readValidInt reads and validates an integer. + * @param msg to print; + * @param scan to read input + * @return validated int + */ + private static int readValidInt(String msg, Scanner scan) { + int number = 0; + boolean valid = false; + + do { + System.out.print(msg); + + if (!scan.hasNextInt()) { + System.out.println(scan.next() + " is not a valid number.\n"); + continue; + } + + number = scan.nextInt(); + valid = true; + + } while (!valid); + + return number; + } + + /** + * main program entry. + * @param args unused + */ + public static void main(String[] args) { + + Scanner scan = new Scanner(System.in); + + int steps = readValidInt("Enter a maximum number of steps: ", scan); + int bound = readValidInt("Enter a boundary size: ", scan); + int simulations = readValidInt("Enter a number of simulations: ", scan); + + scan.close(); + + int fallen = 0; + + for (int i = 0; i < simulations; i++) { + RandomWalker drunk = new RandomWalker(steps, bound); + drunk.walk(); + if (!drunk.inBounds()) { + fallen++; + } + } + + System.out.println( + fallen + + "/" + + simulations + + " drunk walkers have fallen." + ); + } +} diff --git a/src/ca/bcit/comp1510/lab10/RandomWalker.java b/src/ca/bcit/comp1510/lab10/RandomWalker.java index d3f4f99..b2c6a99 100644 --- a/src/ca/bcit/comp1510/lab10/RandomWalker.java +++ b/src/ca/bcit/comp1510/lab10/RandomWalker.java @@ -146,4 +146,20 @@ public class RandomWalker { public int getMaximumDistance() { return this.maximumDistance; } + + /** + * getX coordinate. + * @return x + */ + public int getX() { + return this.x; + } + + /** + * getY coordinate. + * @return y + */ + public int getY() { + return this.y; + } }