aboutsummaryrefslogtreecommitdiffstats
path: root/CodeEval/Minesweeper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CodeEval/Minesweeper.cpp')
-rw-r--r--CodeEval/Minesweeper.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/CodeEval/Minesweeper.cpp b/CodeEval/Minesweeper.cpp
new file mode 100644
index 0000000..950fffb
--- /dev/null
+++ b/CodeEval/Minesweeper.cpp
@@ -0,0 +1,124 @@
+#include <iostream>
+#include <cstdlib>
+#include <sstream>
+#include <string>
+#include <fstream>
+#include <unistd.h>
+
+/*
+ * <title>: Minesweeper.cpp
+ * <author>: Yann Herklotz
+ * <date>: 25-01-2016
+ * <description>: This is a program that creates a Minesweeper field
+ *
+ */
+
+// declares namespace
+using namespace std;
+
+// declares the function
+void getMineField(int&, int&, string&, string*&);
+void timing(int& , int&, string*&);
+
+// main function that prints and inputs data
+int main(int argc, char** argv) {
+ // declares the variables
+ ifstream file_stream;
+ // strings for input
+ string y_coord_str, x_coord_str, matrix;
+ int y_coord, x_coord;
+ // output string array
+ string* field;
+ string nothing;
+
+ // opens and checks file
+ file_stream.open(argv[1]);
+ if(!file_stream.is_open()) {
+ cout << "Couldn't open the file: " << argv[1] << endl;
+ exit(EXIT_FAILURE);
+ }
+
+ // reads the lines from the file and stops when there are none left
+ while(getline(file_stream, y_coord_str, ',')) {
+ getline(file_stream, x_coord_str, ';');
+ getline(file_stream, matrix);
+
+ // using stringstream to convert string to int
+ stringstream ss;
+ ss << y_coord_str << " " << x_coord_str;
+ ss >> y_coord >> x_coord;
+
+ // calls function and prints the results
+ getMineField(x_coord, y_coord, matrix, field);
+ cout << string(100, '\n');
+ for(int i = 0; i < y_coord; ++i) {
+ for(int j = 0; j < x_coord; ++j) {
+ cout << field[i][j] << ' ';
+ }
+ cout << endl;
+ }
+ cin >> nothing;
+ }
+ // closes and deletes necessary variables
+ delete[] field;
+ file_stream.close();
+ return 0;
+}
+
+// function that creates the minefield with numbers
+void getMineField(int &x, int &y, string &mtrx, string* &fld) {
+ // declares dynamic array from input
+ fld = new string[1024];
+ int int_sum;
+ // puts subset correctly into dynamic array
+ for(int i = 0; i < y; ++i) {
+ fld[i] = mtrx.substr(i*x, x);
+ }
+
+ // checks all the cases around the current box
+ for(int i = 0; i < y; ++i) {
+ for(int j = 0; j < x; ++j) {
+ int_sum = 0;
+ if(fld[i][j] == '.') {
+ if((i-1 >= 0) && (j-1 >= 0) && (fld[i-1][j-1] == '*')) {
+ int_sum += 1;
+ }
+ if((i-1 >= 0) && (fld[i-1][j] == '*')) {
+ int_sum += 1;
+ }
+ if((i-1 >= 0) && (j+1 >= 0) && (fld[i-1][j+1] == '*')) {
+ int_sum += 1;
+ }
+ if((j+1 >= 0) && (fld[i][j+1] == '*')) {
+ int_sum += 1;
+ }
+ if((i+1 >= 0) && (j+1 >= 0) && (fld[i+1][j+1] == '*')) {
+ int_sum += 1;
+ }
+ if((i+1 >= 0) && (fld[i+1][j] == '*')) {
+ int_sum += 1;
+ }
+ if((i+1 >= 0) && (j-1 >= 0) && (fld[i+1][j-1] == '*')) {
+ int_sum += 1;
+ }
+ if((j-1 >= 0) && (fld[i][j-1] == '*')) {
+ int_sum += 1;
+ }
+ char ch = '0' + int_sum;
+ fld[i][j] = ch;
+ timing(y, x, fld);
+ }
+ }
+ }
+}
+
+void timing(int &y_c, int &x_c, string* &str_array) {
+ usleep(100000);
+ cout << string(100, '\n');
+ for(int i = 0; i < y_c; ++i) {
+ for(int j = 0; j < x_c; ++j) {
+ cout << str_array[i][j] << ' ';
+ }
+ cout << endl;
+ }
+} \ No newline at end of file