![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/21/b1b32dac-2aaa-430f-8aaf-a1743e51c99d/b1b32dac-2aaa-430f-8aaf-a1743e51c99dpic.jpg)
![java課程設(shè)計(jì)--五子棋游戲_第1頁(yè)](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/21/b1b32dac-2aaa-430f-8aaf-a1743e51c99d/b1b32dac-2aaa-430f-8aaf-a1743e51c99d1.gif)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)-五子棋游戲
- java課程設(shè)計(jì)報(bào)告---java 五子棋游戲設(shè)計(jì)
- java五子棋課程設(shè)計(jì)
- java_五子棋小游戲課程設(shè)計(jì)
- java課程設(shè)計(jì)--五子棋
- 五子棋java課程設(shè)計(jì)
- 五子棋java課程設(shè)計(jì)
- java課程設(shè)計(jì)--對(duì)戰(zhàn)五子棋
- java課程設(shè)計(jì)報(bào)告-五子棋
- 五子棋小游戲課程設(shè)計(jì)
- 五子棋游戲課程設(shè)計(jì)報(bào)告
- 《java程序設(shè)計(jì)》課程設(shè)計(jì)-五子棋小游戲
- java課程設(shè)計(jì)--人機(jī)對(duì)弈五子棋
- 五子棋java語(yǔ)言課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)五子棋游戲設(shè)計(jì)(內(nèi)附完整代碼)
- 基于java的五子棋游戲設(shè)計(jì)
- 五子棋游戲課程設(shè)計(jì)word格式
- 課程設(shè)計(jì)---五子棋游戲的實(shí)現(xiàn)
- 五子棋課程設(shè)計(jì)
- flash課程設(shè)計(jì)---五子棋游戲制作
評(píng)論
0/150
提交評(píng)論