aboutsummaryrefslogtreecommitdiffstats
path: root/ee1301/wk5/hw5_directory/strap012_HW5A.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ee1301/wk5/hw5_directory/strap012_HW5A.cpp')
-rw-r--r--ee1301/wk5/hw5_directory/strap012_HW5A.cpp136
1 files changed, 136 insertions, 0 deletions
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;
+}