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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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>  計(jì)算機(jī)技術(shù)的不斷發(fā)展給人們的日常工作和生活都帶來(lái)了許多益處, 從Windows系統(tǒng)的推出使電腦從高雅的學(xué)術(shù)殿堂走入了尋常百姓家開(kāi)始,各行各業(yè)的人們無(wú)須經(jīng)過(guò)特別的訓(xùn)練就能夠使用電腦完成許許多多復(fù)雜的工作。然而,雖然現(xiàn)在世界上已經(jīng)充滿(mǎn)了花樣繁多的各種軟件,但它

2、們依然不能滿(mǎn)足用戶(hù)的各種特殊需要,人們還不得不開(kāi)發(fā)適合自己特殊需求的軟件。Java語(yǔ)言作為一種面向?qū)ο蟮木幊陶Z(yǔ)言,具有分布式,可移植,高性能等特點(diǎn)。通過(guò)系統(tǒng)的學(xué)習(xí),就可以使用它開(kāi)發(fā)出功能齊全,滿(mǎn)足特殊需求的應(yīng)用程序。它對(duì)學(xué)習(xí)者掌握技能,開(kāi)拓思維都有很大的幫助。</p><p>  Java語(yǔ)言的開(kāi)發(fā)方法是當(dāng)今世界最流行的開(kāi)發(fā)方法,是當(dāng)今流行的網(wǎng)絡(luò)編程語(yǔ)言。它具有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。它不僅具有更貼近自

3、然的語(yǔ)義,而且有利于軟件的維護(hù)和繼承。很多程序開(kāi)發(fā)人員得第一選擇。為了將課堂上得知識(shí)掌握得更加透徹,深刻把握J(rèn)ava語(yǔ)言的重要概念及其面向?qū)ο蟮奶匦?,鍛煉學(xué)生熟練的應(yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問(wèn)題的能力,開(kāi)設(shè)了Java程序設(shè)計(jì)課程設(shè)計(jì)。讓學(xué)生自己動(dòng)手動(dòng)腦,將書(shū)本上得知識(shí)運(yùn)用到實(shí)踐當(dāng)中去,使知識(shí)能更好得融會(huì)貫通。</p><p>  通過(guò)自己動(dòng)手,自主得學(xué)習(xí),對(duì)Java這門(mén)課程有更深得了解與認(rèn)識(shí),并通過(guò)自己

4、動(dòng)手,自主得學(xué)習(xí),對(duì)Java這門(mén)課程有更深得了解與認(rèn)識(shí),通過(guò)本次課設(shè),實(shí)現(xiàn)本學(xué)期內(nèi)容的回顧與綜合運(yùn)用,包括類(lèi)的建立,用類(lèi)創(chuàng)建對(duì)象,方法的調(diào)用,圖形組建的使用方法,圖形界面的布局形式,事件處理機(jī)制,文件對(duì)話(huà)框的使用,文件操作的基本方法,數(shù)據(jù)讀寫(xiě)的基本用法等。</p><p>  這次課程設(shè)計(jì)我主要研究了利用已學(xué)的Java知識(shí)編輯一個(gè)五子棋小游戲。通過(guò)此次課程設(shè)計(jì),來(lái)鞏固所學(xué)Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯

5、基本功,掌握J(rèn)DK、JCreator等開(kāi)發(fā)工具的運(yùn)用,拓寬常用類(lèi)庫(kù)的應(yīng)用。</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ì)方面

6、要考慮簡(jiǎn)潔友好,符合游戲者需求。棋子的設(shè)計(jì)方面系統(tǒng)中設(shè)置了兩種棋子顏色,黑色或者白色, 游戲者可自行選擇。棋子怎樣畫(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è)棋子的類(lèi)使點(diǎn)擊鼠標(biāo)時(shí)系統(tǒng)把棋子繪制出來(lái)。這樣主界面里的棋子就確定了,而且也確定了幾個(gè)所需要的類(lèi)??梢韵榷x好這些類(lèi)了。</p><p>  有了以上的準(zhǔn)備就可以把棋盤(pán)

