版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 五子棋小游戲</b></p><p> 1.課程設(shè)計的目的 </p><p> 計算機技術(shù)的不斷發(fā)展給人們的日常工作和生活都帶來了許多益處, 從Windows系統(tǒng)的推出使電腦從高雅的學(xué)術(shù)殿堂走入了尋常百姓家開始,各行各業(yè)的人們無須經(jīng)過特別的訓(xùn)練就能夠使用電腦完成許許多多復(fù)雜的工作。然而,雖然現(xiàn)在世界上已經(jīng)充滿了花樣繁多的各種軟件,但它
2、們依然不能滿足用戶的各種特殊需要,人們還不得不開發(fā)適合自己特殊需求的軟件。Java語言作為一種面向?qū)ο蟮木幊陶Z言,具有分布式,可移植,高性能等特點。通過系統(tǒng)的學(xué)習(xí),就可以使用它開發(fā)出功能齊全,滿足特殊需求的應(yīng)用程序。它對學(xué)習(xí)者掌握技能,開拓思維都有很大的幫助。</p><p> Java語言的開發(fā)方法是當(dāng)今世界最流行的開發(fā)方法,是當(dāng)今流行的網(wǎng)絡(luò)編程語言。它具有面向?qū)ο蟆⒖缙脚_、分布應(yīng)用等特點。它不僅具有更貼近自
3、然的語義,而且有利于軟件的維護和繼承。很多程序開發(fā)人員得第一選擇。為了將課堂上得知識掌握得更加透徹,深刻把握J(rèn)ava語言的重要概念及其面向?qū)ο蟮奶匦?,鍛煉學(xué)生熟練的應(yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計方法解決實際問題的能力,開設(shè)了Java程序設(shè)計課程設(shè)計。讓學(xué)生自己動手動腦,將書本上得知識運用到實踐當(dāng)中去,使知識能更好得融會貫通。</p><p> 通過自己動手,自主得學(xué)習(xí),對Java這門課程有更深得了解與認(rèn)識,并通過自己
4、動手,自主得學(xué)習(xí),對Java這門課程有更深得了解與認(rèn)識,通過本次課設(shè),實現(xiàn)本學(xué)期內(nèi)容的回顧與綜合運用,包括類的建立,用類創(chuàng)建對象,方法的調(diào)用,圖形組建的使用方法,圖形界面的布局形式,事件處理機制,文件對話框的使用,文件操作的基本方法,數(shù)據(jù)讀寫的基本用法等。</p><p> 這次課程設(shè)計我主要研究了利用已學(xué)的Java知識編輯一個五子棋小游戲。通過此次課程設(shè)計,來鞏固所學(xué)Java語言基本知識,增進(jìn)Java語言編輯
5、基本功,掌握J(rèn)DK、JCreator等開發(fā)工具的運用,拓寬常用類庫的應(yīng)用。</p><p><b> 2.設(shè)計方案論證</b></p><p><b> 2.1設(shè)計思路</b></p><p><b> (1)棋盤界面設(shè)計</b></p><p> 在對棋盤界面設(shè)計方面
6、要考慮簡潔友好,符合游戲者需求。棋子的設(shè)計方面系統(tǒng)中設(shè)置了兩種棋子顏色,黑色或者白色, 游戲者可自行選擇。棋子怎樣畫出來,怎樣使棋子按我們所想的方式來繪制出來是設(shè)計的主要難題。運行時要求當(dāng)每次點擊鼠標(biāo)的時候就在點擊鼠標(biāo)的地方畫一個棋子,所以得定義一個棋子的類使點擊鼠標(biāo)時系統(tǒng)把棋子繪制出來。這樣主界面里的棋子就確定了,而且也確定了幾個所需要的類。可以先定義好這些類了。</p><p> 有了以上的準(zhǔn)備就可以把棋盤
7、繪制出來了,下棋時每次在適當(dāng)位置點擊鼠標(biāo)的時候就在所點擊的位置上畫出你這個角色的顏色,然后計算機會自動的下棋,計算機自動下棋要有一個控制變量來控制能不能下棋。人可以隨意的下子,可是計算機就要計算在哪個位置下子了。這里由計算機下子的算法來確定,人人對戰(zhàn)的話就不象單機游戲一樣,要計算機來判斷人下子之后計算機下那一個地方了,人人對戰(zhàn)只要在雙方下子的時候判斷贏棋情況,當(dāng)然還要同步的控制兩個人下棋的順序,這樣的話就要用到線程了,各自都繼承或?qū)崿F(xiàn)線
8、程類或接口,以便各自能隨時單獨控制接發(fā)消息。</p><p><b> (2)算法設(shè)計</b></p><p> 對于五子棋游戲,無論人機對戰(zhàn),還是雙人對戰(zhàn),都需要判斷棋盤上是否存在五子連珠情況,這既是游戲名字的由來,也是游戲結(jié)束的標(biāo)志。判斷五子連珠的原理是從橫,豎,左斜線,右斜線4條線上判斷是否存在5個相連的同類棋子。</p><p>
9、 對戰(zhàn)一方落子后,在該處向8個方向檢測連續(xù)的同類棋子,如果檢測到直線方向上存在5個連續(xù)的同類棋子(包含本位置棋子),則判斷為“連五”并結(jié)束檢測循環(huán)?;跈z測結(jié)果,可以判斷游戲是否結(jié)束,并根據(jù)獲勝方的落子代碼判斷獲勝方是誰。</p><p> 由于不考慮禁手問題,在實現(xiàn)“連五”過程中,我們可以考慮完成“雙四”,“四三”,“雙三”,“沖四”,“活三”,“活四”來實現(xiàn)目的。</p><p>
10、 活四:有兩個點能形成“連五”的四就是活四;</p><p> 沖四:只有一個點能形成“連五”的四叫做“沖四”,或者叫做“單四”;</p><p> 活三:己方在落一子就能形成“活四”的三叫做“活三”?!盎钊狈譃椤斑B活三”和“跳活三”。連活三:在棋盤某一條陽線或陰線上有同色三子相連,且在此三子兩端延長線上有一端至少有一個,另一端至少有兩個無子的交叉點與此三子緊密相連。跳活三:中間僅間
11、隔一個無子交叉點的連三,但兩端延長線均至少有一個無子的交叉點與此三子相連。</p><p> 雙三:由于黑方走一著在無子交叉點上同時形成二個或二個以上黑方 " 活 " 的局面。</p><p> 雙四:由于黑方走一著在無子交叉點上同時形成二個或二個以上黑方 " 四 " 的局面。 </p><p> 四三:指某一方同時具備
12、兩個先手,其中一個是 " 四 " ,一個是 " 活三 " 。</p><p> 在實現(xiàn)上面這些高級算法的時候,我們需要一個基礎(chǔ),就是對制定位置周圍情況進(jìn)行檢測。在棋盤上面,棋子存在8個移動方向,檢測時需要對每個方向進(jìn)行檢測。為了簡單直觀,這里將每步棋子的移動生成一個新的棋子。</p><p><b> 2.2需求分析</b>
13、</p><p> 一款小游戲的確立是建立在各種各樣的需求上面的,這種需求往往來自于玩家的實際需求,其中玩家的實際需求最為重要.面對游戲擁有不同知識和理解層面的玩家,游戲制作人對玩家需求的理解程度,在很大程度上決定了此類游戲開發(fā)的成敗.因此如何更好地的了解,分析,明確玩家需求,并且能夠準(zhǔn)確,清晰以文檔的形式表達(dá)給游戲制作人,保證開發(fā)過程按照滿足玩家需求為目的正確開發(fā)方向進(jìn)行,是每游戲游戲制作人需要面對的問題。&
14、lt;/p><p> 作為五子棋的設(shè)計需要考慮到的最基本的需求莫過于人機對戰(zhàn)與人人對戰(zhàn)功能的實現(xiàn),當(dāng)然還有下棋過程中的下棋悔棋功能以及判斷游戲的勝負(fù)等方面的要求。當(dāng)然最好是要考慮到界面的友好性,作為一個娛樂軟件,還應(yīng)該考慮到玩家在游戲時的舒適性。</p><p><b> 2.3系統(tǒng)流程圖</b></p><p><b> 圖1程序
15、流程圖</b></p><p><b> 2.4設(shè)計方法</b></p><p> 2.4.1主要方法設(shè)計</p><p> 五子棋的娛樂性強、規(guī)則簡單、易學(xué)、流行性廣,普通人不需長時間專門訓(xùn)練即可自如行棋,因此極受大眾喜歡,本系統(tǒng)可以實現(xiàn)人與人手動下棋,掃描整個棋盤記錄連在一起的黑白棋子數(shù),實現(xiàn)人與人有次序的下棋,判斷人與人
16、的勝負(fù),為人下棋提供幫助,五子棋規(guī)則為:</p><p> ?。?)本游戲可選擇人與人對戰(zhàn)模式。</p><p> (2)下法:兩人分別執(zhí)黑白兩色棋子,輪流在棋盤上選擇一個無子的交叉點落子,無子的交叉點又被稱為空點。</p><p> (3)輸贏判斷:黑、白雙方有一方的五個棋子在橫、豎或斜方向上連接成一線即為該方贏。</p><p>&l
17、t;b> 表1.主要方法</b></p><p> 2.4.2程序中類及成員變量的說明</p><p> 程序中所含的各個類名、類的作用及其子類父類,如表2所示:</p><p> 表2.類表及其子類父類</p><p> 表3.主要成員變量(屬性)</p><p> 2.3.3 java
18、源文件及其功能</p><p> 表4 .java源文件及其功能</p><p> 2.3.4五子棋游戲中的注冊監(jiān)聽 </p><p> 對角色選擇按鈕注冊ActionListener監(jiān)聽,設(shè)置用戶的角色。定義黑子int類型 0,白子1。</p><p> 對按鈕開始、重置注冊ActionListener監(jiān)聽,如果點擊開始,用戶進(jìn)
19、 入下棋狀態(tài),有一方贏了,棋盤上則不能再點擊棋子。點擊重置,則開始新的一輪。</p><p> 對鼠標(biāo)注冊mouseClicked監(jiān)聽,鼠標(biāo)點擊棋盤時獲取下棋的位置。</p><p> 對JTextField注冊ActionListener,用戶輸入聊天信息后,通過Server傳遞給其他用戶,在對話框JTextArea內(nèi)顯示。</p><p> class S
20、erverThread implements Runnable{ }類監(jiān)聽線程,監(jiān)聽是否有客戶端法過信息來。</p><p> ?。?)屬性:Vector threads 向量存儲線程,Socket socket 服務(wù)端口,DataInputStream in 輸入流,DataOutputStream out 輸出流,int nid 用戶ID。</p><p> (2)方法:構(gòu)造器pu
21、blic ServerThread(Socket socket,Vector threads),實現(xiàn)信息的輸入、輸出,和public void run()監(jiān)聽客戶端是否發(fā)信息過來,當(dāng)客戶離開時向,其他客戶發(fā)信息,把客戶端的信息發(fā)給其他客戶。 </p><p> 2.3.5 游戲整體設(shè)計</p>&l
22、t;p> (1)五子棋的游戲主界面</p><p> 五子棋主界面包括ChessBot.java,ChessMap.java,ChessPanel.java和Console.java四個文件。ChessMap是該五子棋游戲的主運行類,其中有運行整個程序的main方法,該文件生成了ChessMap類的一個實例,從而生成了五子棋游戲的界面ChessMap類將所有的功能集中到菜單欄中,并通過調(diào)用其他模塊來實現(xiàn)
23、五子棋游戲的各個功能。</p><p> (2)機器人部分的設(shè)計</p><p> 機器人部分的設(shè)計是由ChessBot.java類來實現(xiàn)的。該java類首先導(dǎo)入了三個函數(shù),分別是math,lang和awt。該程序定義了棋盤的邊長,棋盤的邊長通過定義一個私有的int型變量來實現(xiàn)。將機器人定義成一個方法,通過0和1來確定按下的棋子是機器人自己下的,還是敵人的棋子。該ChessBot類中還
24、包括了重開一局的方法,該方法通過for循環(huán)語句來實現(xiàn),即重置棋子。另外一個方法是悔棋,悔棋同樣是通過for語句循環(huán)來實現(xiàn),首先通過二維數(shù)組算出最后一步棋下的位置,然后通過Step--實現(xiàn)。最后一個方法是計算當(dāng)前位置type方是否有nn子相連,相連的情況。當(dāng)橫向五子連珠,縱向五子連珠,左斜線五子連珠或者是右斜線五子連珠時,比賽結(jié)束,同時顯示出獲勝方的棋子顏色。四種方向的連珠用for循環(huán)語句分別寫出其二維數(shù)組也就是棋子的位置,從而進(jìn)行判斷棋
25、子有幾個棋子相連。使用endfor語句結(jié)束for循環(huán),利用return語句,重復(fù)判斷棋子的位置以及是否連珠。</p><p> (3)五子棋面板的設(shè)計</p><p> 首先導(dǎo)入awt等java包。ChessPanel繼承JPanel的屬性類。定義一系列的私有變量,如棋盤的背景位圖,黑棋子的位圖,白棋子的位圖,以及插入棋子的位置。該java包還調(diào)用了重開一局的方法,以及悔棋的方法。pu
26、blic void showMousePos(Point p)是用來調(diào)試用,顯示鼠標(biāo)位置。public Point addChess(int x,int y,int type)是調(diào)試下一步棋,參數(shù)為插入點像素坐標(biāo)。public Point addChess(int x,int y,int type,boolean isMatrix)實現(xiàn)的功能是算下一步棋,isMatrix位true參數(shù)為插入點棋格坐標(biāo),否則參數(shù)為插入點像素坐標(biāo)。當(dāng)游戲結(jié)
27、束的時候使用Graphics g調(diào)用方法,在游戲過程中如果是黑方或是白方獲勝在棋盤中就會顯示是哪方獲勝。</p><p><b> 3.設(shè)計結(jié)果與分析</b></p><p> ?。?)當(dāng)進(jìn)入到游戲當(dāng)中可以選擇是哪個顏色的棋先出,選擇好之后便可以單機開始進(jìn)行下棋,如果在游戲過程中出現(xiàn)什么問題可以單機再來一局重新開始游。五子棋游戲的主界面如圖2所示:</p>
28、;<p><b> 圖2.程序主界面</b></p><p> (2)如果實黑棋先開始那么開始后的界面中先出的棋顯示的是黑棋,如果是白棋先出則顯示的是白棋,以黑棋為例如圖3所示:</p><p> 圖3.黑棋先出的界面圖</p><p> ?。?)對于五子棋游戲,無論人機對戰(zhàn),還是雙人對戰(zhàn),都需要判斷棋盤上是否存在五子連珠情
29、況,這既是游戲名字的由來,也是游戲結(jié)束的標(biāo)志。判斷五子連珠的原理是從橫,豎,左斜線,右斜線4條線上判斷是否存在5個相連的同類棋子,黑棋的五個棋子在橫、豎或斜方向上連接成一線即為該方贏如圖4所示:</p><p><b> 圖4.游戲結(jié)束界面</b></p><p> ?。?)白棋的五個棋子在橫、豎或斜方向上連接成一線即為該方贏如圖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("開始"); //游戲開始</p><p> JButton btn2 = new JButton("再來一局");//游戲重置</p><p>
41、 //確定白棋先還是黑棋先</p><p> CheckboxGroup cbg = new CheckboxGroup();</p><p> Checkbox chb1 = new Checkbox("黑棋先開始",cbg,true);</p><p> Checkbox chb2 = new Checkbox("白棋先開
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> //畫棋盤</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> //畫棋子</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è)計體會</b></p><p> 通過這次課程設(shè)計,我進(jìn)一步加深對基礎(chǔ)理論的理解,擴大專業(yè)知識面
96、,對收集資料、查閱文獻(xiàn)、方案制定等實踐方面得到了很好的鍛練,促進(jìn)對所學(xué)知識應(yīng)用能力的提高。同時我漸漸的復(fù)習(xí)了Java使用方法和編程語法,之后的編程過程也相對得心應(yīng)手,基本完成了預(yù)期計劃的要求。在此感謝我的指導(dǎo)老師—原玥老師,她在課題的研究上不遺余力的給予指導(dǎo)。她嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度深深的影響了我,使我受益匪淺!</p><p> 這個課設(shè)題對我來說有一定的挑戰(zhàn)性,因為我自己也不知道自己到底學(xué)到了一個什么樣的境界。但可
97、以肯定,這個課設(shè)題的要求絕對在我的能力范圍以上。之所以選擇這個題目是想逼著自己去查更多的資料,學(xué)到更多的東西。</p><p> 結(jié)果也確實是這樣的,我在這次課設(shè)中學(xué)到了不少東西,也理解了許多原來不理解的東西。盡管這個系統(tǒng)做的并不是那么的完善。</p><p> 對于Java中的引用,初始化類等,開始我并不是非常的理解,知道就這么做就能實現(xiàn)相應(yīng)的功能了,并沒有很深刻的去理解它為什么要這
98、么做。但是真正的要用Java去做一個東西不理解它是不行的,而且其間這課設(shè)涉及到了Java 中的絕大多數(shù)的知識點,如Java圖形用戶界面設(shè)計、Java中的多線程程序設(shè)計、Java輸入輸出流,要應(yīng)用這些東西更要求我去好好理解Java的這些規(guī)則。</p><p> 經(jīng)過了長時間的反復(fù)編寫調(diào)試,課本和網(wǎng)上查閱相關(guān)資料相關(guān)文章,終于完成了整個課程設(shè)計。在這個過程中,在把書本上的知識給系統(tǒng)的復(fù)習(xí)了一下的同時,同時也發(fā)現(xiàn)了自
99、己的太多不足,對JAVA語言整體知識構(gòu)架不夠熟悉,不能靈活地運用所學(xué)的知識點。自己的編程方式也不是太標(biāo)準(zhǔn),經(jīng)常出現(xiàn)代碼寫錯而調(diào)試很久的低級錯誤情況出現(xiàn)。</p><p> 在這次課程設(shè)計中,我明白了編寫程序,不僅要求對課本知識有較深刻的了解,同時要求程序設(shè)計者有較強的思維和動手能力。還要熟悉常用的編程技巧和編程思想,不能只關(guān)心程序的運行結(jié)果,更要注重程序代碼的結(jié)構(gòu),編程者更要有嚴(yán)謹(jǐn)?shù)貞B(tài)度。還有通過設(shè)計過程中大量
100、地查閱網(wǎng)絡(luò)文章,對一些關(guān)鍵知識點逐個地了解并解決相關(guān)問題</p><p><b> 5.參考文獻(xiàn)</b></p><p> [1]陳國君,陳磊,劉洋.Java2程序設(shè)計基礎(chǔ)[M]北京:清華大學(xué)出版社 2009</p><p> [2] 埃史爾,陳昊鵬.Java編程思想(第4版)[M].北京:機械工業(yè)出版社 2007</p>
101、<p> [3] 李鐘尉,馬文強,陳丹丹.Java從入門到精通[M].北京:清華大學(xué)出版社 2008</p><p> [4] Y.Daniel Liang,萬波,鄭海紅,潘蓉.Java語言程序設(shè)計:基礎(chǔ)篇(原書第6版)[M].北京:機械工業(yè)出版社 2008</p><p> [5] Ian F.Darwin,關(guān)麗榮,張曉坤.Java經(jīng)典實例(第2版)[M].北京:中國電力
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計-五子棋游戲
- java課程設(shè)計報告---java 五子棋游戲設(shè)計
- java五子棋課程設(shè)計
- java_五子棋小游戲課程設(shè)計
- java課程設(shè)計--五子棋
- 五子棋java課程設(shè)計
- 五子棋java課程設(shè)計
- java課程設(shè)計--對戰(zhàn)五子棋
- java課程設(shè)計報告-五子棋
- 五子棋小游戲課程設(shè)計
- 五子棋游戲課程設(shè)計報告
- 《java程序設(shè)計》課程設(shè)計-五子棋小游戲
- java課程設(shè)計--人機對弈五子棋
- 五子棋java語言課程設(shè)計報告
- java課程設(shè)計五子棋游戲設(shè)計(內(nèi)附完整代碼)
- 基于java的五子棋游戲設(shè)計
- 五子棋游戲課程設(shè)計word格式
- 課程設(shè)計---五子棋游戲的實現(xiàn)
- 五子棋課程設(shè)計
- flash課程設(shè)計---五子棋游戲制作
評論
0/150
提交評論