aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ee1301/wk5/hw5_directory/maze.txt10
-rw-r--r--ee1301/wk5/hw5_directory/mazeRunner_v1.cpp31
-rw-r--r--ee1301/wk5/hw5_directory/strap012_HW5A.cpp136
-rw-r--r--ee1301/wk5/hw5_directory/strap012_HW5B.cpp30
4 files changed, 191 insertions, 16 deletions
diff --git a/ee1301/wk5/hw5_directory/maze.txt b/ee1301/wk5/hw5_directory/maze.txt
deleted file mode 100644
index cd95590..0000000
--- a/ee1301/wk5/hw5_directory/maze.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-WWWW-O-WWW
----W------
---WWWWWW-W
-----------
-WWWWWWWWW-
-----------
--WW-WW-WW-
-----------
-WW-WW-WW-W
-X--------- \ No newline at end of file
diff --git a/ee1301/wk5/hw5_directory/mazeRunner_v1.cpp b/ee1301/wk5/hw5_directory/mazeRunner_v1.cpp
index d915549..c761e76 100644
--- a/ee1301/wk5/hw5_directory/mazeRunner_v1.cpp
+++ b/ee1301/wk5/hw5_directory/mazeRunner_v1.cpp
@@ -3,6 +3,8 @@
#include <fstream>
#include <string>
using namespace std;
+ifstream fin;
+ofstream fout;
const char BLANK = '-';
const char ROBOT = 'X';
@@ -18,7 +20,8 @@ const int lengthY = 10; // it "should" work with non-square, YMMV
// V
// +Y
-void initBoard(char board[lengthX][lengthY], int &xPos, int &yPos);
+void initBoardDefault(char board[lengthX][lengthY], int &xPos, int &yPos);
+void initBoardCustom(char board[lengthX][lengthY], int &xPos, int &yPos);
void clearScreen();
void showGrid(char board[lengthX][lengthY]);
@@ -30,9 +33,13 @@ int main()
srand(time(NULL));
char board[lengthX][lengthY] = {0};
int xPos = 0, yPos = 0;
-
- initBoard(board, xPos, yPos);
-
+ fin.open("maze.txt"); //maze.txt is in the directory that it is run in
+ if (!fin.is_open()) //If a custom maze does not exist, generate one automatically
+ {
+ initBoardDefault(board, xPos, yPos);
+ } else {
+ initBoardCustom(board, xPos, yPos);
+ }
while(hasChar(board, GOAL))
{
char action;
@@ -51,11 +58,11 @@ int main()
return 0;
}
-void initBoard(char board[lengthX][lengthY], int &xPos, int &yPos) {
+//The default (no custom file) maze is procedurally generated
+void initBoardDefault(char board[lengthX][lengthY], int &xPos, int &yPos) {
for(int curRow=0; curRow < lengthY; curRow++) {
for(int curCol=0; curCol < lengthX; curCol++) {
if ( (rand() % 5) + 1 == 4 || (rand() % 10) + 1 == 7) {
- //Procedural generation is best for a game like this even if it makes the game impossible
board[curCol][curRow] = WALL;
} else {
board[curCol][curRow] = BLANK;
@@ -71,6 +78,18 @@ void initBoard(char board[lengthX][lengthY], int &xPos, int &yPos) {
yPos = lengthY/2;
}
+void initBoardCustom(char board[lengthX][lengthY], int &xPos, int &yPos)
+{
+ for (int curRow = 0; curRow < lengthY; curRow++)
+ {
+ for (int curCol = 0; curCol < lengthX; curCol++)
+ {
+ fin >> board[curCol][curRow];
+ }
+ }
+
+}
+
bool hasChar(char board[lengthX][lengthY], char findMe) {
for(int curRow=0; curRow < lengthY; curRow++) {
for(int curCol=0; curCol < lengthX; curCol++) {
diff --git a/ee1301/wk5/hw5_directory/strap012_HW5A.cpp b/ee1301/wk5/hw5_directory/strap012_HW5A.cpp
new file mode 100644
index 0000000..95a80ad
--- /dev/null
+++ b/ee1301/wk5/hw5_directory/strap012_HW5A.cpp
@@ -0,0 +1,136 @@
+#include <iostream>
+#include <fstream>
+#include <string>
+using namespace std;
+ifstream fin;
+ofstream fout;
+
+const char BLANK = '-';
+const char ROBOT = 'X';
+const char GOAL = 'O';
+const char WALL = 'W';
+const int screen_num_lines = 25;
+const int lengthX = 10; // for now we only support square boards
+const int lengthY = 10; // it "should" work with non-square, YMMV
+// Board is described by the following coordinate system:
+// 0 --> +X
+// |
+// |
+// V
+// +Y
+
+void initBoardDefault(char board[lengthX][lengthY], int &xPos, int &yPos);
+void initBoardCustom(char board[lengthX][lengthY], int &xPos, int &yPos);
+void clearScreen();
+void showGrid(char board[lengthX][lengthY]);
+
+bool hasChar(char board[lengthX][lengthY], char findMe);
+void updateGrid(char board[lengthX][lengthY], int &xPos, int &yPos, char action);
+
+int main()
+{
+ srand(time(NULL));
+ char board[lengthX][lengthY] = {0};
+ int xPos = 0, yPos = 0;
+ fin.open("maze.txt"); //maze.txt is in the directory that it is run in
+ if (!fin.is_open()) //If a custom maze does not exist, generate one automatically
+ {
+ initBoardDefault(board, xPos, yPos);
+ } else {
+ initBoardCustom(board, xPos, yPos);
+ }
+ while(hasChar(board, GOAL))
+ {
+ char action;
+ clearScreen();
+ showGrid(board);
+ cout << "Where would you like to go? (l, r, u, d) " << endl << "Wall Boolean " << hasChar(board, GOAL) << endl;
+ cin >> action;
+
+ updateGrid(board, xPos, yPos, action);
+ }
+
+
+ clearScreen();
+ showGrid(board);
+ cout << "You found the cookie! Congratulations!\n";
+
+ return 0;
+}
+
+//The default (no custom file) maze is procedurally generated
+void initBoardDefault(char board[lengthX][lengthY], int &xPos, int &yPos) {
+ for(int curRow=0; curRow < lengthY; curRow++) {
+ for(int curCol=0; curCol < lengthX; curCol++) {
+ if ( (rand() % 5) + 1 == 4 || (rand() % 10) + 1 == 7) {
+ board[curCol][curRow] = WALL;
+ } else {
+ board[curCol][curRow] = BLANK;
+ }
+ }
+ }
+
+
+ board[0][0] = GOAL;
+ board[lengthX/2][lengthY/2] = ROBOT;
+
+ xPos = lengthX/2;
+ yPos = lengthY/2;
+}
+
+void initBoardCustom(char board[lengthX][lengthY], int &xPos, int &yPos)
+{
+ for (int curRow = 0; curRow < lengthY; curRow++)
+ {
+ for (int curCol = 0; curCol < lengthX; curCol++)
+ {
+ fin >> board[curCol][curRow];
+ if (board[curCol][curRow] == 'X') {
+ xPos = curCol;
+ yPos = curRow;
+ }
+ }
+ }
+
+}
+
+bool hasChar(char board[lengthX][lengthY], char findMe) {
+ for(int curRow=0; curRow < lengthY; curRow++) {
+ for(int curCol=0; curCol < lengthX; curCol++) {
+ if(board[curCol][curRow] == findMe) {
+ return true;
+ }
+ } //end curCol loop
+ } // end curRow loop
+
+ return false;
+}
+
+void clearScreen() {
+ for(int i = 0;i<screen_num_lines;i++) {
+ cout << endl;
+ }
+}
+
+void showGrid(char board[lengthX][lengthY]) {
+ for(int curRow=0; curRow < lengthY; curRow++) {
+ for(int curCol=0; curCol < lengthX; curCol++) {
+ cout << board[curCol][curRow];
+ } // end curCol loop
+ cout << endl;
+ } // end curRow loop
+}
+
+void updateGrid(char board[lengthX][lengthY],int & xPos, int & yPos,char action) {
+ board[xPos][yPos] = BLANK;
+ if (action == 'l' && xPos > 0) {
+ xPos--;
+ } else if(action == 'r' && xPos < lengthX - 1) {
+ xPos++;
+ } else if(action == 'u' && yPos > 0) {
+ yPos--;
+ } else if(action == 'd' && yPos < lengthY - 1) {
+ yPos++;
+ }
+ board[xPos][yPos] = ROBOT;
+}
diff --git a/ee1301/wk5/hw5_directory/strap012_HW5B.cpp b/ee1301/wk5/hw5_directory/strap012_HW5B.cpp
new file mode 100644
index 0000000..4576e59
--- /dev/null
+++ b/ee1301/wk5/hw5_directory/strap012_HW5B.cpp
@@ -0,0 +1,30 @@
+#include <iostream>
+#include <cstdlib>
+using namespace std;
+
+int main(int argc, char *argv[])
+{
+ if (argc != 4) {
+ cout << "Invalid input!" << endl << " USAGE: ./rand-array m n max" << endl;
+ return 2;
+ }
+ srand(time(NULL));
+ int m, n, max;
+ m = atoi(argv[1]); //number of rows
+ n = atoi(argv[2]); //number of columns
+ int randArray[m][n];
+ max = atoi(argv[3]); //Maximum number
+ for (int curRow = 0; curRow < m; curRow++)
+ {
+ for (int curCol = 0; curCol < n; curCol++)
+ {
+ if (rand() % 2 == 1) {
+ randArray[curRow][curCol] = -1 * (rand() % max);
+ } else {
+ randArray[curRow][curCol] = (rand() % max);
+ }
+ }
+ }
+
+ cout << endl;
+} \ No newline at end of file