Rubik's Cube 3x3 Simulator — это учебный Python-проект, реализующий виртуальную модель классического кубика Рубика 3x3.
Проект позволяет создать собранный кубик, выполнять базовые повороты граней, проверять состояние сборки, выводить кубик в консоль и сбрасывать его в начальное состояние.
Кубик хранится в виде шести двумерных массивов 3x3, где каждая сторона представлена отдельной матрицей.
Проект поддерживает:
- ✅ создание собранного кубика 3x3;
- ✅ хранение всех шести сторон кубика;
- ✅ поворот правой грани;
- ✅ поворот левой грани;
- ✅ поворот верхней грани;
- ✅ поворот нижней грани;
- ✅ поворот передней грани;
- ✅ поворот задней грани;
- ✅ обратные повороты граней;
- ✅ проверку, собран ли кубик;
- ✅ вывод текущего состояния кубика в консоль;
- ✅ сброс кубика в начальное состояние.
В проекте цвета сторон представлены числами:
| Число | Цвет |
|---|---|
0 |
White / Белый |
1 |
Red / Красный |
2 |
Orange / Оранжевый |
3 |
Blue / Синий |
4 |
Green / Зелёный |
5 |
Yellow / Жёлтый |
Пример собранной стороны:
[
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]Кубик состоит из 6 сторон:
self.top # верхняя сторона
self.down # нижняя сторона
self.front # передняя сторона
self.back # задняя сторона
self.left # левая сторона
self.right # правая сторонаКаждая сторона — это список списков размером 3x3.
rubiks-cube-3x3/
│
├── main.py
├── README.md
└── .gitignoreИли более аккуратный вариант:
rubiks-cube-3x3/
│
├── rubicks_cube.py
├── main.py
├── README.md
└── .gitignoregit clone https://github.com/your-username/rubiks-cube-3x3.gitcd rubiks-cube-3x3python main.pyНазвание файла может отличаться. Укажи тот файл, в котором находится класс
RubicksCube_3x3.
cube = RubicksCube_3x3()
cube.print_cube()
print(cube.is_solved())
# True
cube.move_right()
cube.move_top()
cube.move_front()
cube.print_cube()
print(cube.is_solved())
# False
cube.reset()
print(cube.is_solved())
# Truecube.move_right()
cube.move_right(backward=True)cube.move_left()
cube.move_left(backward=True)cube.move_top()
cube.move_top(backward=True)cube.move_down()
cube.move_down(backward=True)cube.move_front()
cube.move_front(backward=True)cube.move_back()
cube.move_back(backward=True)Параметр backward=True выполняет обратный поворот выбранной грани.
Метод поворачивает двумерный массив 3x3.
def _transform_array(self, array: list, inversely=False) -> list:Используется для поворота самой грани кубика.
Метод проверяет, состоит ли одна сторона кубика из одинаковых элементов.
def _checking_side(self, side: list) -> bool:Если все элементы стороны одинаковые, сторона считается собранной.
Метод проверяет, собран ли весь кубик.
def is_solved(self) -> bool:Возвращает True, если все стороны собраны, иначе возвращает False.
Метод выводит текущее состояние кубика в консоль.
def print_cube(self) -> None:Пример вывода:
top
5 5 5
5 5 5
5 5 5
front
1 1 1
1 1 1
1 1 1Метод возвращает кубик в начальное собранное состояние.
def reset(self) -> None:cube = RubicksCube_3x3()
assert cube.is_solved() == True
cube.move_right()
assert cube.is_solved() == False
cube.move_right(backward=True)
assert cube.is_solved() == TrueЭтот пример показывает, что после обычного поворота кубик перестаёт быть собранным, а после обратного поворота возвращается в исходное состояние.
Этот проект помогает лучше понять:
- работу с классами в Python;
- объектно-ориентированное программирование;
- двумерные списки;
- работу с матрицами;
- логику поворотов;
- моделирование объектов из реального мира;
- разбиение программы на методы;
- написание учебных симуляторов.
Проект разработан в учебных целях для практики Python, объектно-ориентированного программирования и моделирования кубика Рубика 3x3.
Проект распространяется под лицензией Apache License 2.0.
Apache License 2.0Если проект оказался полезным, можно поставить звезду репозиторию на GitHub.