7、繪制出來(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)的話(huà)就不象單機(jī)游戲一樣,要計(jì)算機(jī)來(lái)判斷人下子之后計(jì)算機(jī)下那一個(gè)地方了,人人對(duì)戰(zhàn)只要在雙方下子的時(shí)候判斷贏棋情況,當(dāng)然還要同步的控制兩個(gè)人下棋的順序,這樣的話(huà)就要用到線(xiàn)程了,各自都繼承或?qū)崿F(xiàn)線(xiàn)

8、程類(lèi)或接口,以便各自能隨時(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)志。判斷五子連珠的原理是從橫,豎,左斜線(xiàn),右斜線(xiàn)4條線(xiàn)上判斷是否存在5個(gè)相連的同類(lèi)棋子。</p><p> 

9、 對(duì)戰(zhàn)一方落子后,在該處向8個(gè)方向檢測(cè)連續(xù)的同類(lèi)棋子,如果檢測(cè)到直線(xiàn)方向上存在5個(gè)連續(xù)的同類(lèi)棋子(包含本位置棋子),則判斷為“連五”并結(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> 

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

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

12、兩個(gè)先手,其中一個(gè)是 " 四 " ,一個(gè)是 " 活三 " 。</p><p>  在實(shí)現(xiàn)上面這些高級(jí)算法的時(shí)候,我們需要一個(gè)基礎(chǔ),就是對(duì)制定位置周?chē)闆r進(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需求分析</b>

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

14、lt;/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系統(tǒng)流程圖</b></p><p><b>  圖1程序

15、流程圖</b></p><p><b>  2.4設(shè)計(jì)方法</b></p><p>  2.4.1主要方法設(shè)計(jì)</p><p>  五子棋的娛樂(lè)性強(qiáng)、規(guī)則簡(jiǎn)單、易學(xué)、流行性廣,普通人不需長(zhǎng)時(shí)間專(zhuān)門(mén)訓(xùn)練即可自如行棋,因此極受大眾喜歡,本系統(tǒng)可以實(shí)現(xiàn)人與人手動(dòng)下棋,掃描整個(gè)棋盤(pán)記錄連在一起的黑白棋子數(shù),實(shí)現(xiàn)人與人有次序的下棋,判斷人與人

16、的勝負(fù),為人下棋提供幫助,五子棋規(guī)則為:</p><p> ?。?)本游戲可選擇人與人對(duì)戰(zhàn)模式。</p><p> ?。?)下法:兩人分別執(zhí)黑白兩色棋子,輪流在棋盤(pán)上選擇一個(gè)無(wú)子的交叉點(diǎn)落子,無(wú)子的交叉點(diǎn)又被稱(chēng)為空點(diǎn)。</p><p> ?。?)輸贏判斷:黑、白雙方有一方的五個(gè)棋子在橫、豎或斜方向上連接成一線(xiàn)即為該方贏。</p><p>&l

17、t;b>  表1.主要方法</b></p><p>  2.4.2程序中類(lèi)及成員變量的說(shuō)明</p><p>  程序中所含的各個(gè)類(lèi)名、類(lèi)的作用及其子類(lèi)父類(lèi),如表2所示:</p><p>  表2.類(lèi)表及其子類(lèi)父類(lèi)</p><p>  表3.主要成員變量(屬性)</p><p>  2.3.3 java

18、源文件及其功能</p><p>  表4 .java源文件及其功能</p><p>  2.3.4五子棋游戲中的注冊(cè)監(jiān)聽(tīng) </p><p>  對(duì)角色選擇按鈕注冊(cè)ActionListener監(jiān)聽(tīng),設(shè)置用戶(hù)的角色。定義黑子int類(lèi)型 0,白子1。</p><p>  對(duì)按鈕開(kāi)始、重置注冊(cè)ActionListener監(jiān)聽(tīng),如果點(diǎn)擊開(kāi)始,用戶(hù)進(jìn)

19、 入下棋狀態(tài),有一方贏了,棋盤(pán)上則不能再點(diǎn)擊棋子。點(diǎn)擊重置,則開(kāi)始新的一輪。</p><p>  對(duì)鼠標(biāo)注冊(cè)mouseClicked監(jiān)聽(tīng),鼠標(biāo)點(diǎn)擊棋盤(pán)時(shí)獲取下棋的位置。</p><p>  對(duì)JTextField注冊(cè)ActionListener,用戶(hù)輸入聊天信息后,通過(guò)Server傳遞給其他用戶(hù),在對(duì)話(huà)框JTextArea內(nèi)顯示。</p><p>  class S

20、erverThread implements Runnable{ }類(lèi)監(jiān)聽(tīng)線(xiàn)程,監(jiān)聽(tīng)是否有客戶(hù)端法過(guò)信息來(lái)。</p><p> ?。?)屬性:Vector threads 向量存儲(chǔ)線(xiàn)程,Socket socket 服務(wù)端口,DataInputStream in 輸入流,DataOutputStream out 輸出流,int nid 用戶(hù)ID。</p><p> ?。?)方法:構(gòu)造器pu

21、blic ServerThread(Socket socket,Vector threads),實(shí)現(xiàn)信息的輸入、輸出,和public void run()監(jiān)聽(tīng)客戶(hù)端是否發(fā)信息過(guò)來(lái),當(dāng)客戶(hù)離開(kāi)時(shí)向,其他客戶(hù)發(fā)信息,把客戶(hù)端的信息發(fā)給其他客戶(hù)。 </p><p>  2.3.5 游戲整體設(shè)計(jì)</p>&l

22、t;p>  (1)五子棋的游戲主界面</p><p>  五子棋主界面包括ChessBot.java,ChessMap.java,ChessPanel.java和Console.java四個(gè)文件。ChessMap是該五子棋游戲的主運(yùn)行類(lèi),其中有運(yùn)行整個(gè)程序的main方法,該文件生成了ChessMap類(lèi)的一個(gè)實(shí)例,從而生成了五子棋游戲的界面ChessMap類(lèi)將所有的功能集中到菜單欄中,并通過(guò)調(diào)用其他模塊來(lái)實(shí)現(xiàn)

23、五子棋游戲的各個(gè)功能。</p><p>  (2)機(jī)器人部分的設(shè)計(jì)</p><p>  機(jī)器人部分的設(shè)計(jì)是由ChessBot.java類(lèi)來(lái)實(shí)現(xiàn)的。該java類(lèi)首先導(dǎo)入了三個(gè)函數(shù),分別是math,lang和awt。該程序定義了棋盤(pán)的邊長(zhǎng),棋盤(pán)的邊長(zhǎng)通過(guò)定義一個(gè)私有的int型變量來(lái)實(shí)現(xiàn)。將機(jī)器人定義成一個(gè)方法,通過(guò)0和1來(lái)確定按下的棋子是機(jī)器人自己下的,還是敵人的棋子。該ChessBot類(lèi)中還

24、包括了重開(kāi)一局的方法,該方法通過(guò)for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn),即重置棋子。另外一個(gè)方法是悔棋,悔棋同樣是通過(guò)for語(yǔ)句循環(huán)來(lái)實(shí)現(xiàn),首先通過(guò)二維數(shù)組算出最后一步棋下的位置,然后通過(guò)Step--實(shí)現(xiàn)。最后一個(gè)方法是計(jì)算當(dāng)前位置type方是否有nn子相連,相連的情況。當(dāng)橫向五子連珠,縱向五子連珠,左斜線(xiàn)五子連珠或者是右斜線(xiàn)五子連珠時(shí),比賽結(jié)束,同時(shí)顯示出獲勝方的棋子顏色。四種方向的連珠用for循環(huán)語(yǔ)句分別寫(xiě)出其二維數(shù)組也就是棋子的位置,從而進(jìn)行判斷棋

25、子有幾個(gè)棋子相連。使用endfor語(yǔ)句結(jié)束for循環(huán),利用return語(yǔ)句,重復(fù)判斷棋子的位置以及是否連珠。</p><p>  (3)五子棋面板的設(shè)計(jì)</p><p>  首先導(dǎo)入awt等java包。ChessPanel繼承JPanel的屬性類(lèi)。定義一系列的私有變量,如棋盤(pán)的背景位圖,黑棋子的位圖,白棋子的位圖,以及插入棋子的位置。該java包還調(diào)用了重開(kāi)一局的方法,以及悔棋的方法。pu

26、blic void showMousePos(Point p)是用來(lái)調(diào)試用,顯示鼠標(biāo)位置。public Point addChess(int x,int y,int type)是調(diào)試下一步棋,參數(shù)為插入點(diǎn)像素坐標(biāo)。public Point addChess(int x,int y,int type,boolean isMatrix)實(shí)現(xiàn)的功能是算下一步棋,isMatrix位true參數(shù)為插入點(diǎn)棋格坐標(biāo),否則參數(shù)為插入點(diǎn)像素坐標(biāo)。當(dāng)游戲結(jié)

27、束的時(shí)候使用Graphics g調(diào)用方法,在游戲過(guò)程中如果是黑方或是白方獲勝在棋盤(pán)中就會(huì)顯示是哪方獲勝。</p><p><b>  3.設(shè)計(jì)結(jié)果與分析</b></p><p> ?。?)當(dāng)進(jìn)入到游戲當(dāng)中可以選擇是哪個(gè)顏色的棋先出,選擇好之后便可以單機(jī)開(kāi)始進(jìn)行下棋,如果在游戲過(guò)程中出現(xiàn)什么問(wèn)題可以單機(jī)再來(lái)一局重新開(kāi)始游。五子棋游戲的主界面如圖2所示:</p>

28、;<p><b>  圖2.程序主界面</b></p><p> ?。?)如果實(shí)黑棋先開(kāi)始那么開(kāi)始后的界面中先出的棋顯示的是黑棋,如果是白棋先出則顯示的是白棋,以黑棋為例如圖3所示:</p><p>  圖3.黑棋先出的界面圖</p><p> ?。?)對(duì)于五子棋游戲,無(wú)論人機(jī)對(duì)戰(zhàn),還是雙人對(duì)戰(zhàn),都需要判斷棋盤(pán)上是否存在五子連珠情

29、況,這既是游戲名字的由來(lái),也是游戲結(jié)束的標(biāo)志。判斷五子連珠的原理是從橫,豎,左斜線(xiàn),右斜線(xiàn)4條線(xiàn)上判斷是否存在5個(gè)相連的同類(lèi)棋子,黑棋的五個(gè)棋子在橫、豎或斜方向上連接成一線(xiàn)即為該方贏如圖4所示:</p><p><b>  圖4.游戲結(jié)束界面</b></p><p> ?。?)白棋的五個(gè)棋子在橫、豎或斜方向上連接成一線(xiàn)即為該方贏如圖4所示:</p>&l

30、t;p>  圖5.白棋勝利界面圖</p><p><b>  代碼如下:</b></p><p>  import java.awt.Checkbox;</p><p>  import java.awt.CheckboxGroup;</p><p>  import java.awt.Color;</p&g

31、t;<p>  import java.awt.Font;</p><p>  import java.awt.Graphics;</p><p>  import java.awt.event.ActionEvent;</p><p>  import java.awt.event.ActionListener;</p><p&g

32、t;  import java.awt.event.ItemEvent;</p><p>  import java.awt.event.ItemListener;</p><p>  import java.awt.event.MouseEvent;</p><p>  import java.awt.event.MouseListener;</p>

33、<p>  import javax.swing.JButton;</p><p>  import javax.swing.JCheckBox;</p><p>  import javax.swing.JFrame;</p><p>  import javax.swing.JPanel;</p><p>  public c

34、lass FivChese extends JFrame{</p><p>  CheseGame CG;</p><p>  FivChese ()</p><p><b>  {</b></p><p>  this.CG= new CheseGame();</p><p>  addMou

35、seListener(CG);</p><p><b>  add(CG);</b></p><p><b>  }</b></p><p>  public static void main(String[] args) {</p><p>  FivChese fivechese= new F

36、ivChese ();</p><p>  fivechese.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  fivechese.setSize(900, 700);</p><p>  fivechese.setTitle("五子棋");</p><p&g

37、t;  fivechese.setVisible(true);</p><p>  fivechese.setResizable(true);</p><p><b>  }</b></p><p><b>  }</b></p><p>  class CheseGame extends JPan

38、el implements MouseListener,ItemListener</p><p><b>  {</b></p><p>  int [][]map = new int[20][20];</p><p>  Color []color = {Color.BLACK,Color.WHITE,Color.LIGHT_GRAY};&

39、lt;/p><p><b>  //棋子坐標(biāo)</b></p><p>  int x = -1;</p><p>  int y = -1;</p><p>  //判定是白棋還是黑棋</p><p>  int flag = 1;</p><p><b>  //判

40、定勝負(fù)</b></p><p>  int winner = 3;</p><p>  JButton btn1 = new JButton("開(kāi)始"); //游戲開(kāi)始</p><p>  JButton btn2 = new JButton("再來(lái)一局");//游戲重置</p><p> 

41、 //確定白棋先還是黑棋先</p><p>  CheckboxGroup cbg = new CheckboxGroup();</p><p>  Checkbox chb1 = new Checkbox("黑棋先開(kāi)始",cbg,true);</p><p>  Checkbox chb2 = new Checkbox("白棋先開(kāi)

42、始",cbg,false);</p><p><b>  @Override</b></p><p>  public void itemStateChanged(ItemEvent ie) {</p><p>  // throw new UnsupportedOperationException("Not suppor

43、ted yet.");</p><p>  if(chb1.getState())</p><p><b>  {</b></p><p><b>  flag = 1;</b></p><p><b>  }</b></p><p><

44、b>  else</b></p><p><b>  {</b></p><p><b>  flag = 2;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

45、t;  class GameStart implements ActionListener</p><p><b>  {</b></p><p>  public void actionPerformed(ActionEvent ae)</p><p><b>  {</b></p><p>  

46、if(ae.getSource() == btn1)//str.equals("Start")</p><p><b>  {</b></p><p><b>  start();</b></p><p>  repaint();</p><p>  btn1.setEnable

47、d(false);</p><p>  btn2.setEnabled(true);</p><p>  chb1.setEnabled(false);</p><p>  chb2.setEnabled(false);</p><p><b>  }</b></p><p>  if(ae.ge

48、tSource() == btn2)</p><p><b>  {</b></p><p><b>  start();</b></p><p>  repaint();</p><p>  chb1.setEnabled(true);</p><p>  chb2.set

49、Enabled(true);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  CheseGame()</p><p><b>  { </b&g

50、t;</p><p>  this.setLayout(null);</p><p>  chb1.setBounds(650, 50, 100, 30);</p><p>  chb2.setBounds(650, 100, 100, 30);</p><p>  chb1.addItemListener(this);</p>

51、<p>  chb2.addItemListener(this);</p><p>  btn1.setBounds(650,150,100,30);</p><p>  btn1.addActionListener(new GameStart()); </p><p>  btn2.setBounds(650, 200, 100, 30);</p

52、><p>  btn2.addActionListener(new GameStart());</p><p>  btn2.setEnabled(false);</p><p>  this.add(btn1);</p><p>  this.add(btn2);</p><p>  this.add(chb1);<

53、;/p><p>  this.add(chb2);</p><p><b>  }</b></p><p>  void start()</p><p><b>  {</b></p><p>  for(int i = 0;i < 20;i++)</p>&

54、lt;p>  for(int j = 0;j < 20;j++)</p><p>  map[i][j] = 0;</p><p>  winner = 0;</p><p><b>  }</b></p><p>  Boolean win(int x,int y)</p><p>

55、<b>  {</b></p><p>  int score = 1;</p><p>  for(int i = x;i < x+4;)//橫向x++</p><p><b>  {</b></p><p>  if(i == 19)</p><p><b&g

56、t;  break;</b></p><p>  if(map[i][y] != map[++i][y])</p><p><b>  break;</b></p><p><b>  score++;</b></p><p><b>  }</b></p&g

57、t;<p>  for(int i = x;i > x-4;)//橫向x--</p><p><b>  {</b></p><p>  if(i == 0)</p><p><b>  break;</b></p><p>  if(map[i][y] != map[--i][

58、y])</p><p><b>  break;</b></p><p><b>  score++;</b></p><p><b>  } </b></p><p>  if(score >= 5)</p><p>  return true;

59、</p><p><b>  else</b></p><p>  score = 1;</p><p>  for(int j = y; j < y+4;)//縱向y++</p><p><b>  {</b></p><p>  if(j == 19)</p&

60、gt;<p><b>  break;</b></p><p>  if(map[x][j] != map[x][++j])</p><p><b>  break;</b></p><p><b>  score++;</b></p><p><b>

61、  }</b></p><p>  for(int j = y; j > y-4;)//縱向y--</p><p><b>  {</b></p><p>  if(j == 0)</p><p><b>  break;</b></p><p>  if(

