2015-08-25 98 views
2

我正在做一個簡單的clojure掃雷遊戲,主要是練習一下這個語言。 「核心遊戲引擎」已經準備就緒,現在我想添加一個簡單的用戶界面。我看了一下seesaw,到目前爲止它的工作很好。如何爲簡單的掃雷遊戲創建MigLayout?

我唯一要努力的就是我想要使用的mig layout。我的想法是有那種以下佈局:

_______________________ 
[_________NORTH_________] 
[ ][    ][ ] 
[ W ][ FIXED ][ E ] 
[ E ][ SIZE  ][ A ] 
[ S ][ BOARD ][ S ] 
[ T ][    ][ T ] 
[___][_____________][___] 
[_________SOUTH_________] 

北部,西部,東部和南部將增長的情況下,調整窗口大小。主面板應該有一個固定大小的代表遊戲板的所有按鈕。

之前,我讀到MIG佈局我使用含網格面板邊框面板考慮,但作爲蹺蹺板github上頁提到:

蹺蹺板已在seesaw.core /形式GridBagLayout的基本支持面板功能。我不建議使用它,因爲它是一半的,並不像使用MigLayout(seesaw.mig)或JGoodies(seesaw.forms)那樣強大。

我想給MigLayout一個嘗試。我第一次嘗試:

(defn make-border-panel 
[] 
(mig-panel 
:constraints ["fill" "[grow][][grow]" "[grow][][grow]"] 
:items [ 
     ["X"     "shrink 0" ] 
     ["X"     "shrink 0" ] 
     ["X"     "shrink 0" ] 
     ["X"     "shrink 0" ] 
     ["X"     "shrink 0" ] 
     ["X"     "shrink 0" ] 
     ["X"     "shrink 0" ] 
     ["X"     "shrink 0" ] 
     ["X"     "shrink 0" ] 
     ["Minesweeper North" "dock north"] 
     ["W"     "dock west" ] 
     ["E"     "dock east" ] 
     ["Minesweeper South" "dock south"] 
     ])) 

更新1

我會忽略北,南,西,東的那一刻,也以下至少拿到中心板:

(defn make-button [x y] 
    (button :id (format "cell_%d_%d" x y) 
      :icon (clojure.java.io/resource "minesweeper/icons/button.png"))) 


(defn make-board 
    [w h] 
    (mig-panel 
     :constraints [(str "wrap" w) "[]" "[]" ] 
     :items (for [x (range w) y (range h)] 
      (vector (make-button x y) "w 24px!, h 24px!")))) 
+0

好的。你有問題嗎? –

+0

其實,我如何才能實現固定大小的中心提到的邊界佈局。 「更新1」應該只是一箇中間解決方案,而我想出如何做到這一點。 – u6f6o

回答

0

我意識到我並不需要WEST和EAST面板來開展我的掃雷遊戲。我的最終佈局如下所示:

_____________ 
[____NORTH____] 
[    ] 
[    ] 
[ CENTER ] 
[    ] 
[_____________] 
[____SOUTH____] 

中心本身是另一個包含代表地雷的按鈕的mig面板。 clojure中的代碼如下所示:

(defn make-layout 
    [rows cols level] 
    (mig-panel 
    :constraints ["wrap1" "[center]" "[][]" ] 
    :items  [[(make-info-panel)] 
       [(make-board-panel rows cols level)]])) 


(defn make-board-panel 
    [rows cols level] 
    (let [bg (button-group)] 
    (mig-panel 
    :constraints [(str "gap 0, wrap" rows) "[]" "[]" ] 
    :items  (for [row (range rows) col (range cols)] 
        (vector (make-button row col level bg) "w 24px!, h 24px!")))))