2007年11月14日 星期三

棘手



討論 8-Puzzle Game
 a. 狀態表示方式 (state representation)
8-Puzzle遊戲中的表示方式我是使用Label和Bevel兩個物件去構成一個小的九宮格
123
456
789
圖片切成的小塊分別對應這9塊

 b. 搜尋演算法 (state space search)
若是搜尋路徑的演算法的話
我是想到兩種
一個是課堂說的
建構一棵樹
循著這棵樹去把最短的那幾條路徑給找出來

另一種是把它當成一種排序
只是是一種有設立一些規則的立體排序
把BUBBLE SORT這類的排序法當作應用去做

 c. 遊戲初始打亂演算法 (initialization)
其實這部分想到歸想到
但是在實作的時候有碰到幾個麻煩

一開始我是想說寫幾個副程式去減少重複的CODE
可是要是碰到物件的時候
譬如說我的Label1控制
程式內本來是
Label1->Caption = IntToStr(puzzle8[0]);
可是因為寫成副程式
我必須多加上這個FORM的名稱(我的是DMC)
變成
DMC->Label1->Caption = IntToStr(puzzle8[0]);

但這還不是麻煩
最麻煩的是我打算動態去做Image物件內容的變換的時候
是使用FindComponent這個函式
試了許久
都會出現Member identifier expected這個警告
本來打算先放棄不寫完了
後來想到直接把函式直接寫在程式裡面也是可以...
這樣就不會出現這個ERROR的問題了

接著就是怎麼讓程式去跑
一開始的想法是
初值是9
從9開始去隨選路線
因為是使用陣列控制
所以作交換的時候
四個方向就是分別對原本的陣列作+3或-3或+1或-1的位置去做交換就行了

可是我又再作的時候
似乎又有RANDOM的選取問題
頭腦有點打結

所以最後決定照這個想法
但是使用比較暴力的寫法
用兩層switch去控制
不再用通式去做計算
不過這暴力的有點過頭
我自己都覺得不太好意思把code拿出來orz

code是長了一點
不過作打亂的時候是ok的
也試了幾次也ok可以排回來
找時間在縮短一點code

至於本來有個bug
是交換的時候
初始flag是9
要是我換了嫌不夠亂
在按一次按鈕的時候
本來有排不回來的狀況

是因為排亂第一次的時候
最後白色區塊不一定會在右下
所以flag不能設9
要保留原值

然後是缺失
我沒有去記憶之前的路線
完全是死的亂走
有可能會走原路回來
所以步數我不是設30步了
設成100步
亂的樣子才會有出來

關於程式大概就這個樣子

------------------------

問題的話
是關於css的
因為感覺他用起來和html+java script有點像
那麼
到底有什麼樣明顯性的差異呢?

沒有留言:

張貼留言