62、map[x][j] != map[x][--j])</p><p><b>  break;</b></p><p><b>  score++;</b></p><p><b>  } </b></p><p>  if(score >= 5)</p>&

63、lt;p>  return true;</p><p><b>  else</b></p><p>  score = 1;</p><p>  for(int i = x;i < x+4;)//斜向x++、y++</p><p>  for(int j = y;j < y+4;)</p>

64、<p><b>  {</b></p><p>  if(i == 19 || y == 19)</p><p>  {i = x+4; break;}</p><p>  if(map[i][j] != map[++i][++j])</p><p><b>  {</b></p

65、><p><b>  i = x+4;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  score++;</b></p><p><b>  }&l

66、t;/b></p><p>  for(int i = x;i > x-4;)//斜向x--、y--</p><p>  for(int j = y;j > y-4;)</p><p><b>  {</b></p><p>  if(i == 0||j==0)</p><p>

67、  {i = x-4; break;}</p><p>  if(map[i][j] != map[--i][--j])</p><p><b>  {</b></p><p><b>  i = x-4;</b></p><p><b>  break;</b></p&

68、gt;<p><b>  }</b></p><p><b>  score++;</b></p><p><b>  } </b></p><p>  if(score >= 5)</p><p>  return true;</p><

69、;p><b>  else</b></p><p>  score = 1;</p><p>  for(int i = x;i > x-4;)//斜向x--、y++</p><p>  for(int j = y;j < y+4;)</p><p><b>  {</b><

70、/p><p>  if(i==0 || j==19)</p><p>  { i = x-4;break;}</p><p>  if(map[i][j] != map[--i][++j])</p><p><b>  {</b></p><p><b>  i = x-4;</b&g

71、t;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  score++;</b></p><p><b>  } </b></p><p>  for(int i

72、 = x;i < x+4;)//斜向x++、y--</p><p>  for(int j = y;j > y-4;)</p><p><b>  {</b></p><p>  if(i==19||j==0)</p><p>  { i = x+4;break;}</p><p> 

73、 if(map[i][j] != map[++i][--j])</p><p><b>  {</b></p><p>  i = x + 4;</p><p><b>  break;</b></p><p><b>  }</b></p><p>&

74、lt;b>  score++; </b></p><p><b>  } </b></p><p>  if(score >= 5)</p><p>  return true;</p><p><b>  else</b></p><p>  ret

75、urn false;</p><p><b>  }</b></p><p>  public void paintComponent(Graphics g)</p><p><b>  {</b></p><p>  super.paintComponent(g);</p><

76、p>  setBackground(color[2]);</p><p><b>  //畫(huà)棋盤(pán)</b></p><p>  for(int i = 1;i <= 20;i++)</p><p><b>  {</b></p><p>  g.setColor(color[0]);<

77、;/p><p>  g.drawLine(30, i*30 ,600 , i*30);</p><p>  g.drawLine(i*30,30, i*30, 600);</p><p><b>  }</b></p><p><b>  //畫(huà)棋子</b></p><p>  

