三階魔方自動還原 vc實現

來源:互聯網
上載者:User

    魔方自動求解程式一般有兩種方法,一種是按照人還原魔方的步驟,一步步來,另外一種是使用數學方法,魔方自有一套複雜的數學理論,其中較著名的是兩階段演算法(壓縮檔中的cube430.exe使用的就是數學方法,程式作者便是two-phase演算法發明人,文檔中有該演算法的簡介,遺憾的是沒有找到該程式的源碼)。

本程式使用的便是第一種方法。

 

程式介面仿wca的cube430.exe(檔案夾中的wca-explorer.zip是這個程式的壓縮包)
程式還有bug,程式可能自動產生一個ml檔案,用以儲存bug發生時的魔方狀態。但也可能是其他錯誤。
如果你把自動產生的ml檔案(在bug檔案夾中)或者錯誤資訊Email給我,我會非常感激。

 

歡迎批評和建議。

 

這個程式還不完善,現階段僅供學習之用:

  1. 尚未加入還原手法輸出功能
  2. 尚未實現魔方狀態有效性檢測

實驗方法:

  1. 依次點擊介面中的按鈕:
    Cross:  在Front面實現Cross,然後把Cross轉到底面(x')
    L1Corner: 還原底層角塊
    L2Edge: 還原第二層棱塊
    TopCross: 建立頂層十字
    MatchCross: 對好十字
    BackTopCorner 頂層四角塊歸位
    RestoreTopCorener還原四角塊
  2. rotate組合框中是幾個常用的魔方旋轉操作,但是太少,可以使用Excute按鈕前面的文字框輸入旋轉命令。命令名參考檔案夾中的command-conventions.bmp中示意的命令名約定。
  3. Reset按鈕重設魔方
  4. Empty便於抄寫魔方。點擊每個面這中間塊,則選中該塊顏色,點擊非中間塊,則該塊顏色被改為當前選中顏色。由於尚未加入魔方有效性檢測,如果改變顏色後使魔方無效,則程式會出錯。
  5. save和open按鈕用來儲存和開啟魔方狀態檔案(*.ml)
  6. random打亂魔方狀態
  7. solution按鈕相當於連續執行了步驟1 中提到的按鈕對應的函數

    本程式試圖使用兩套手法實現魔方還原,但現在只實現了一種(兩套手法的任意一種都能使程式正常運行)。兩種手法的區別在於第三層的還原。前兩層是一樣的。
第一種手法的Cross的實現使用的是當前流行手法。其餘的步驟用到的手法主要參考了檔案夾中的“魔方教程.pdf”,作者是廈門大學的何美生。程式中的函數與教程中的步驟是一一對應的。
本程式使用到的資料在information檔案夾中。

 

下面幾個函數
   //2:cfop
   void HashOLL(char*);
   bool IsTopFaceRestored(void);
   void OLL(void);
   void HashPLL(char*);//not finished
   void PLL(void);
   void CFOP(void);
是第二套手法用到的函數,其中的最後一步
   void HashPLL(char*);//not finished
   void PLL(void);
兩個函數尚未實現。

 

經驗總結:

  1. 當要處理的狀態是很多可能狀態之一,而識別出當前的狀態是哪種狀態又比較困難時,可以考慮構造hash函數,以區別每一種狀態。求出所有可能狀態的hash值和目前狀態hash值,識別目前狀態是哪種狀態時搜尋hash值即可。本程式中第二種手法還原頂面時即用到該方法。使用狀態hash的方法,可以屏蔽掉狀態的複雜性。但是我想到這個方法時,前面的程式已經成型了,所以第一種方法實現時還是用了很多if-else或者switch,搞得頭暈。
  2. 本程式在調試時也遇到了很大麻煩,不可能一開始就設斷點調試的。後來採用的方法是每一個函數在出現問題時儲存目前狀態成檔案,然後開啟檔案,繼續執行時才在對應函數中設斷點調試

    歡迎此類經驗的交流,如果你想到或用到了其他的方法,歡迎跟大家一起分享。

 

源碼下載 http://download.csdn.net/source/2772692

有些朋友下載後運行不了,是我的失誤,如果你沒裝vs2008,可能運行不了,因為vs2008編譯後的程式要用到mfc90.dll等幾個vs2008中的動態連結程式庫,而我在上傳時沒考慮到這點。那麼暫時請用自己的編譯器重新編譯吧,把My Code只在cXDlg的標頭檔和cpp檔案中,很容易重新編譯的。

至於解壓不了,應該是下載時出現的錯誤,請重新下載。

 

程式運行:

1.打亂 

 

 

2.Cross:  在Front面實現Cross,然後把Cross轉到底面(x')

 

3.L1Corner: 還原底層角塊

 

4.L2Edge: 還原第二層棱塊

 

5.TopCross: 建立頂層十字 

 

6.MatchCross: 對好十字

 

7.BackTopCorner 頂層四角塊歸位

8.RestoreTopCorener還原四角塊

 

 

先前用OpenGL寫了一個三維魔方,但是不會自動還原,而且沒有加入360°視角轉換和旋轉動態。

以後可能把自動還原寫成3d,這樣可以更直觀,更酷

 

 

=====================================================

更新:

魔方自動還原程式3D版本和2D 修正版已經放出來了

http://blog.csdn.net/onezeros/archive/2010/10/25/5964280.aspx

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.