Skip to content
Snippets Groups Projects
Commit 55e76d97 authored by Kovács Tamás István's avatar Kovács Tamás István
Browse files

Final commit.

parent e27d7e2c
Branches
No related tags found
No related merge requests found
Showing
with 53 additions and 169 deletions
...@@ -2,28 +2,12 @@ ...@@ -2,28 +2,12 @@
#include "Application.h" #include "Application.h"
#include "Colors.h" #include "Colors.h"
Application::Application() { Application::Application() { // constructor
focus = -1; focus = -1;
} // constructor }
Application::~Application() = default; // desctructor Application::~Application() = default; // desctructor
void Application::registerWidgets(Widget *w) { void Application::registerWidgets(Widget *w) { // automatic widget registration
allWidgets.push_back(w); allWidgets.push_back(w);
} }
\ No newline at end of file
void Application::action(const std::string &id) {
if (id == "lr") {
} else if (id == "rl") {
}
}
void Application::setFocus(int f) {
focus = f;
}
int Application::getFocus() const {
return focus;
}
...@@ -19,9 +19,7 @@ public: ...@@ -19,9 +19,7 @@ public:
~Application(); // desctructor ~Application(); // desctructor
virtual void EventLoop() = 0; // handles user inputs (and timer if there is) virtual void EventLoop() = 0; // handles user inputs (and timer if there is)
void registerWidgets(Widget*); // adds a new widget to the allWidgets vector void registerWidgets(Widget*); // adds a new widget to the allWidgets vector
void action(const std::string& id);
void setFocus(int f);
int getFocus() const;
}; };
template<typename T> // function template to handle different datatypes template<typename T> // function template to handle different datatypes
......
...@@ -30,7 +30,6 @@ void CheckBox::drawSelf() ...@@ -30,7 +30,6 @@ void CheckBox::drawSelf()
genv::gout << genv::move_to(posX+sizeX-4, posY+4) << genv::line(-sizeX+8, sizeY-8); genv::gout << genv::move_to(posX+sizeX-4, posY+4) << genv::line(-sizeX+8, sizeY-8);
genv::gout << genv::move_to(posX+sizeX-5, posY+4) << genv::line(-sizeX+8, sizeY-8); genv::gout << genv::move_to(posX+sizeX-5, posY+4) << genv::line(-sizeX+8, sizeY-8);
} }
} }
void CheckBox::drawBorderedRectangularWidget(int pX, int pY, int sX, int sY, int borderWidth) { void CheckBox::drawBorderedRectangularWidget(int pX, int pY, int sX, int sY, int borderWidth) {
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
class CheckBox : public Widget{ class CheckBox : public Widget{
protected: protected:
bool checked; bool checked; // retrievable logical value
public: public:
CheckBox(int &pX, int &pY, int &sX, int &sY, Application *parentApp); CheckBox(int &pX, int &pY, int &sX, int &sY, Application *parentApp);
......
...@@ -12,34 +12,31 @@ ...@@ -12,34 +12,31 @@
#define UNASSIGNED 0 #define UNASSIGNED 0
void Sudoku::createSeed() { void Sudoku::generateBaselineMap() {
solveGrid(); solveGrid();
// Saving the solution grid // saving the solution sparseGrid
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) { for (int j = 0; j < 9; j++) {
solnGrid[i][j] = grid[i][j]; solvedGrid[i][j] = sparseGrid[i][j];
} }
} }
} }
Sudoku::Sudoku() { Sudoku::Sudoku() {
// Randomly shuffling the array of removing grid positions // Randomly shuffling the array of removing sparseGrid positions
for (int i = 0; i < 81; i++) { for (int i = 0; i < 81; i++) {
gridPos[i] = i; linearGridIndices[i] = i;
} }
shuffle(linearGridIndices, (linearGridIndices) + 81, std::mt19937(std::random_device()()));
shuffle(gridPos, (gridPos) + 81, std::mt19937(std::random_device()()));
// Randomly shuffling the guessing number array
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
guessNum[i] = i + 1; possibleNums[i] = i + 1;
} }
shuffle(possibleNums, (possibleNums) + 9, std::mt19937(std::random_device()()));
shuffle(guessNum, (guessNum) + 9, std::mt19937(std::random_device()())); // initialising the sparseGrid
for (auto & i : sparseGrid) {
// Initialising the grid
for (auto & i : grid) {
for (int & j : i) { for (int & j : i) {
j = 0; j = 0;
} }
...@@ -50,7 +47,7 @@ Sudoku::Sudoku() { ...@@ -50,7 +47,7 @@ Sudoku::Sudoku() {
/// debug only /// debug only
void Sudoku::printGrid() { void Sudoku::printGrid() {
std::cout << "GRID:" << std::endl; std::cout << "GRID:" << std::endl;
for (auto &i : grid) { for (auto &i : sparseGrid) {
for (int j : i) { for (int j : i) {
if (j == 0) { if (j == 0) {
std::cout << "."; std::cout << ".";
...@@ -65,7 +62,7 @@ void Sudoku::printGrid() { ...@@ -65,7 +62,7 @@ void Sudoku::printGrid() {
std::cout << "SGRID:" << std::endl; std::cout << "SGRID:" << std::endl;
for (auto &i : solnGrid) { for (auto &i : solvedGrid) {
for (int j : i) { for (int j : i) {
if (j == 0) { if (j == 0) {
std::cout << "."; std::cout << ".";
...@@ -122,96 +119,74 @@ bool isSafe(int grid[9][9], int &row, int &col, int &num) { ...@@ -122,96 +119,74 @@ bool isSafe(int grid[9][9], int &row, int &col, int &num) {
bool Sudoku::solveGrid() { bool Sudoku::solveGrid() {
int row, col; int row, col;
// If there is no unassigned location, we are done // if all tiles have assigned value, the puzzle is ready
if (!FindUnassignedLocation(grid, row, col)) if (!FindUnassignedLocation(sparseGrid, row, col))
return true; // success! return true; // success!
// Consider digits 1 to 9 for (int & num : possibleNums) {
for (int & num : guessNum) {
// if looks promising // if looks promising
if (isSafe(grid, row, col, num)) { if (isSafe(sparseGrid, row, col, num)) {
// make tentative assignment // make temp assignment
grid[row][col] = num; sparseGrid[row][col] = num;
// return, if success, yay! // return if success
if (solveGrid()){ if (solveGrid()){
return true; return true;
} }
// failure, unmake & try again // failure, reset state and try again
grid[row][col] = UNASSIGNED; sparseGrid[row][col] = UNASSIGNED;
} }
} }
return false; // this triggers backtracking return false; // this triggers backtracking
} }
void Sudoku::countSoln(int &number) { void Sudoku::countSolution(int &number) {
int row, col; int row, col;
if (!FindUnassignedLocation(grid, row, col)) { if (!FindUnassignedLocation(sparseGrid, row, col)) {
number++; number++;
return; return;
} }
for (int i = 0; i < 9 && number < 2; i++) { for (int i = 0; i < 9 && number < 2; i++) {
if (isSafe(grid, row, col, guessNum[i])) { if (isSafe(sparseGrid, row, col, possibleNums[i])) {
grid[row][col] = guessNum[i]; sparseGrid[row][col] = possibleNums[i];
countSoln(number); countSolution(number);
} }
grid[row][col] = UNASSIGNED; sparseGrid[row][col] = UNASSIGNED;
} }
} }
void Sudoku::genPuzzle() { void Sudoku::generateEmptyTiles() {
for (int & gridPo : gridPos) { for (int & gridPo : linearGridIndices) {
int x = gridPo / 9; int x = gridPo / 9;
int y = gridPo % 9; int y = gridPo % 9;
int temp = grid[x][y]; int temp = sparseGrid[x][y];
grid[x][y] = UNASSIGNED; sparseGrid[x][y] = UNASSIGNED;
// If now more than 1 solution , replace the removed cell back. // if now more than 1 solution , replace the removed cell back
int check = 0; int check = 0;
countSoln(check); countSolution(check);
if (check != 1) { if (check != 1) {
grid[x][y] = temp; sparseGrid[x][y] = temp;
} }
} }
} }
void Sudoku::createLevel() { void Sudoku::createLevel() {
srand(unsigned(std::time(nullptr))); generateBaselineMap();
for (int i = 0; i < 81; i++) { generateEmptyTiles();
gridPos[i] = i;
}
std::shuffle(gridPos, (gridPos) + 81, std::mt19937(std::random_device()()));
/// Randomly shuffling the guessing number array
for (int i = 0; i < 9; i++) {
guessNum[i] = i + 1;
}
std::shuffle(guessNum, (guessNum) + 9, std::mt19937(std::random_device()()));
/// Initialising the grid
for (auto & i : grid) {
for (int & j : i) {
j = 0;
}
}
createSeed();
genPuzzle();
printGrid();
} }
int Sudoku::getPuzzleAtPosition(int x, int y) { int Sudoku::getPuzzleAtPosition(int x, int y) {
return grid[x][y]; return sparseGrid[x][y];
} }
int Sudoku::getSolutionAtPosition(int x, int y) { int Sudoku::getSolutionAtPosition(int x, int y) {
return solnGrid[x][y]; return solvedGrid[x][y];
} }
Sudoku::~Sudoku() = default; Sudoku::~Sudoku() = default;
...@@ -7,19 +7,19 @@ ...@@ -7,19 +7,19 @@
class Sudoku { class Sudoku {
private: private:
int grid[9][9]; int sparseGrid[9][9]; // known size, no use of vector
int solnGrid[9][9]; int solvedGrid[9][9];
int guessNum[9]; int possibleNums[9];
int gridPos[81]; int linearGridIndices[81];
public: public:
Sudoku (); Sudoku ();
~Sudoku(); ~Sudoku();
void createSeed(); void generateBaselineMap();
void printGrid(); void printGrid();
bool solveGrid(); bool solveGrid();
void countSoln(int &number); void countSolution(int &number);
void genPuzzle(); void generateEmptyTiles();
void createLevel(); void createLevel();
int getPuzzleAtPosition(int x, int y); int getPuzzleAtPosition(int x, int y);
int getSolutionAtPosition(int x, int y); int getSolutionAtPosition(int x, int y);
......
No preview for this file type
...@@ -6,14 +6,6 @@ ...@@ -6,14 +6,6 @@
#IncludeRegexTransform: #IncludeRegexTransform:
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Application.cpp
iostream
-
Application.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Application.h
Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Application.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Application.h
fstream fstream
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/fstream C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/fstream
...@@ -44,16 +36,6 @@ C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SimpleButton.hpp ...@@ -44,16 +36,6 @@ C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SimpleButton.hpp
StaticTextBox.h StaticTextBox.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StaticTextBox.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StaticTextBox.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/IntegerDisplayIncDec.cpp
IntegerDisplayIncDec.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/IntegerDisplayIncDec.h
string
-
Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Colors.h
cmath
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/cmath
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/IntegerDisplayIncDec.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/IntegerDisplayIncDec.h
Widget.h Widget.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h
...@@ -66,42 +48,12 @@ C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Other.h ...@@ -66,42 +48,12 @@ C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Other.h
bits/stdc++.h bits/stdc++.h
- -
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SimpleButton.cpp
SimpleButton.hpp
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SimpleButton.hpp
Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SimpleButton.hpp C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SimpleButton.hpp
Widget.h Widget.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h
functional functional
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/functional C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/functional
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StartupMenu.cpp
StartupMenu.hpp
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StartupMenu.hpp
Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StartupMenu.hpp
Application.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Application.h
SimpleButton.hpp
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SimpleButton.hpp
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StaticTextBox.cpp
StaticTextBox.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StaticTextBox.h
utility
-
graphics.hpp
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/graphics.hpp
Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Colors.h
iostream
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/iostream
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StaticTextBox.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/StaticTextBox.h
Widget.h Widget.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h
...@@ -136,34 +88,10 @@ C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Sudoku.hpp ...@@ -136,34 +88,10 @@ C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Sudoku.hpp
CheckBox.hpp CheckBox.hpp
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/CheckBox.hpp C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/CheckBox.hpp
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SudokuTile.cpp
SudokuTile.hpp
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SudokuTile.hpp
Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Colors.h
cmath
-
utility
-
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SudokuTile.hpp C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/SudokuTile.hpp
IntegerDisplayIncDec.h IntegerDisplayIncDec.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/IntegerDisplayIncDec.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/IntegerDisplayIncDec.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.cpp
Widget.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h
Application.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Application.h
Colors.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Colors.h
cmath
-
iostream
-
fstream
-
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Widget.h
Application.h Application.h
C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Application.h C:/Users/ktama/OneDrive/Documents/MSc/3rd Semester/Prog/Bead3/Application.h
......
No preview for this file type
File added
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
Start testing: May 17 20:30 Kzp-eurpai nyri ido Start testing: May 17 20:52 Kzp-eurpai nyri ido
---------------------------------------------------------- ----------------------------------------------------------
End testing: May 17 20:30 Kzp-eurpai nyri ido End testing: May 17 20:52 Kzp-eurpai nyri ido
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment