この記事の目的

3×3 キューブアプリに使ったソースコードを公開します。ファイルを開いたときだけコードを読み込みます。

使用したツール

  • Qt6(Core、Gui、Widgets、OpenGL、Network)と OpenGL: 3Dキューブ、写真の読み込み画面
  • Kociemba の2段階探索: muodov/kociemba の C コードをそのまま入れました。GPL-2.0 です。
  • Qwen3-VL-8B-Instruct(transformers、Mac の MPS): VLM スキャンサーバー。アプリと TCP でつながります。

フォルダ構成

  • src/CubeModel: キューブの状態、回転、色の分類
  • src/CubeWidget、MainWindow: OpenGL の画面とマウスでの回転、シャッフル・前へ・次へ・オラクルのボタン
  • src/CubePhotoReconstructor: 写真2枚から54マスの読み取り、ルールの検査、自動補正
  • src/PhotoImportDialog: 写真の読み込み、通常・VLM スキャン、マスを押すと出る6色のリング
  • src/KociembaSolver、Oracle、BeginnerSolver、MoveSolver: 解き方。Kociemba → 短い探索 → 初心者向け層別の順に使います。
  • src/TcpCubeVlmClient、vlm_server: VLM スキャンのクライアントとサーバー
  • tools/face_scan_cli.py: 一面ずつ色を確認していたコマンドラインツール
  • third_party/ckociemba: Kociemba の C コード

ビルドは README のとおり cmake で行います。ビルドの成果物、仮想環境、Kociemba の表ファイル(cache)、テスト写真は載せていません。テストプログラム82個は、テスト写真のパスがコードに入っているため除きました。

全ソース

42ファイル · 11,309行 — フォルダを開いてファイルを押すとコードを読み込みます。

プロジェクトルート2ファイル
CMakeLists.txttext · 405行 · 20KB

コードを読み込んでいます…

README.mdmarkdown · 47行 · 1KB

コードを読み込んでいます…

src/21ファイル
src/BeginnerSolver.cppc++ · 1,095行 · 34KB

コードを読み込んでいます…

src/BeginnerSolver.hc++ · 11行 · 250B

コードを読み込んでいます…

src/CubeModel.cppc++ · 536行 · 19KB

コードを読み込んでいます…

src/CubeModel.hc++ · 64行 · 2KB

コードを読み込んでいます…

src/CubePhotoReconstructor.cppc++ · 3,353行 · 133KB

コードを読み込んでいます…

src/CubePhotoReconstructor.hc++ · 62行 · 2KB

コードを読み込んでいます…

src/CubeWidget.cppc++ · 737行 · 21KB

コードを読み込んでいます…

src/CubeWidget.hc++ · 108行 · 3KB

コードを読み込んでいます…

src/KociembaSolver.cppc++ · 172行 · 5KB

コードを読み込んでいます…

src/KociembaSolver.hc++ · 21行 · 611B

コードを読み込んでいます…

src/main.cppc++ · 19行 · 400B

コードを読み込んでいます…

src/MainWindow.cppc++ · 160行 · 6KB

コードを読み込んでいます…

src/MainWindow.hc++ · 26行 · 570B

コードを読み込んでいます…

src/MoveSolver.cppc++ · 144行 · 5KB

コードを読み込んでいます…

src/MoveSolver.hc++ · 28行 · 760B

コードを読み込んでいます…

src/Oracle.cppc++ · 422行 · 14KB

コードを読み込んでいます…

src/Oracle.hc++ · 18行 · 557B

コードを読み込んでいます…

src/PhotoImportDialog.cppc++ · 618行 · 24KB

コードを読み込んでいます…

src/PhotoImportDialog.hc++ · 62行 · 2KB

コードを読み込んでいます…

src/TcpCubeVlmClient.cppc++ · 252行 · 7KB

コードを読み込んでいます…

src/TcpCubeVlmClient.hc++ · 53行 · 1KB

コードを読み込んでいます…

third_party/15ファイル
third_party/ckociemba/coordcube.ctext · 366行 · 14KB

コードを読み込んでいます…

third_party/ckociemba/cubiecube.ctext · 693行 · 20KB

コードを読み込んでいます…

third_party/ckociemba/facecube.ctext · 130行 · 4KB

コードを読み込んでいます…

third_party/ckociemba/include/color.hc++ · 7行 · 144B

コードを読み込んでいます…

third_party/ckociemba/include/coordcube.hc++ · 113行 · 4KB

コードを読み込んでいます…

third_party/ckociemba/include/corner.hc++ · 10行 · 248B

コードを読み込んでいます…

third_party/ckociemba/include/cubiecube.hc++ · 68行 · 2KB

コードを読み込んでいます…

third_party/ckociemba/include/edge.hc++ · 9行 · 231B

コードを読み込んでいます…

third_party/ckociemba/include/facecube.hc++ · 41行 · 1KB

コードを読み込んでいます…

third_party/ckociemba/include/facelet.hc++ · 41行 · 2KB

コードを読み込んでいます…

third_party/ckociemba/include/prunetable_helpers.hc++ · 21行 · 627B

コードを読み込んでいます…

third_party/ckociemba/include/search.hc++ · 63行 · 3KB

コードを読み込んでいます…

third_party/ckociemba/prunetable_helpers.ctext · 77行 · 2KB

コードを読み込んでいます…

third_party/ckociemba/README.mdmarkdown · 6行 · 189B

コードを読み込んでいます…

third_party/ckociemba/search.ctext · 333行 · 11KB

コードを読み込んでいます…

tools/1ファイル
tools/face_scan_cli.pypython · 403行 · 13KB

コードを読み込んでいます…

vlm_server/3ファイル
vlm_server/cube_vlm_server.pypython · 488行 · 16KB

コードを読み込んでいます…

vlm_server/README.mdmarkdown · 21行 · 732B

コードを読み込んでいます…

vlm_server/requirements.txttext · 6行 · 72B

コードを読み込んでいます…