Skip to content

AfilaGofa/CubeSimulation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

🧊 Rubik's Cube 3x3 Simulator

Python Project Status License

📌 Описание проекта

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
└── .gitignore

⚙️ Установка и запуск

1. Склонировать репозиторий

git clone https://github.com/your-username/rubiks-cube-3x3.git

2. Перейти в папку проекта

cd rubiks-cube-3x3

3. Запустить Python-файл

python 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())
# True

🔄 Доступные движения

Правый слой

cube.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 выполняет обратный поворот выбранной грани.


🧠 Основная логика проекта

_transform_array()

Метод поворачивает двумерный массив 3x3.

def _transform_array(self, array: list, inversely=False) -> list:

Используется для поворота самой грани кубика.


_checking_side()

Метод проверяет, состоит ли одна сторона кубика из одинаковых элементов.

def _checking_side(self, side: list) -> bool:

Если все элементы стороны одинаковые, сторона считается собранной.


is_solved()

Метод проверяет, собран ли весь кубик.

def is_solved(self) -> bool:

Возвращает True, если все стороны собраны, иначе возвращает False.


print_cube()

Метод выводит текущее состояние кубика в консоль.

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

reset()

Метод возвращает кубик в начальное собранное состояние.

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.

About

🔰Python module that has classes and functions capable of simulating rubik's cube behavior.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages