-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSudoku.h
101 lines (86 loc) · 4.42 KB
/
Sudoku.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifndef SUDOKU_SUDOKU_H
#define SUDOKU_SUDOKU_H
#include<SFML/Graphics.hpp>
#include<SFML/System.hpp>
#include "Objects/Board/Board.h"
#include "Objects/ResetButton/ResetButton.h"
#include "Objects/SolveButton/SolveButton.h"
#include "Objects/LoadButton/LoadButton.h"
#include "Objects/SaveButton/SaveButton.h"
#include "Objects/Boxes/BoxObject.h"
#include "DTOs/Coordinates.h"
#include "Objects/MethodObjects/UpButton.h"
#include "Objects/MethodObjects/DownButton.h"
#include "Objects/Logo/Logo.h"
#include "Objects/Candidates/CandidateBox.h"
#include "Objects/MethodObjects/ListMethodButton.h"
#include "Objects/MethodObjects/MethodButton.h"
#include "Objects/ShowCandidatesCheckBox/ShowCandidatesCheckBox.h"
#include "Shared/Enums/MethodType.h"
#include "Objects/MethodObjects/MethodText.h"
#include <array>
#include <cctype>
/// główna klasa aplikacji reprezentująca okno i wszystkie elementy w nim
class Sudoku {
//variables
sf::RenderWindow* _window;
sf::VideoMode _videoMode;
sf::Event _event;
bool _isAnyButtonPressed = false;
Coordinates _checkedBoxCoordinates;
std::array<std::array<int,9>,9> _numbers = {};
std::array<std::array<bool,9>,9> _invalidNumbers = {};
bool _isCandidatesShow = false;
//objects
Board* _board;
ResetButton* _resetButton;
SolveButton* _solveButton;
LoadButton* _loadButton;
SaveButton* _saveButton;
std::array<std::array<BoxObject, 9>, 9> _boxes;
ShowCandidatesCheckBox* _showCandidatesCheckBox;
UpButton* _upButton;
DownButton* _downButton;
Logo* _logo;
//method logic
ListMethodButton* _listMethodButton;
std::array<MethodButton, 7> _methodButtons;
bool _isMethodListOpen = false;
std::vector<std::string> _methodStringList;
std::array<MethodText, 3> _methodTextList;
std::array<int, 3> _methodNumber;
MethodType _methodType;
int _startPoint = 0;
int _selectedMethodNumber = -1;
std::vector<MethodSolutionDto> _methodSolutions;
//candidates logic
std::array<std::array<std::vector<CandidateBox>, 9>, 9> _candidateBoxes;
bool _isCandidateChecked[9][9][10] = {};
bool _isCandidateSelectedForMethod[9][9][10] = {};
bool _isCandidateSelectedForMethodToDelete[9][9][10] = {};
std::array<std::array<std::vector<int>, 9>, 9> _candidateNumbers;
//functions
void InitWindow(); ///inicjalizacja okna aplikacji, ustawienie rozmiaru, tytułu okna itp.
sf::Vector2f GetMousePosition(); /// zwrócenie pozycji myszy na oknie, lewy górny róg to (0,0)
void PoolEvent(); /// obsługa eventów aplikacji takich jak jej zamknięcie, czy sprawdzanie czy przycisk został puszczony
void ResetBoard(); /// zresetowanie wszystkich wartości planszy (numerów, wybranych metod, zaznaczonych kandydatów)
void HoverMenuButtons(); /// obsługa zmiany tekstur w momencie najechania na przyciski menu
void ClickMenuButtons(); /// obsługa kliknięcia przycisków menu, wywoływanie metod w zależnoći od wybranego przycisku
void ClickBoxes(); /// obsługa kliknięcia pól numerycznych, zmiany zaznaczonego pola przy użyciu klawiatury lub myszy, uzupełnianie planszy numerami
void UpdateBoxNumber(int number);
void ClickCandidatesAndUpdateColor(); /// obsługa kliknięcia kandydatów i aktualizacja ich kolorów
void UpdateBoxes(); ///zmiana tekstur pól z numerami w zależności od _numbers
void ClickMethodButtons(); /// mechanizm rozwijanej listy z dostępnymi metodami
void UpdateMethod(); /// obsługa kliknięcia przycisków metod, wywoływanie metod z klasy MethodsExtension i zapisywanie rozwiązań w _methodSolutions, ustawianie tekstu do wyświetlania w _methodStringList
void UpdateMethodTextList(); /// aktualizacja _methodTextList w zależności od wartości zmiennej _startPoint
void UpdateStartPosition(); /// zmiana pozycji startowej w momęcie klikniecia przycisków Up Down
void ClickMethodText(); ///wybranie danej metody i podświetlenie jej na zielono, a także podświetlenie kandydatów
void ClearIfCandidateSelectedForMethod(); /// wyczyszczenie podświetlonych kandydatów, i reset wybranej metody
public:
Sudoku(); /// inicjalizacja wszystkich obiektów
~Sudoku(); /// usunięcie wszystkich obiektów
bool IsRunning(); /// zwrócenie stałej wartości bool w zależności od tego czy okno jest wyświetlone
void Update(); /// aktualizacja całej planszy
void Render(); /// wyświetlanie obiektów
};
#endif //SUDOKU_SUDOKU_H