Skip to content
Snippets Groups Projects
Commit 7f287dcf authored by owner's avatar owner
Browse files

Homework 3

parent f12cd243
No related branches found
No related tags found
No related merge requests found
......@@ -11,9 +11,13 @@ import edu.nps.moves.dis7.enumerations.*;
import edu.nps.moves.dis7.pdus.*;
import edu.nps.moves.dis7.utilities.DisChannel;
import edu.nps.moves.dis7.utilities.PduFactory;
import static java.lang.Math.max;
import static java.lang.Math.min;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
......@@ -205,7 +209,7 @@ public class LennonSimulationProgram
{
try
{
final int SIMULATION_MAX_LOOP_COUNT = 10; // set number of turns in the game also avoid infinite loops.
final int SIMULATION_MAX_LOOP_COUNT = 10; // set number of turns in the game; also avoid infinite loops.
int simulationLoopCount = 0; // variable, initialized at 0
boolean simulationComplete = false; // sentinel variable as termination condition, are we done yet?
final int NUMBER_MINES = 5; // preset number of mines to be placed
......@@ -217,12 +221,36 @@ public class LennonSimulationProgram
// ===================================================================================================
// loop the simulation while allowed, programmer can set additional conditions to break out and finish
Random random = new Random();
Scanner scanner = new Scanner(System.in);
List<double[]> minefield = new ArrayList<>();
//set start point at (0,0)
entityStatePdu_1.getEntityLocation().setX(0.0);
entityStatePdu_1.getEntityLocation().setY(0.0);
double[] start = {entityStatePdu_1.getEntityLocation().getX(), entityStatePdu_1.getEntityLocation().getY()};
//exit square is somewhere on the middle third of the far right edge of the minefield (space 3-6)
double exitY = random.nextInt(4)+3;
double[] exit = {9, exitY};
for (int i = 0; i < NUMBER_MINES; i++){
//double x = Random.nextInt();
//double[] mine = []
//random placement of the mines within the 10x10 grid
double x = random.nextInt(10);
double y = random.nextInt(10) ;
double[] mine = {x,y};
//No mine placed at the start position or on the exit space
if ((mine[0] == start[0] && mine[1] == start[1]) || (mine[0] == exit[0] && mine[1] == exit[1])){
continue;
}
//add mines to the minefield list
minefield.add(mine);
}
System.out.println("You are in a minefield. The exit is at (" + exit[0] + ", " + exit[1] +
"). \nWhen prompted, use the WASD keys to pick a move. \nCareful, there's a time limit, and plenty of mines!");
System.out.flush();
while (simulationLoopCount < SIMULATION_MAX_LOOP_COUNT) // are we done yet?
{
simulationLoopCount++; // good practice: increment loop counter as first action in that loop
......@@ -230,10 +258,33 @@ public class LennonSimulationProgram
// =============================================================================================
// * your own simulation code starts here! *****************************************************
// =============================================================================================
System.out.println("\nCurrent Location: (" + entityStatePdu_1.getEntityLocation().getX()+","+ entityStatePdu_1.getEntityLocation().getY() + "); Exit: (" + exit[0] + ", " + exit[1] + ").");
System.out.println("Move "+ simulationLoopCount+ "of " + SIMULATION_MAX_LOOP_COUNT + ". Where would you like to move now?" );
// are there any other variables to modify at the beginning of your loop?
// are your reading any DIS PDUs from the network? check for them here
boolean validMove = false;
String move = null;
while (!validMove){
move = scanner.nextLine().toUpperCase();
switch(move){
case("W") -> {
entityStatePdu_1.getEntityLocation().setY(min(9.0, entityStatePdu_1.getEntityLocation().getY() + 1.0));
validMove = true;
}
case("A") -> {
entityStatePdu_1.getEntityLocation().setX(max(0.0, entityStatePdu_1.getEntityLocation().getX() - 1.0));
validMove = true;
}
case("S") -> {
entityStatePdu_1.getEntityLocation().setY(max(0.0, entityStatePdu_1.getEntityLocation().getY() - 1.0));
validMove = true;
}
case("D") -> {
entityStatePdu_1.getEntityLocation().setX(min(9.0, entityStatePdu_1.getEntityLocation().getX() + 1.0));
validMove = true;
}
default -> System.out.println("Not a valid move. Try again");
}
}
// compute a track, update an ESPDU, whatever it is that your model is doing...
......@@ -250,15 +301,34 @@ public class LennonSimulationProgram
// make your reports: narrative code for CommentPdu here (set all to empty strings to avoid sending)
narrativeMessage1 = "MV3500 ExampleSimulationProgram";
narrativeMessage1 = "MV3500 LennonSimulationProgram";
narrativeMessage2 = "runSimulation() loop " + simulationLoopCount;
narrativeMessage3 = ""; // intentionally blank for testing
// your loop termination condition goes here
if (simulationLoopCount > MAX_LOOP_COUNT) // for example
//Check for entity to reach exit
if (entityStatePdu_1.getEntityLocation().getX() == exit[0] && entityStatePdu_1.getEntityLocation().getY() == exit[1]){
System.out.println("You've escaped the minefield. Good job.");
narrativeMessage3 = "Entity escaped successfully.";
simulationComplete = true;
}
//Check for turn limit reached
else if (simulationLoopCount >= SIMULATION_MAX_LOOP_COUNT)
{
System.out.println("You've run out of time. You lose.");
narrativeMessage3 = "Entity ran out of time.";
simulationComplete = true;
}
}
//Check for entity to hit mine
for (double[] mine : minefield){
if (entityStatePdu_1.getEntityLocation().getX() == mine[0]&& entityStatePdu_1.getEntityLocation().getY() == mine[1]){
System.out.println("BOOM! you hit a mine. You're dead.");
narrativeMessage3 = "Entity hit a mine and was destroyed.";
simulationComplete = true;
}
}
// =============================================================================================
// * your own simulation code is finished here! ************************************************
// =============================================================================================
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment