五子棋小游戲課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  五子棋小游戲</b></p><p>  1.課程設(shè)計(jì)的目的 </p><p>  通過(guò)此次課程設(shè)計(jì),鞏固所學(xué)Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯基本功,掌握J(rèn)DK、Editplus、Eclipse、JCreator等開(kāi)發(fā)工具的運(yùn)用,拓寬常用類庫(kù)的應(yīng)用。使我們通過(guò)該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知識(shí)加以融會(huì)貫通,全面掌握J(rèn)ava語(yǔ)

2、言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法,為今后從事實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。</p><p><b>  2.設(shè)計(jì)方案論證</b></p><p><b>  2.1設(shè)計(jì)思路</b></p><p><b>  (1)界面棋盤(pán)設(shè)計(jì)</b></p><p>  在對(duì)棋盤(pán)界面設(shè)計(jì)方面要

3、考慮簡(jiǎn)潔友好,符合游戲者需求。棋子的設(shè)計(jì)方面系統(tǒng)中設(shè)置了兩種棋子顏色,white或者black, 游戲者可自行選擇。棋子怎樣畫(huà)出來(lái),怎樣使棋子按我們所想的方式來(lái)繪制出來(lái)是設(shè)計(jì)的主要難題。運(yùn)行時(shí)要求當(dāng)每次點(diǎn)擊鼠標(biāo)的時(shí)候就在點(diǎn)擊鼠標(biāo)的地方畫(huà)一個(gè)棋子,所以得定義一個(gè)棋子的類使點(diǎn)擊鼠標(biāo)時(shí)系統(tǒng)把棋子繪制出來(lái)。這樣主界面里的棋子就確定了,而且也確定了幾個(gè)所需要的類。可以先定義好這些類了。</p><p>  有了以上的準(zhǔn)備就

4、可以把棋盤(pán)繪制出來(lái)了,下棋時(shí)每次在適當(dāng)位置點(diǎn)擊鼠標(biāo)的時(shí)候就在所點(diǎn)擊的位置上畫(huà)出你這個(gè)角色的顏色,然后計(jì)算機(jī)會(huì)自動(dòng)的下棋,計(jì)算機(jī)自動(dòng)下棋要有一個(gè)控制變量來(lái)控制能不能下棋。人可以隨意的下子,可是計(jì)算機(jī)就要計(jì)算在哪個(gè)位置下子了。這里由計(jì)算機(jī)下子的算法來(lái)確定,人人對(duì)戰(zhàn)的話就不象單機(jī)游戲一樣,要計(jì)算機(jī)來(lái)判斷人下子之后計(jì)算機(jī)下那一個(gè)地方了,人人對(duì)戰(zhàn)只要在雙方下子的時(shí)候判斷贏棋情況,當(dāng)然還要同步的控制兩個(gè)人下棋的順序,這樣的話就要用到線程了,各自都繼

5、承或?qū)崿F(xiàn)線程類或接口,以便各自能隨時(shí)單獨(dú)控制接發(fā)消息。</p><p><b>  (2)算法設(shè)計(jì)</b></p><p>  對(duì)于五子棋游戲,無(wú)論人機(jī)對(duì)戰(zhàn),還是雙人對(duì)戰(zhàn),都需要判斷棋盤(pán)上是否存在五子連珠情況,這既是游戲名字的由來(lái),也是游戲結(jié)束的標(biāo)志。判斷五子連珠的原理是從橫,豎,左斜線,右斜線4條線上判斷是否存在5個(gè)相連的同類棋子。</p><p

6、>  對(duì)戰(zhàn)一方落子后,在該處向8個(gè)方向檢測(cè)連續(xù)的同類棋子,如果檢測(cè)到直線方向上存在5個(gè)連續(xù)的同類棋子(包含本位置棋子),則判斷為“連五”并結(jié)束檢測(cè)循環(huán)?;跈z測(cè)結(jié)果,可以判斷游戲是否結(jié)束,并根據(jù)獲勝方的落子代碼判斷獲勝方是誰(shuí)。</p><p>  由于不考慮禁手問(wèn)題,在實(shí)現(xiàn)“連五”過(guò)程中,我們可以考慮完成“雙四”,“四三”,“雙三”,“沖四”,“活三”,“活四”來(lái)實(shí)現(xiàn)目的。</p><p

7、>  活四:有兩個(gè)點(diǎn)能形成“連五”的四就是活四;</p><p>  沖四:只有一個(gè)點(diǎn)能形成“連五”的四叫做“沖四”,或者叫做“單四”;</p><p>  活三:己方在落一子就能形成“活四”的三叫做“活三”?!盎钊狈譃椤斑B活三”和“跳活三”。連活三:在棋盤(pán)某一條陽(yáng)線或陰線上有同色三子相連,且在此三子兩端延長(zhǎng)線上有一端至少有一個(gè),另一端至少有兩個(gè)無(wú)子的交叉點(diǎn)與此三子緊密相連。跳活三

