diff options
Diffstat (limited to 'ee1301/wk5/hw5_directory')
-rw-r--r-- | ee1301/wk5/hw5_directory/maze.txt | 10 | ||||
-rw-r--r-- | ee1301/wk5/hw5_directory/strap012_HW5A.cpp | 183 | ||||
-rw-r--r-- | ee1301/wk5/hw5_directory/strap012_HW5B.cpp | 51 | ||||
-rw-r--r-- | ee1301/wk5/hw5_directory/strap012_HW5C.cpp | 130 |
4 files changed, 374 insertions, 0 deletions
diff --git a/ee1301/wk5/hw5_directory/maze.txt b/ee1301/wk5/hw5_directory/maze.txt new file mode 100644 index 0000000..aa3c598 --- /dev/null +++ b/ee1301/wk5/hw5_directory/maze.txt @@ -0,0 +1,10 @@ +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/strap012_HW5A.cpp b/ee1301/wk5/hw5_directory/strap012_HW5A.cpp new file mode 100644 index 0000000..768e8e2 --- /dev/null +++ b/ee1301/wk5/hw5_directory/strap012_HW5A.cpp @@ -0,0 +1,183 @@ +/*
+Date: April 4 2019
+Name: Matthew Strapp
+Student ID number: 5449340
+Course number: EE 1301
+Term: Spring 2019
+Lab/assignment number: HW 5A
+Short Program Description: Maze Runner 2.0
+*/
+
+#include <iostream>
+#include <iomanip>
+#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;
+ 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, sometimes rendering levels impossible to solve.
+//This bug is not as important as finishing the monster that is 5C.
+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[rand() % lengthX][rand() % lengthY] = GOAL;
+ xPos = rand() % lengthX;
+ yPos = rand() % lengthY;
+ board[xPos][yPos] = ROBOT;
+}
+
+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')
+ {
+ board[curCol][curRow] = ROBOT;
+ 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)
+{
+ int oldX = xPos;
+ int oldY = yPos;
+ 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++;
+ }
+ //Hit detection
+ if (board[xPos][yPos] == WALL)
+ {
+ xPos = oldX;
+ yPos = oldY;
+ board[xPos][yPos] = WALL;
+ }
+ else
+ {
+ board[oldX][oldY] = BLANK;
+ }
+ 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..f1e0c2c --- /dev/null +++ b/ee1301/wk5/hw5_directory/strap012_HW5B.cpp @@ -0,0 +1,51 @@ +/*
+Date: April 4 2019
+Name: Matthew Strapp
+Student ID number: 5449340
+Course number: EE 1301
+Term: Spring 2019
+Lab/assignment number: HW 5B
+Short Program Description: Random Array
+*/
+
+#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 in array
+
+ //Loop to make the random array
+ for (int curRow = 0; curRow < m; curRow++)
+ {
+ for (int curCol = 0; curCol < n; curCol++)
+ {
+ if (rand() % 2 + 1 == 2) { //Decide the sign of the number
+ randArray[curCol][curRow] = -1 * (rand() % (max+1));
+ } else {
+ randArray[curCol][curRow] = (rand() % (max+1));
+ }
+ }
+ }
+
+ //Loop to output the array in the console
+ for (int curRow = 0; curRow < m; curRow++)
+ {
+ for (int curCol = 0; curCol < n; curCol++)
+ {
+ cout << randArray[curCol][curRow] << " ";
+ }
+ cout << endl;
+ }
+}
\ No newline at end of file diff --git a/ee1301/wk5/hw5_directory/strap012_HW5C.cpp b/ee1301/wk5/hw5_directory/strap012_HW5C.cpp new file mode 100644 index 0000000..2bdda92 --- /dev/null +++ b/ee1301/wk5/hw5_directory/strap012_HW5C.cpp @@ -0,0 +1,130 @@ +/*
+Date: April 4 2019
+Name: Matthew Strapp
+Student ID number: 5449340
+Course number: EE 1301
+Term: Spring 2019
+Lab/assignment number: HW 5C
+Short Program Description: Pixel Averaging
+*/
+#include <iostream>
+#include <string>
+#include <sstream>
+using namespace std;
+
+#define SIZE 100
+int maxRow = -1, maxColumn = 0;
+void getInput(int input[SIZE][SIZE]);
+void makeNewArray(int oldArray[SIZE][SIZE], int newArray[SIZE][SIZE]);
+void pixelAverage(int inArray[SIZE][SIZE], int outArray[SIZE][SIZE]);
+void printArray(int array[SIZE][SIZE]);
+
+int main() {
+ int inputArray[SIZE][SIZE] = {0},
+ outputArray[SIZE][SIZE] = {0};
+ getInput(inputArray);
+ makeNewArray(inputArray, outputArray);
+ pixelAverage(inputArray, outputArray);
+ printArray(outputArray);
+}
+
+// Function: getInput
+// ---------------------------
+// Takes the stream of stdin, puts that into a stringsream and puts that stringsteam into an integer array
+// input: an empty array of SIZE, as defined in line 15.
+void getInput(int input[SIZE][SIZE]) {
+ string test, temp1; int temp2=0;
+ //I would mainly like to thank whatever user on StackOverflow solved my problem
+ while (getline(cin,test,'\n')) {
+ temp2 = -1;
+ istringstream ss(test);
+ while(getline(ss,temp1,' ')) {
+ temp2++;
+ input[maxRow][temp2] = stoi(temp1);
+ }
+ if (temp2>maxColumn) {
+ maxColumn = temp2+1; //1 is added to make the math work.
+ }
+ maxRow++;
+ }
+ maxRow++;
+}
+
+// Function: makeNewArray
+// ---------------------------
+// Takes the array made in getInput and puts that same array into a new array to manipulate
+// oldArray: Array generated in getInput of SIZE
+// newArray: Array of same dimensions and data
+void makeNewArray(int oldArray[SIZE][SIZE], int newArray[SIZE][SIZE]) {
+ for (int row = 0; row < maxRow; row++) {
+ for (int column = 0; column < maxColumn; column++) {
+ newArray[row][column] = oldArray[row][column];
+ }
+ }
+}
+
+// Function: pixelAverage
+// ---------------------------
+// The meat of the program, taking the surrounding values, adding them, and divides by the number of surrounding values
+// inArray: Generated in getInput
+// outArray: Generated in makeNewArray
+void pixelAverage(int inArray[SIZE][SIZE], int outArray[SIZE][SIZE]) {
+ int sum = 0, n = 0, average; //n is the number of surrounding pixels
+ for (int row = -1; row < maxRow-1; row++) {
+ for (int column = -1; column < maxColumn-1; column++) {
+ sum=0; n=0; //Sum and n are reset every loop
+ if ( !((row)<0) ) { //True when array is in lower bounds row-wise
+ sum += inArray[row-1][column];
+ n++;
+ }
+ if ( (row+1)<maxRow-1 ) { //True when array is in upper bounds row-wise
+ sum += inArray[row+1][column];
+ n++;
+ }
+ if ( !((column)<0) ) { //True when array is in lower bounds column-wise
+ sum += inArray[row][column-1];
+ n++;
+ }
+ if ( (column+1)<maxColumn-1 ) {//True when array is in upper bounds column-wise
+ sum += inArray[row][column+1];
+ n++;
+ }
+ //All of these if statements are combinations are previous statements for the diagonal aspects
+ if ( !((row)<0) && !((column)<0) ) {
+ sum += inArray[row-1][column-1];
+ n++;
+ }
+ if ( !((row)<0) && ( (column+1)<maxColumn-1 ) ) {
+ sum += inArray[row-1][column+1];
+ n++;
+ }
+ if ( (row+1)<maxRow-1 && (column+1)<maxColumn-1 ) {
+ sum += inArray[row+1][column+1];
+ n++;
+ }
+ if ( (!((column)<0) && (row+1)<maxRow-1) ) {
+ sum+=inArray[row+1][column-1];
+ n++;
+ }
+ sum+=inArray[row][column];
+ n++;
+ average = sum/n;
+ outArray[row+1][column+1]=average;
+ }
+ }
+}
+
+// Function: printArray
+// ---------------------------
+// Prints the new array after the pixel averaging
+// array: Array generated in pixelAverage
+void printArray (int array[SIZE][SIZE]) {
+ for (int row = 0; row < maxRow; row++)
+ {
+ for (int column = 0; column < maxColumn; column++)
+ {
+ cout << array[row][column] << " ";
+ }
+ cout << endl;
+ }
+}
|