-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRubiksCube.h
121 lines (121 loc) · 4.73 KB
/
RubiksCube.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#pragma once
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <stdlib.h>
#include <time.h>
using namespace std;
/**
* @file
* @brief Class RubiksCube
* Данный класс описывает головоломку кубика-рубика.
* Он хранит цвета квадратов на гранях в трехмерном векторе, может создавать кубик-рубика с случайным заполнением цветов и считывать цвета с файла.
* Класс имеет функции на проверку собран ли кубик и вывода об этом в консоль.
* Так в классе описаны 6 основных поворотов граней и их противоположные повороты.
*/
class RubiksCube
{
private:
/**
* @brief Трехмерный вектор, в котором храняться грани кубика-рубика. Имееть размерность 6х3х3.
*/
vector<vector<vector<char>>> facets;
public:
/**
* @brief Функция инициализации
* В функции создается кубика-рубика с файла main.txt. Данный файл содержит собранный кубика-рубика для дальнейшего создания кубика-рубика с случайным расположением цветов.
*/
void Initializate();
/**
* @brief Функция создания кубика случайны образом.
* После вызова функции Initializate, которая вызывается при старте программы происходит случайное вращение граней от 10 до 110 раз.
*/
void CreateRandom();
/**
* @brief Функция создания кубика-рубика с файла.
* При вызове функции программа запросит ввод имени файла с которого надо считать расцветку кубика-рубика и запишет его в обьект класса.
*/
void CreateFromFile();
/**
* @brief Функция для просмотра расцветки кубика-рубика.
* Вывод выглядит в виде креста, где первая матрица 3х3 сверху - 0 грань, потом идут 4 матрицы в ряд 1,2,3,4 грани. Последний квадрат снизу - 5 грань.
* Данный вывод удобен для просмотра кубика-рубика, т.к он прост и комфортен для получения алгоритма с сайта для сборки кубика-рубика и проверки программы.
* Всего здесь 6 цветов и они подписаны одной буквой. o-orange, b-blue, g-green, y-yellow, r-red, w-white.
*/
void Print();
/**
* @brief Функция для проверки на собранность кубика-рубика.
* Функция вызывается после выполнения всех комманд(заданных поворотов).
* @return true в случае, если кубик собран и false в противном случае.
* Если кубик собран, то функция выведет информацию об этом в консоль.
*/
bool CheckEnded();
/**
* @brief Функция получает команды для поворота граней.
* Выводится сообщение о вводе команд. Пользователь водить команды через запятую и используя ' в случае противоположного поворота грани.
* Далее функция разбирает строку, считывает букву-команду и наличие ' после буквы.
* Информация передается в функцию checkNegative для проверки на противоположный поворот.
*/
void InputCommands();
/**
* @brief Функция для исполнения команд заданных пользователем.
* Вызывается функцией checkNegative после проверки на противоположный поворот.
*/
void ExecuteCommand(int);
/**
* @brief Функция для проверки на протиположный поворот.
* Функция принимает 2 значения: первое значение - индекс поворота, второе значение - наличие знака '
* Если после буквы-команды стоял знак ', то функция передаст индекс поврота со знаком минус. В ином случае - просто индекс.
*/
void checkNegative(int, bool);
/**
* @brief Функция для поворота фронтальной грани.
* Функция поворачивает сначала квадраты фронтальной грани, а только потом соседние ей квадраты(так будет со всем и последующими функциями для поворота грани)
*/
void PositiveFront();
/**
* @brief Функция для поворота фронтальной грани в противоположную сторону.
*/
void NegativeFront();
/**
* @brief Функция для поворота правой грани.
*/
void PositiveRight();
/**
* @brief Функция для поворота правой грани в противоположную сторону.
*/
void NegativeRight();
/**
* @brief Функция для поворота левой грани.
*/
void PositiveLeft();
/**
* @brief Функция для поворота левой грани в противоположную сторону.
*/
void NegativeLeft();
/**
* @brief Функция для поворота верхней грани.
*/
void PositiveUp();
/**
* @brief Функция для поворота верхней грани в противоположную сторону.
*/
void NegativeUp();
/**
* @brief Функция для поворота нижней грани.
*/
void PositiveDown();
/**
* @brief Функция для поворота нижней грани в противоположную сторону.
*/
void NegativeDown();
/**
* @brief Функция для поворота задней грани.
*/
void PositiveBack();
/**
* @brief Функция для поворота задней грани в противоположную сторону.
*/
void NegativeBack();
};