8、:中間僅間隔一個(gè)無(wú)子交叉點(diǎn)的連三,但兩端延長(zhǎng)線均至少有一個(gè)無(wú)子的交叉點(diǎn)與此三子相連。</p><p>  雙三:由于黑方走一著在無(wú)子交叉點(diǎn)上同時(shí)形成二個(gè)或二個(gè)以上黑方 " 活 " 的局面。</p><p>  雙四:由于黑方走一著在無(wú)子交叉點(diǎn)上同時(shí)形成二個(gè)或二個(gè)以上黑方 " 四 " 的局面。 </p><p>  四三:指某一

9、方同時(shí)具備兩個(gè)先手,其中一個(gè)是 " 四 " ,一個(gè)是 " 活三 " 。</p><p>  在實(shí)現(xiàn)上面這些高級(jí)算法的時(shí)候,我們需要一個(gè)基礎(chǔ),就是對(duì)制定位置周圍情況進(jìn)行檢測(cè)。在棋盤(pán)上面,棋子存在8個(gè)移動(dòng)方向,檢測(cè)時(shí)需要對(duì)每個(gè)方向進(jìn)行檢測(cè)。為了簡(jiǎn)單直觀,這里將每步棋子的移動(dòng)生成一個(gè)新的棋子。</p><p><b>  2.2需求分析</

10、b></p><p>  一款小游戲的確立是建立在各種各樣的需求上面的,這種需求往往來(lái)自于玩家的實(shí)際需求,其中玩家的實(shí)際需求最為重要.面對(duì)游戲擁有不同知識(shí)和理解層面的玩家,游戲制作人對(duì)玩家需求的理解程度,在很大程度上決定了此類游戲開(kāi)發(fā)的成敗.因此如何更好地的了解,分析,明確玩家需求,并且能夠準(zhǔn)確,清晰以文檔的形式表達(dá)給游戲制作人,保證開(kāi)發(fā)過(guò)程按照滿足玩家需求為目的正確開(kāi)發(fā)方向進(jìn)行,是每游戲游戲制作人需要面對(duì)

11、的問(wèn)題。</p><p>  作為五子棋的設(shè)計(jì)需要考慮到的最基本的需求莫過(guò)于人機(jī)對(duì)戰(zhàn)與人人對(duì)戰(zhàn)功能的實(shí)現(xiàn),當(dāng)然還有下棋過(guò)程中的下棋悔棋功能以及判斷游戲的勝負(fù)等方面的要求。當(dāng)然最好是要考慮到界面的友好性,作為一個(gè)娛樂(lè)軟件,還應(yīng)該考慮到玩家在游戲時(shí)的舒適性。</p><p><b>  2.3功能模塊圖</b></p><p><b> 