78、for(int i = 0;i < 20;i++)</p><p>  for(int j = 0;j < 20;j++)</p><p><b>  {</b></p><p>  if(map[i][j] == 1)</p><p><b>  { </b></p>&

79、lt;p>  g.setColor(color[0]);</p><p>  g.fillOval((i+1)*30-15, (j+1)*30-15, 30, 30);</p><p><b>  }</b></p><p>  if(map[i][j] == 2)</p><p><b>  {<

80、/b></p><p>  g.setColor(color[1]);</p><p>  g.fillOval((i+1)*30-15, (j+1)*30-15, 30, 30);</p><p><b>  }</b></p><p><b>  }</b></p><

81、p><b>  //判定勝負(fù)</b></p><p>  Font font = new Font("",30,50);</p><p>  g.setFont(font);</p><p>  if(winner == 1)</p><p><b>  {</b><

82、/p><p>  g.setColor(color[0]);</p><p>  g.drawString("黑棋勝", 650, 300);</p><p><b>  }</b></p><p>  if(winner == 2)</p><p><b>  { &l

83、t;/b></p><p>  g.setColor(color[1]);</p><p>  g.drawString("白棋勝", 650, 300);</p><p><b>  }</b></p><p><b>  }</b></p><p&g

84、t;<b>  @Override</b></p><p>  public void mouseClicked(MouseEvent me) {</p><p>  //throw new UnsupportedOperationException("Not supported yet.");</p><p><b&

85、gt;  }</b></p><p><b>  @Override</b></p><p>  public void mousePressed(MouseEvent me) {</p><p>  // throw new UnsupportedOperationException("Not supported yet

86、.");</p><p>  if(winner == 0)</p><p><b>  {</b></p><p>  x = me.getX();</p><p>  y = me.getY();</p><p>  chb1.setEnabled(false);</p>

87、<p>  chb2.setEnabled(false);</p><p><b>  }</b></p><p>  x = (int)(x/30)-1;</p><p>  y = (int)((y-15)/30)-1;</p><p>  if(x>=0&&x<=19&am

88、p;&y>=0&&y<=19)</p><p><b>  {</b></p><p>  if(flag == 1&&map[x][y] == 0)</p><p><b>  {</b></p><p>  map[x][y] = 1;<

89、/p><p>  if(win(x,y))</p><p>  winner = 1;</p><p><b>  flag = 2;</b></p><p><b>  }</b></p><p><b>  else</b></p><

90、;p>  if(flag == 2&&map[x][y] == 0)</p><p><b>  {</b></p><p>  map[x][y] = 2;</p><p>  if(win(x,y))</p><p>  winner = 2;</p><p><b

91、>  flag = 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  repaint();</p><p><b>  }</b></p><p><b>  @

92、Override</b></p><p>  public void mouseReleased(MouseEvent me) {</p><p>  // throw new UnsupportedOperationException("Not supported yet.");</p><p><b>  }</b

93、></p><p><b>  @Override</b></p><p>  public void mouseEntered(MouseEvent me) {</p><p>  // throw new UnsupportedOperationException("Not supported yet.");<

94、;/p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public void mouseExited(MouseEvent me) {</p><p>  // throw new UnsupportedOperationException(

95、"Not supported yet.");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  4.設(shè)計(jì)體會(huì)</b></p><p>  通過(guò)這次課程設(shè)計(jì),我進(jìn)一步加深對(duì)基礎(chǔ)理論的理解,擴(kuò)大專(zhuān)業(yè)知識(shí)面

96、,對(duì)收集資料、查閱文獻(xiàn)、方案制定等實(shí)踐方面得到了很好的鍛練,促進(jìn)對(duì)所學(xué)知識(shí)應(yīng)用能力的提高。同時(shí)我漸漸的復(fù)習(xí)了Java使用方法和編程語(yǔ)法,之后的編程過(guò)程也相對(duì)得心應(yīng)手,基本完成了預(yù)期計(jì)劃的要求。在此感謝我的指導(dǎo)老師—原玥老師,她在課題的研究上不遺余力的給予指導(dǎo)。她嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度深深的影響了我,使我受益匪淺!</p><p>  這個(gè)課設(shè)題對(duì)我來(lái)說(shuō)有一定的挑戰(zhàn)性,因?yàn)槲易约阂膊恢雷约旱降讓W(xué)到了一個(gè)什么樣的境界。但可

97、以肯定,這個(gè)課設(shè)題的要求絕對(duì)在我的能力范圍以上。之所以選擇這個(gè)題目是想逼著自己去查更多的資料,學(xué)到更多的東西。</p><p>  結(jié)果也確實(shí)是這樣的,我在這次課設(shè)中學(xué)到了不少東西,也理解了許多原來(lái)不理解的東西。盡管這個(gè)系統(tǒng)做的并不是那么的完善。</p><p>  對(duì)于Java中的引用,初始化類(lèi)等,開(kāi)始我并不是非常的理解,知道就這么做就能實(shí)現(xiàn)相應(yīng)的功能了,并沒(méi)有很深刻的去理解它為什么要這

98、么做。但是真正的要用Java去做一個(gè)東西不理解它是不行的,而且其間這課設(shè)涉及到了Java 中的絕大多數(shù)的知識(shí)點(diǎn),如Java圖形用戶(hù)界面設(shè)計(jì)、Java中的多線(xiàn)程程序設(shè)計(jì)、Java輸入輸出流,要應(yīng)用這些東西更要求我去好好理解Java的這些規(guī)則。</p><p>  經(jīng)過(guò)了長(zhǎng)時(shí)間的反復(fù)編寫(xiě)調(diào)試,課本和網(wǎng)上查閱相關(guān)資料相關(guān)文章,終于完成了整個(gè)課程設(shè)計(jì)。在這個(gè)過(guò)程中,在把書(shū)本上的知識(shí)給系統(tǒng)的復(fù)習(xí)了一下的同時(shí),同時(shí)也發(fā)現(xiàn)了自

99、己的太多不足,對(duì)JAVA語(yǔ)言整體知識(shí)構(gòu)架不夠熟悉,不能靈活地運(yùn)用所學(xué)的知識(shí)點(diǎn)。自己的編程方式也不是太標(biāo)準(zhǔn),經(jīng)常出現(xiàn)代碼寫(xiě)錯(cuò)而調(diào)試很久的低級(jí)錯(cuò)誤情況出現(xiàn)。</p><p>  在這次課程設(shè)計(jì)中,我明白了編寫(xiě)程序,不僅要求對(duì)課本知識(shí)有較深刻的了解,同時(shí)要求程序設(shè)計(jì)者有較強(qiáng)的思維和動(dòng)手能力。還要熟悉常用的編程技巧和編程思想,不能只關(guān)心程序的運(yùn)行結(jié)果,更要注重程序代碼的結(jié)構(gòu),編程者更要有嚴(yán)謹(jǐn)?shù)貞B(tài)度。還有通過(guò)設(shè)計(jì)過(guò)程中大量

100、地查閱網(wǎng)絡(luò)文章,對(duì)一些關(guān)鍵知識(shí)點(diǎn)逐個(gè)地了解并解決相關(guān)問(wèn)題</p><p><b>  5.參考文獻(xiàn)</b></p><p>  [1]陳國(guó)君,陳磊,劉洋.Java2程序設(shè)計(jì)基礎(chǔ)[M]北京:清華大學(xué)出版社 2009</p><p>  [2] 埃史爾,陳昊鵬.Java編程思想(第4版)[M].北京:機(jī)械工業(yè)出版社 2007</p>

101、<p>  [3] 李鐘尉,馬文強(qiáng),陳丹丹.Java從入門(mén)到精通[M].北京:清華大學(xué)出版社 2008</p><p>  [4] Y.Daniel Liang,萬(wàn)波,鄭海紅,潘蓉.Java語(yǔ)言程序設(shè)計(jì):基礎(chǔ)篇(原書(shū)第6版)[M].北京:機(jī)械工業(yè)出版社 2008</p><p>  [5] Ian F.Darwin,關(guān)麗榮,張曉坤.Java經(jīng)典實(shí)例(第2版)[M].北京:中國(guó)電力

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論