2014年3月6日 星期四

JavaFX Puzzle

拼圖 (Puzzle) 是一種益智類遊戲,拼圖常依難易度之不同,將圖像分成3×3、4×4、5×5等不同等分的零片 (Piece),接著再隨機將各圖像零片任意擺放。為了能移動零片,遊戲會將其中一圖像零片換成空格,以方便其它的零片移動,遊戲的目的是利用此一空格,移動其餘零片,以完成原有圖像,此類遊戲又稱為Slider Puzzle,如下圖所示:
Slider Puzzle

處理拼圖常以陣列的方式定義原有圖像零片的位置序號,以上圖為例,圖像均分為3×3等分,因此編號依序由1至9,為能使零片移動,通常設定編號9為空格,接著定義一個一維陣列,依序設定零片序號以代表其正確位置,例如:


int pic[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};

for (i=0;i<9;i++) {

  pic[i]= i;
}


接著再隨機擺放各零片位置,每次移動空格時,仍依序判斷圖像目前的位置序號與原有序號是否相同,若完全相同,則代表為原有圖像樣式,拼圖則完成,例如:


for (int i=0;i<9;i++) {
  if (pic[i] == i) { 
    // 成功
    ... 
  }
}


此外,拼圖又可分為Jigsaw Puzzle與Flip Strip Puzzle,分別如下圖所示,雖然樣式不同,但其原理都一樣,均是以陣列設定每一圖像零片原有的位置序號,待解答時,再以迴圈依序判斷各零片目前的位置序號與原有序號是否相同:
Jigsaw Puzzle

Flip Strip Puzzle

此次以JavaFX設計Puzzle遊戲,分別設計Slider Puzzle與Jigsaw Puzzle兩種樣式,其中Slider Puzzle如下圖所示
其次Jigsaw Puzzle加入以下功能:
  • 等分切割圖像,並以Jigsaw樣式處理拼圖。
  • 以選單選擇圖像。
  • 提供自行解答功能。
當選取Start選單項目時,則將所選擇的圖像等分切割成Jigsaw樣式的零片,並以動畫的方式隨機移動零片:
當選取Solve選單項目時,則依序將每一片零片移回原本的位置,並以動畫的方式移動零片:
© Chia-Hui Huang


沒有留言:

張貼留言