12、 2.4設(shè)計(jì)方法</b></p><p>  2.4.1 ChessFrame主要功能</p><p>  類ChessFrame主要功能是創(chuàng)建五子棋游戲主窗體和菜單,主要代碼如下:</p><p>  class ChessFrame extends JFrame implements ActionListener {</p><p

13、>  private String[] strsize={"20x15","30x20","40x30"};</p><p>  private String[] strmode={"人機(jī)對(duì)弈","人人對(duì)弈"};</p><p>  public static boolean isco

14、mputer=true,checkcomputer=true;</p><p>  private int width,height;</p><p>  private ChessModel cm;</p><p>  private MainPanel mp;</p><p>  2.4.2 游戲主窗體</p><p&

15、gt;  構(gòu)造五子棋游戲的主窗體,主要代碼如下:</p><p>  public ChessFrame() {</p><p>  this.setTitle("五子棋游戲");</p><p>  cm=new ChessModel(1);</p><p>  mp=new MainPanel(cm);</p&g

16、t;<p>  Container con=this.getContentPane();</p><p>  con.add(mp,"Center");</p><p>  this.setResizable(false);</p><p>  this.addWindowListener(new ChessWindowEvent(

17、));</p><p>  MapSize(20,15);</p><p>  JMenuBar mbar = new JMenuBar();</p><p>  this.setJMenuBar(mbar);</p><p>  JMenu gameMenu = new JMenu("游戲");</p>&

18、lt;p>  mbar.add(makeMenu(gameMenu, new Object[] {</p><p>  "開(kāi)局", "棋盤(pán)","模式", null, "退出"</p><p>  }, this));</p><p>  JMenu lookMenu =new JM

19、enu("視圖");</p><p>  mbar.add(makeMenu(lookMenu,new Object[] {</p><p>  "Metal","Motif","Windows"</p><p><b>  },this));</b></p&

20、gt;<p>  JMenu helpMenu = new JMenu("幫助");</p><p>  mbar.add(makeMenu(helpMenu, new Object[] {</p><p><b>  "關(guān)于"</b></p><p>  }, this));</p&

21、gt;<p><b>  }</b></p><p><b>  2.4.3 主菜單</b></p><p>  構(gòu)造五子棋游戲的主菜單,代碼如下:</p><p>  public JMenu makeMenu(Object parent, Object items[], Object target){&l

22、t;/p><p>  JMenu m = null;</p><p>  if(parent instanceof JMenu)</p><p>  m = (JMenu)parent;</p><p>  else if(parent instanceof String)</p><p>  m = new JMenu(

23、(String)parent);</p><p><b>  else</b></p><p>  return null;</p><p>  for(int i = 0; i < items.length; i++)</p><p>  if(items[i] == null)</p><p

24、>  m.addSeparator();</p><p>  else if(items[i] == "棋盤(pán)"){</p><p>  JMenu jm = new JMenu("棋盤(pán)");</p><p>  ButtonGroup group=new ButtonGroup();</p><p&g

25、t;  JRadioButtonMenuItem rmenu;</p><p>  for (int j=0;j<strsize.length;j++){</p><p>  rmenu=makeRadioButtonMenuItem(strsize[j],target);</p><p><b>  if (j==0)</b></

26、p><p>  rmenu.setSelected(true);</p><p>  jm.add(rmenu);</p><p>  group.add(rmenu);</p><p><b>  }</b></p><p>  m.add(jm);</p><p>  }e

27、lse if(items[i] == "模式"){</p><p>  JMenu jm = new JMenu("模式");</p><p>  ButtonGroup group=new ButtonGroup();</p><p>  JRadioButtonMenuItem rmenu;</p><

28、p>  for (int h=0;h<strmode.length;h++){</p><p>  rmenu=makeRadioButtonMenuItem(strmode[h],target);</p><p><b>  if(h==0)</b></p><p>  rmenu.setSelected(true);</p

29、><p>  jm.add(rmenu);</p><p>  group.add(rmenu);</p><p><b>  }</b></p><p>  m.add(jm);</p><p><b>  }else</b></p><p>  m.a

30、dd(makeMenuItem(items[i], target));</p><p><b>  return m;</b></p><p><b>  }</b></p><p><b>  3.設(shè)計(jì)結(jié)果與分析</b></p><p>  (1)五子棋游戲的主界面,如圖2所

31、示。</p><p><b>  圖2 程序主界面</b></p><p>  (2)五子棋游戲的結(jié)束界面,如圖3所示。</p><p><b>  圖3 游戲結(jié)束界面</b></p><p>  (3)游戲游戲欄中的各個(gè)選項(xiàng),如圖4所示。</p><p>  圖4 Game

32、欄中的選項(xiàng)</p><p>  (4)視圖設(shè)置欄中的各個(gè)選項(xiàng),如圖5所示。</p><p>  圖5 Configure欄中的各個(gè)選項(xiàng)</p><p>  (5)Help幫助欄中的選項(xiàng),如圖6所示。</p><p>  圖6 Help欄中的選項(xiàng)</p><p>  (6)點(diǎn)擊Help欄中的About選項(xiàng)彈出的界面,如圖

33、7所示。</p><p>  圖7 About選項(xiàng)彈出時(shí)的界面</p><p><b>  4.設(shè)計(jì)體會(huì)</b></p><p>  通過(guò)這次課程設(shè)計(jì),我進(jìn)一步加深對(duì)基礎(chǔ)理論的理解,擴(kuò)大專業(yè)知識(shí)面,對(duì)收集資料、查閱文獻(xiàn)、方案制定等實(shí)踐方面得到了很好的鍛練,促進(jìn)對(duì)所學(xué)知識(shí)應(yīng)用能力的提高。同時(shí)我漸漸的復(fù)習(xí)了Java使用方法和編程語(yǔ)法,之后的編程過(guò)程

34、也相對(duì)得心應(yīng)手,基本完成了預(yù)期計(jì)劃的要求。在此感謝我的指導(dǎo)老師—馮云老師,她在課題的研究上不遺余力的給予指導(dǎo)。她嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度深深的影響了我,使我受益匪淺!</p><p><b>  5.參考文獻(xiàn)</b></p><p>  [1]耿祥義.JAVA大學(xué)實(shí)用教程.北京:電子工業(yè)出版社.2005.3:85-113</p><p>  [2]朱戰(zhàn)立

35、,沈偉.Java程序設(shè)計(jì)實(shí)用指南.北京:電子工業(yè)出版社,2005.1:48-135</p><p>  [3] 唐大仕.Java程序設(shè)計(jì)[M]. 北京:北方交通大學(xué)出版社:2007.05:56-92 </p><p>  [4]葉核亞. JAVA2程序設(shè)計(jì)實(shí)用教程[M].北京:電子工業(yè)出版社;2008.4:64-98</p><p>  [5]邢素萍. JAVA辦

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論