Skip to content

jellYTM/rubik_simulater_python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rubik Simulator Python

Pythonのゲームエンジン「Ursina」を使用したルービックキューブシミュレーターです。
3x3x3(および2x2x2)のキューブをrubik_3x3x3(およびrubik2x2x2)クラスでキューブデータを作成し、RubikCubeCameraクラスで3D空間に描画・操作できるほか、OpenCVを使用して<展開図をリアルタイムで可視化・保存する機能(rubik_xx~クラス)を備えています。
強化学習等にお使いください

rubik_3x3x3

rubik_2x2x2

🚀Features

  • キューブデータの作成:2次元ndarrayで作成されます。(下詳細)
  • 3Dシミュレーション: Ursina Engineを使用した滑らかな回転アニメーションと操作。
  • 2D展開図の可視化: OpenCVウィンドウにて現在のキューブの状態(展開図)をリアルタイム表示。
  • 状態保存: 現在の状態を画像およびPickleデータとして保存可能。
  • シャッフル機能: 起動時にランダムにシャッフルされます。
  • 論理クラスの分離: 描画(GUI)とキューブの論理(Logic)が分離されており、強化学習などの環境としても拡張しやすい設計です。

📦Requirements

以下のライブラリが必要です。

  • ursina
  • opencv-python
  • numpy

インストール

pip install ursina opencv-python numpy

📁ファイル構成 (File Structure)

  • rubik_3x3x3.py: 3x3x3 キューブのシミュレーション本体
  • rubik_2x2x2.py: 2x2x2 キューブのシミュレーション本体
  • savefiles/: 保存されたキューブの状態(データおよび画像)が格納されるディレクトリ(自動生成)

📦使い方 (Usage)

スクリプトを直接実行してください。

# 3x3x3 キューブの起動
python rubik_3x3x3.py

# 2x2x2 キューブの起動
python rubik_2x2x2.py

操作方法 (Controls)

カメラ・システム操作

操作 説明
右クリック + ドラッグ カメラの回転(視点移動)
右クリック解除 カメラ位置のリセット
S キー 現在の2Dマップ状態を保存 (savefiles/フォルダへ)
R キー キューブをリセット(再生成・初期化)
V キー 描画の強制リフレッシュ

キューブの回転 (テンキー / Numpad)

回転操作はテンキー(Numpad)に割り当てられています。 画面上のヘルプテキストに基づいたキー配置は以下の通りです。

面 (Side) 正回転 (Clockwise) キー 逆回転 (Counter-Clockwise) キー
Right (右) R * R' 3
Left (左) L 2 L' /
Up (上) U 7 U' -
Down (下) D + D' 4
Front (前) F 6 F' 5
Back (後) B 9 B' 8

技術的詳細 (Technical Details)

データ構造

キューブの状態は numpy.ndarray (9x9グリッド) で管理されています。 これは、各面(U, L, F, R, D, B)を2次元平面上に展開した形式で表現しています。

# 9x9 Grid Layout:
#       [U]
#    [L][F][R]
#       [D][B]

クラス設計

  • rubik_3x3x3 (Logic Class)
    • 純粋なデータ操作を担当します。
    • self.cube: 色情報を持つNumPy配列。
    • 回転メソッド (R, Li, U etc.) による配列の書き換えを行います。
  • RubikCubeCamera (GUI Class)
    • ursina.Entity を継承し、3D描画と入力を担当します。
    • 入力での操作はrubik_xx~クラスのupdateメゾットにより更新されます。
    • Logicクラスの状態を読み取り、小さなCube Entityの集合として3D空間に描画します。
    • 回転アニメーション時は一時的に親Entity (rotator) を設定して軸回転させます。

License

MIT License

Acknowledgements

This code was developed with the assistance of Google Gemini.

About

強化学習用に作ったルービックキューブシミュレータ

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages