正在閱讀:跟我學(xué)Java Swing之游戲設(shè)計(jì)(2)跟我學(xué)Java Swing之游戲設(shè)計(jì)(2)

2005-10-14 10:46 出處: 作者:張劍 責(zé)任編輯:xietaoming

  上一節(jié):跟我學(xué)Java Swing之游戲設(shè)計(jì)(1)

  還記得《偷天換日》中精靈般穿梭在好萊塢車流中的Minicooper嗎?馬克·沃爾伯格和莎莉·賽隆就是駕駛著它在仇人的鼻子底下運(yùn)走了價(jià)值千萬的黃金?墒,如果現(xiàn)在將一輛無法奔馳的Minicooper軀殼放在你的面前,你會(huì)如何看待它?它還是那個(gè)游走自如的精靈嗎?今天,就讓我們一點(diǎn)一點(diǎn)地為這輛Minicooper組裝上零件,讓它跑起來。

  前言

  從本期開始,我們?yōu)榇蠹姨峁┩暾挠螒蛟创a(點(diǎn)擊下載)。Java咖啡館倡導(dǎo)大家理論與實(shí)踐并重,我們在連載中將給大家介紹關(guān)鍵技術(shù)以及實(shí)現(xiàn)思路,朋友們自行結(jié)合文章閱讀源代碼,好比一邊讀報(bào)一邊喝咖啡,這才是滴滴香濃意猶未盡。

  游戲布局

  “連連看”屬于一款二維戰(zhàn)棋類游戲,要設(shè)計(jì)棋盤類的游戲,GridLayout應(yīng)該是不二之選,F(xiàn)在讓我們一起來看看GridLayout的構(gòu)造函數(shù):

  ·GridLayout():默認(rèn)的情況下,將布局區(qū)域劃分為1*1的大小
  ·GridLayout(int rows,int cols):指定布局區(qū)域橫向和縱向的格子數(shù)
  ·GridLayout(int rows,int cols,int hgap,int vgap):同上,并且還指定了每個(gè)格子之間的橫向間距hgap和縱向間距vgap

  千萬別讓這三個(gè)構(gòu)造函數(shù)把你給嚇住了,其實(shí)只要你喜歡,完全可以放心大膽地使用其中的任何一個(gè),就算不小心用“錯(cuò)”了,以后也有辦法進(jìn)行調(diào)整。惟一需要注意的是,GridLayout在添加控件時(shí),默認(rèn)順序是從左上方向右下方依次添加的。

  現(xiàn)在讓我們來確定游戲的格子數(shù)目。究竟多少格子比較合適呢?太少會(huì)降低游戲的難度,太多又會(huì)造成視覺影響。所以,我們應(yīng)該通過一對常量來表示,將來即使要修改,也是舉手之勞。

  在Java中,常量的定義需要寫成public final static的形式,假如我們規(guī)定游戲的棋盤在橫向有8個(gè)格子,縱向也有8個(gè)格子,那么,我們應(yīng)該這樣定義:

public final static int ROW = 8;

public final static int COLUMN = 8;

  然后,我們使用GridLayout的第二種構(gòu)造函數(shù)來創(chuàng)建布局:

GridLayout gridLayout = new GridLayout(ROW, COLUMN);

  最后,我們還需要將游戲區(qū)(contentPanel)的布局改為上述布局:

contentPanel.setLayout(gridLayout);

  如果你此時(shí)編譯并運(yùn)行程序的話,你可能會(huì)奇怪:界面怎么沒有發(fā)生任何改變,是不是哪出錯(cuò)了?雖然我們指定了布局,可是什么控件也沒有添加,當(dāng)然就看不出變化。現(xiàn)在讓我們一起在布局上添加按鈕吧:

for (int i = 0; i < ROW * COLUMN; i++) {
  JButton button = new JButton("Kyodai");
  contentPanel.add(button);
}

  再運(yùn)行程序試試,是不是和我的一樣(見圖1)?

鍵盤也能翻頁,試試“← →”鍵
302 Found

302 Found


Powered by Tengine
tengine