Jul 11, 2008

魔術方塊

魔術方塊是種有趣的玩具,不過我從來也沒花時間去玩過,反到是這次為了解一些問題,寫了個陽春的方塊程式。


寫之前覺得資料結構的定義似乎有些困難,主要是做下去的話希望做到能記錄步驟、自動倒帶、動態生成可復原的方塊跟解未知的方塊。最後一項最難,因為我用大腦也還不知道怎麼解,所以「不是很重要」。前幾項再思考之後到是迎刃而解。

其實3x3x3的方塊有個簡單的特性(奇數階的都是),那就是每一面的中心都對應到3d座標軸xyz的正負向,而且不管方塊怎麼轉,這六個中心點的相對位置都是不變的,到這裡如何表示旋轉的方塊已經很明顯了。既然原理如此,程式就這麼寫了,這也讓步驟記錄變得簡單,現在只需要記xyz的正負向轉了幾個九十度了!不過這種工程師的想法最後還是遇上了問題。

結果就像上圖,不過個人偷懶,陽春的海狗引擎到現在還沒支援滑鼠!東西包一包就丟給同事實驗了,本來是打算試範3d的座標轉換跟hierarchy結構的。老闆說這很不直觀也很難操作,聽了是有些小不爽,不過這就是end-user的感覺,不是個容易設計的部份,就像玩360的3d game,我到現在也還不是很習慣那個操作桿的使用方式。(玩了幾年wow,倒是非常適應wasd跟滑鼠模式)

因為這個小程式,除了解掉原本的問題外,現在可以有獨立的render thread了,每個timer都是thread,不過這也是因為打算給同事看時,覺得老闆一定會去看cpu usage,到時候又不能解釋「那不是3d的部份用掉的」,所以用力的改成多緒引擎啊(因為本來是單緒的,timer也是用busy loop做)!

No comments: