java課程設(shè)計(jì)五子棋游戲完整版_第1頁(yè)
java課程設(shè)計(jì)五子棋游戲完整版_第2頁(yè)
java課程設(shè)計(jì)五子棋游戲完整版_第3頁(yè)
java課程設(shè)計(jì)五子棋游戲完整版_第4頁(yè)
java課程設(shè)計(jì)五子棋游戲完整版_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 課程設(shè)計(jì) NO.25五子棋游戲1.課程設(shè)計(jì)的目的 計(jì)算機(jī)技術(shù)的不斷發(fā)展給人們的日常工作和生活都帶來了許多益處, 從Windows系統(tǒng)的推出使電腦從高雅的學(xué)術(shù)殿堂走入了尋常百姓家開始,各行各業(yè)的人們無須經(jīng)過特別的訓(xùn)練就能夠使用電腦完成許許多多復(fù)雜的工作。然而,雖然現(xiàn)在世界上已經(jīng)充滿了花樣繁多的各種軟件,但它們依然不能滿足用戶的各種特殊需要,人們還不得不開發(fā)適合自己特殊需求的軟件。Java語(yǔ)言作為一種面向?qū)ο蟮木幊陶Z(yǔ)言,具有分布式,可移植,高性能等特點(diǎn)。通過系統(tǒng)的學(xué)習(xí),就可以使用它開發(fā)出功能齊全,滿足特殊需求的應(yīng)用程序。它對(duì)學(xué)習(xí)者掌握技能,開拓思維都有很大的幫助。Java語(yǔ)言的開發(fā)方法是當(dāng)今世界

2、最流行的開發(fā)方法,是當(dāng)今流行的網(wǎng)絡(luò)編程語(yǔ)言。它具有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。它不僅具有更貼近自然的語(yǔ)義,而且有利于軟件的維護(hù)和繼承。很多程序開發(fā)人員得第一選擇。為了將課堂上得知識(shí)掌握得更加透徹,深刻把握J(rèn)ava語(yǔ)言的重要概念及其面向?qū)ο蟮奶匦裕憻拰W(xué)生熟練的應(yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問題的能力,開設(shè)了Java程序設(shè)計(jì)課程設(shè)計(jì)。讓學(xué)生自己動(dòng)手動(dòng)腦,將書本上得知識(shí)運(yùn)用到實(shí)踐當(dāng)中去,使知識(shí)能更好得融會(huì)貫通。通過自己動(dòng)手,自主得學(xué)習(xí),對(duì)Java這門課程有更深得了解與認(rèn)識(shí),并通過自己動(dòng)手,自主得學(xué)習(xí),對(duì)Java這門課程有更深得了解與認(rèn)識(shí),通過本次課設(shè),實(shí)現(xiàn)本學(xué)期內(nèi)容的回顧與綜合運(yùn)用,包

3、括類的建立,用類創(chuàng)建對(duì)象,方法的調(diào)用,圖形組建的使用方法,圖形界面的布局形式,事件處理機(jī)制,文件對(duì)話框的使用,文件操作的基本方法,數(shù)據(jù)讀寫的基本用法等。學(xué)習(xí)任何知識(shí)得目的都是要將它運(yùn)用到實(shí)踐中去,所以我們要運(yùn)用已有的知識(shí),獨(dú)立得將這個(gè)課程設(shè)計(jì)完成,只有這樣,我們才能將知識(shí)變成本領(lǐng),變成屬于自己得東西,通過一個(gè)學(xué)習(xí)得學(xué)習(xí),我們已經(jīng)有可一定得Java基礎(chǔ),現(xiàn)在我們就要利用這些基礎(chǔ),來完成課程設(shè)計(jì)。這次課程設(shè)計(jì)我主要研究了利用已學(xué)的Java知識(shí)編輯一個(gè)五子棋小游戲。通過此次課程設(shè)計(jì),來鞏固所學(xué)Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯基本功,掌握J(rèn)DK、JCreator等開發(fā)工具的運(yùn)用,拓寬常用類庫(kù)

4、的應(yīng)用。2.設(shè)計(jì)方案論證2.1設(shè)計(jì)思路(1)棋盤界面設(shè)計(jì)在對(duì)棋盤界面設(shè)計(jì)方面要考慮簡(jiǎn)潔友好,符合游戲者需求。棋子的設(shè)計(jì)方面系統(tǒng)中設(shè)置了兩種棋子顏色,yellow或者red, 游戲者可自行選擇。棋子怎樣畫出來,怎樣使棋子按我們所想的方式來繪制出來是設(shè)計(jì)的主要難題。運(yùn)行時(shí)要求當(dāng)每次點(diǎn)擊鼠標(biāo)的時(shí)候就在點(diǎn)擊鼠標(biāo)的地方畫一個(gè)棋子,所以得定義一個(gè)棋子的類使點(diǎn)擊鼠標(biāo)時(shí)系統(tǒng)把棋子繪制出來。這樣主界面里的棋子就確定了,而且也確定了幾個(gè)所需要的類。可以先定義好這些類了。有了以上的準(zhǔn)備就可以把棋盤繪制出來了,下棋時(shí)每次在適當(dāng)位置點(diǎn)擊鼠標(biāo)的時(shí)候就在所點(diǎn)擊的位置上畫出你這個(gè)角色的顏色,然后計(jì)算機(jī)會(huì)自動(dòng)的下棋,計(jì)算機(jī)自動(dòng)

5、下棋要有一個(gè)控制變量來控制能不能下棋。人可以隨意的下子,可是計(jì)算機(jī)就要計(jì)算在哪個(gè)位置下子了。這里由計(jì)算機(jī)下子的算法來確定,人人對(duì)戰(zhàn)的話就不象單機(jī)游戲一樣,要計(jì)算機(jī)來判斷人下子之后計(jì)算機(jī)下那一個(gè)地方了,人人對(duì)戰(zhàn)只要在雙方下子的時(shí)候判斷贏棋情況,當(dāng)然還要同步的控制兩個(gè)人下棋的順序,這樣的話就要用到線程了,各自都繼承或?qū)崿F(xiàn)線程類或接口,以便各自能隨時(shí)單獨(dú)控制接發(fā)消息。(2)算法設(shè)計(jì)對(duì)于五子棋游戲,無論人機(jī)對(duì)戰(zhàn),還是雙人對(duì)戰(zhàn),都需要判斷棋盤上是否存在五子連珠情況,這既是游戲名字的由來,也是游戲結(jié)束的標(biāo)志。判斷五子連珠的原理是從橫,豎,左斜線,右斜線4條線上判斷是否存在5個(gè)相連的同類棋子。 對(duì)戰(zhàn)一方落子

6、后,在該處向8個(gè)方向檢測(cè)連續(xù)的同類棋子,如果檢測(cè)到直線方向上存在5個(gè)連續(xù)的同類棋子(包含本位置棋子),則判斷為“連五”并結(jié)束檢測(cè)循環(huán)?;跈z測(cè)結(jié)果,可以判斷游戲是否結(jié)束,并根據(jù)獲勝方的落子代碼判斷獲勝方是誰(shuí)。 由于不考慮禁手問題,在實(shí)現(xiàn)“連五”過程中,我們可以考慮完成“雙四”,“四三”,“雙三”,“沖四”,“活三”,“活四”來實(shí)現(xiàn)目的。 活四:有兩個(gè)點(diǎn)能形成“連五”的四就是活四; 沖四:只有一個(gè)點(diǎn)能形成“連五”的四叫做“沖四”,或者叫做“單四”; 活三:己方在落一子就能形成“活四”的三叫做“活三”?!盎钊狈譃椤斑B活三”和“跳活三”。連活三:在棋盤某一條陽(yáng)線或陰線上有同色三子相連,且在此三子兩

7、端延長(zhǎng)線上有一端至少有一個(gè),另一端至少有兩個(gè)無子的交叉點(diǎn)與此三子緊密相連。跳活三:中間僅間隔一個(gè)無子交叉點(diǎn)的連三,但兩端延長(zhǎng)線均至少有一個(gè)無子的交叉點(diǎn)與此三子相連。 雙三:由于黑方走一著在無子交叉點(diǎn)上同時(shí)形成二個(gè)或二個(gè)以上黑方 " 活 " 的局面。 雙四:由于黑方走一著在無子交叉點(diǎn)上同時(shí)形成二個(gè)或二個(gè)以上黑方 " 四 " 的局面。 四三:指某一方同時(shí)具備兩個(gè)先手,其中一個(gè)是 " 四 " ,一個(gè)是 " 活三 " 。 在實(shí)現(xiàn)上面這些高級(jí)算法的時(shí)候,我們需要一個(gè)基礎(chǔ),就是對(duì)制定位置周圍情況進(jìn)行檢測(cè)。在棋盤上面,棋子存在8

8、個(gè)移動(dòng)方向,檢測(cè)時(shí)需要對(duì)每個(gè)方向進(jìn)行檢測(cè)。為了簡(jiǎn)單直觀,這里將每步棋子的移動(dòng)生成一個(gè)新的棋子。2.2需求分析 一款小游戲的確立是建立在各種各樣的需求上面的,這種需求往往來自于玩家的實(shí)際需求,其中玩家的實(shí)際需求最為重要.面對(duì)游戲擁有不同知識(shí)和理解層面的玩家,游戲制作人對(duì)玩家需求的理解程度,在很大程度上決定了此類游戲開發(fā)的成敗.因此如何更好地的了解,分析,明確玩家需求,并且能夠準(zhǔn)確,清晰以文檔的形式表達(dá)給游戲制作人,保證開發(fā)過程按照滿足玩家需求為目的正確開發(fā)方向進(jìn)行,是每游戲游戲制作人需要面對(duì)的問題。作為五子棋的設(shè)計(jì)需要考慮到的最基本的需求莫過于人機(jī)對(duì)戰(zhàn)與人人對(duì)戰(zhàn)功能的實(shí)現(xiàn),當(dāng)然還有下棋過程中的下

9、棋悔棋功能以及判斷游戲的勝負(fù)等方面的要求。當(dāng)然最好是要考慮到界面的友好性,作為一個(gè)娛樂軟件,還應(yīng)該考慮到玩家在游戲時(shí)的舒適性。2.3系統(tǒng)流程圖初始化開始主控制白方下子黑方下子判斷勝負(fù)結(jié)束勝利白方黑方未判斷勝負(fù) 圖1程序流程圖2.4設(shè)計(jì)方法2.4.1主要方法設(shè)計(jì)五子棋的娛樂性強(qiáng)、規(guī)則簡(jiǎn)單、易學(xué)、流行性廣,普通人不需長(zhǎng)時(shí)間專門訓(xùn)練即可自如行棋,因此極受大眾喜歡,本系統(tǒng)可以實(shí)現(xiàn)人與人手動(dòng)下棋,掃描整個(gè)棋盤記錄連在一起的黑白棋子數(shù),實(shí)現(xiàn)人與人有次序的下棋,判斷人與人的勝負(fù),為人下棋提供幫助,五子棋規(guī)則為:(1)本游戲可選擇人與人對(duì)戰(zhàn)模式。(2)下法:兩人分別執(zhí)黑白兩色棋子,輪流在棋盤上選擇一個(gè)無子的交

10、叉點(diǎn)落子,無子的交叉點(diǎn)又被稱為空點(diǎn)。(3)輸贏判斷:黑、白雙方有一方的五個(gè)棋子在橫、豎或斜方向上連接成一線即為該方贏。表1.主要方法方法名稱返回類型功能備注ChessPad()初始化棋盤設(shè)置棋盤顏色,ChessPad()Void paint (Graphics g)對(duì)棋子等圖像進(jìn)行初始化設(shè)置棋子大小,顏色等Void paint (Graphics g)Public void mousePressed(MouseEvent e)鼠標(biāo)的實(shí)踐監(jiān)聽單擊實(shí)踐public void mousePressed(MouseEvent e)public void paint(Graphics g)畫出圖像控制圖

11、像的大小范圍public void paint(Graphics g)public void mousePressed(MouseEvent e)處理按下鼠標(biāo)的事件選中下棋的位置Public void mousePressed(MouseEvent e)public void mouseReleased(MouseEvent e)處理鼠標(biāo)離開的事件本步下棋結(jié)束public void mouseReleased(MouseEvent e)public void mouseExited(MouseEvent e)處理鼠標(biāo)離開棋盤時(shí)鼠標(biāo)離開組件不實(shí)現(xiàn)任何事件public void mouseExit

12、ed(MouseEvent e)public void mouseClicked(MouseEvent e)處理發(fā)生單擊的事件實(shí)現(xiàn)下棋以及重新開始游戲public void mouseClicked(MouseEvent e)2.4.2程序中類及成員變量的說明程序中所含的各個(gè)類名、類的作用及其子類父類,如表2所示:表2.類表及其子類父類類名作用父類子類ChessFrame創(chuàng)建五子棋游戲主窗體和菜單JFrame ChessModel實(shí)現(xiàn)了整個(gè)五子棋程序算法的核心MainPanel1、構(gòu)建一個(gè)面板,在該面板上畫上棋盤;2、處理在該棋盤上的鼠標(biāo)事件(如鼠標(biāo)左鍵點(diǎn)擊、鼠標(biāo)右鍵點(diǎn)擊、鼠標(biāo)拖動(dòng)等)JPan

13、elChessWindowEvent事件響應(yīng)WindowAdapter表3.主要成員變量(屬性)成員變量描述變量類型名稱控制棋子顏色inti重新開局ButtonButton請(qǐng)黑棋下子TextFieldtext_1請(qǐng)白棋下子TextFieldtext_2這是第"+i+"步TextFieldtext_32.3.3 java源文件及其功能 表4 .java源文件及其功能序號(hào)文件名主要功能備注1Chess本程序的主函數(shù)初始化棋盤2Autoplay實(shí)現(xiàn)電腦可以自動(dòng)下棋分為8種情況3Scan掃描整個(gè)棋盤記錄連在一起的黑白棋子數(shù)為判斷勝負(fù)服務(wù)4Sort實(shí)現(xiàn)人與電腦有次序的下棋黑棋白棋有序

14、的下5Judge判斷人與人之間的勝負(fù)文本框中會(huì)顯示結(jié)果6Evaluate電腦估計(jì)為電腦下棋提供幫助2.3.4五子棋游戲中的注冊(cè)監(jiān)聽 對(duì)角色選擇按鈕注冊(cè)ActionListener監(jiān)聽,設(shè)置用戶的角色。定義黑子int類型 0,白子1。對(duì)按鈕開始、重置注冊(cè)ActionListener監(jiān)聽,如果點(diǎn)擊開始,用戶進(jìn) 入下棋狀態(tài),有一方贏了,棋盤上則不能再點(diǎn)擊棋子。點(diǎn)擊重置,則開始新的一輪。對(duì)鼠標(biāo)注冊(cè)mouseClicked監(jiān)聽,鼠標(biāo)點(diǎn)擊棋盤時(shí)獲取下棋的位置。對(duì)JTextField注冊(cè)ActionListener,用戶輸入聊天信息后,通過Server傳遞給其他用戶,在對(duì)話框JTextArea內(nèi)顯示。cla

15、ss ServerThread implements Runnable 類監(jiān)聽線程,監(jiān)聽是否有客戶端法過信息來。(1)屬性:Vector threads 向量存儲(chǔ)線程,Socket socket 服務(wù)端口,DataInputStream in 輸入流,DataOutputStream out 輸出流,int nid 用戶ID。(2)方法:構(gòu)造器public ServerThread(Socket socket,Vector threads),實(shí)現(xiàn)信息的輸入、輸出,和public void run()監(jiān)聽客戶端是否發(fā)信息過來,當(dāng)客戶離開時(shí)向,其他客戶發(fā)信息,把客戶端的信息發(fā)給其他客戶。 2.3.

16、5 游戲整體設(shè)計(jì)(1)五子棋的游戲主界面五子棋主界面包括ChessBot.java,ChessMap.java,ChessPanel.java和Console.java四個(gè)文件。ChessMap是該五子棋游戲的主運(yùn)行類,其中有運(yùn)行整個(gè)程序的main方法,該文件生成了ChessMap類的一個(gè)實(shí)例,從而生成了五子棋游戲的界面ChessMap類將所有的功能集中到菜單欄中,并通過調(diào)用其他模塊來實(shí)現(xiàn)五子棋游戲的各個(gè)功能。(2)機(jī)器人部分的設(shè)計(jì)機(jī)器人部分的設(shè)計(jì)是由ChessBot.java類來實(shí)現(xiàn)的。該java類首先導(dǎo)入了三個(gè)函數(shù),分別是math,lang和awt。該程序定義了棋盤的邊長(zhǎng),棋盤的邊長(zhǎng)通過定

17、義一個(gè)私有的int型變量來實(shí)現(xiàn)。將機(jī)器人定義成一個(gè)方法,通過0和1來確定按下的棋子是機(jī)器人自己下的,還是敵人的棋子。該ChessBot類中還包括了重開一局的方法,該方法通過for循環(huán)語(yǔ)句來實(shí)現(xiàn),即重置棋子。另外一個(gè)方法是悔棋,悔棋同樣是通過for語(yǔ)句循環(huán)來實(shí)現(xiàn),首先通過二維數(shù)組算出最后一步棋下的位置,然后通過Step-實(shí)現(xiàn)。最后一個(gè)方法是計(jì)算當(dāng)前位置type方是否有nn子相連,相連的情況。當(dāng)橫向五子連珠,縱向五子連珠,左斜線五子連珠或者是右斜線五子連珠時(shí),比賽結(jié)束,同時(shí)顯示出獲勝方的棋子顏色。四種方向的連珠用for循環(huán)語(yǔ)句分別寫出其二維數(shù)組也就是棋子的位置,從而進(jìn)行判斷棋子有幾個(gè)棋子相連。使用

18、endfor語(yǔ)句結(jié)束for循環(huán),利用return語(yǔ)句,重復(fù)判斷棋子的位置以及是否連珠。(3)五子棋面板的設(shè)計(jì)首先導(dǎo)入awt等java包。ChessPanel繼承JPanel的屬性類。定義一系列的私有變量,如棋盤的背景位圖,黑棋子的位圖,白棋子的位圖,以及插入棋子的位置。該java包還調(diào)用了重開一局的方法,以及悔棋的方法。public void showMousePos(Point p)是用來調(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,in

19、t y,int type,boolean isMatrix)實(shí)現(xiàn)的功能是算下一步棋,isMatrix位true參數(shù)為插入點(diǎn)棋格坐標(biāo),否則參數(shù)為插入點(diǎn)像素坐標(biāo)。當(dāng)游戲結(jié)束的時(shí)候使用Graphics g調(diào)用方法,在游戲過程中如果是黑方或是白方獲勝在棋盤中就會(huì)顯示是哪方獲勝。3.設(shè)計(jì)結(jié)果與分析(1)當(dāng)進(jìn)入到游戲當(dāng)中可以選擇是哪個(gè)顏色的棋先出,選擇好之后便可以單機(jī)開始進(jìn)行下棋,如果在游戲過程中出現(xiàn)什么問題可以單機(jī)再來一局重新開始游。五子棋游戲的主界面如圖2所示:圖2.程序主界面(2)如果實(shí)黑棋先開始那么開始后的界面中先出的棋顯示的是黑棋,如果是白棋先出則顯示的是白棋,以黑棋為例如圖3所示: 圖3.黑棋

20、先出的界面圖(3)對(duì)于五子棋游戲,無論人機(jī)對(duì)戰(zhàn),還是雙人對(duì)戰(zhàn),都需要判斷棋盤上是否存在五子連珠情況,這既是游戲名字的由來,也是游戲結(jié)束的標(biāo)志。判斷五子連珠的原理是從橫,豎,左斜線,右斜線4條線上判斷是否存在5個(gè)相連的同類棋子,黑棋的五個(gè)棋子在橫、豎或斜方向上連接成一線即為該方贏如圖4所示:圖4.游戲結(jié)束界面(4)白棋的五個(gè)棋子在橫、豎或斜方向上連接成一線即為該方贏如圖4所示: 圖5.白棋勝利界面圖4.設(shè)計(jì)體會(huì)通過這次課程設(shè)計(jì),我進(jìn)一步加深對(duì)基礎(chǔ)理論的理解,擴(kuò)大專業(yè)知識(shí)面,對(duì)收集資料、查閱文獻(xiàn)、方案制定等實(shí)踐方面得到了很好的鍛練,促進(jìn)對(duì)所學(xué)知識(shí)應(yīng)用能力的提高。同時(shí)我漸漸的復(fù)習(xí)了Java使用方法和

21、編程語(yǔ)法,之后的編程過程也相對(duì)得心應(yīng)手,基本完成了預(yù)期計(jì)劃的要求。在此感謝我的指導(dǎo)老師原玥老師,她在課題的研究上不遺余力的給予指導(dǎo)。她嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度深深的影響了我,使我受益匪淺!這個(gè)課設(shè)題對(duì)我來說有一定的挑戰(zhàn)性,因?yàn)槲易约阂膊恢雷约旱降讓W(xué)到了一個(gè)什么樣的境界。但可以肯定,這個(gè)課設(shè)題的要求絕對(duì)在我的能力范圍以上。之所以選擇這個(gè)題目是想逼著自己去查更多的資料,學(xué)到更多的東西。結(jié)果也確實(shí)是這樣的,我在這次課設(shè)中學(xué)到了不少東西,也理解了許多原來不理解的東西。盡管這個(gè)系統(tǒng)做的并不是那么的完善。對(duì)于Java中的引用,初始化類等,開始我并不是非常的理解,知道就這么做就能實(shí)現(xiàn)相應(yīng)的功能了,并沒有很深刻的去理

22、解它為什么要這么做。但是真正的要用Java去做一個(gè)東西不理解它是不行的,而且其間這課設(shè)涉及到了Java 中的絕大多數(shù)的知識(shí)點(diǎn),如Java圖形用戶界面設(shè)計(jì)、Java中的多線程程序設(shè)計(jì)、Java輸入輸出流,要應(yīng)用這些東西更要求我去好好理解Java的這些規(guī)則。經(jīng)過了長(zhǎng)時(shí)間的反復(fù)編寫調(diào)試,課本和網(wǎng)上查閱相關(guān)資料相關(guān)文章,終于完成了整個(gè)課程設(shè)計(jì)。在這個(gè)過程中,在把書本上的知識(shí)給系統(tǒng)的復(fù)習(xí)了一下的同時(shí),同時(shí)也發(fā)現(xiàn)了自己的太多不足,對(duì)JAVA語(yǔ)言整體知識(shí)構(gòu)架不夠熟悉,不能靈活地運(yùn)用所學(xué)的知識(shí)點(diǎn)。自己的編程方式也不是太標(biāo)準(zhǔn),經(jīng)常出現(xiàn)代碼寫錯(cuò)而調(diào)試很久的低級(jí)錯(cuò)誤情況出現(xiàn)。在這次課程設(shè)計(jì)中,我明白了編寫程序,不僅

23、要求對(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)度。還有通過設(shè)計(jì)過程中大量地查閱網(wǎng)絡(luò)文章,對(duì)一些關(guān)鍵知識(shí)點(diǎn)逐個(gè)地了解并解決相關(guān)問題5.參考文獻(xiàn)1陳國(guó)君,陳磊,劉洋.Java2程序設(shè)計(jì)基礎(chǔ)M北京:清華大學(xué)出版社 20092 埃史爾,陳昊鵬.Java編程思想(第4版)M.北京:機(jī)械工業(yè)出版社 20073 李鐘尉,馬文強(qiáng),陳丹丹.Java從入門到精通M.北京:清華大學(xué)出版社 20084 Y.Daniel Liang,萬(wàn)波,鄭海紅,潘蓉.Java語(yǔ)言程序設(shè)計(jì):基礎(chǔ)篇(原書第6

24、版)M.北京:機(jī)械工業(yè)出版社 20085 Ian F.Darwin,關(guān)麗榮,張曉坤.Java經(jīng)典實(shí)例(第2版)M.北京:中國(guó)電力出版社 20096丁振凡.Java語(yǔ)言實(shí)用教程M.北京:北京郵電大學(xué)出版社 20057張廣彬,孟紅蕊,張永寶.Java課程設(shè)計(jì)案例精編M.北京:清華大學(xué)出版社 2005附錄:程序源文件import java.awt.Checkbox;import java.awt.CheckboxGroup;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event

25、.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JPanel;public

26、 class FivChese extends JFrame CheseGame CG; FivChese () this.CG= new CheseGame(); addMouseListener(CG); add(CG); public static void main(String args) FivChese fivechese= new FivChese (); fivechese.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fivechese.setSize(900, 700); fivechese.setTitle("

27、五子棋"); fivechese.setVisible(true); fivechese.setResizable(true); class CheseGame extends JPanel implements MouseListener,ItemListener int map = new int2020; Color color = Color.BLACK,Color.WHITE,Color.LIGHT_GRAY; /棋子坐標(biāo) int x = -1; int y = -1; /判定是白棋還是黑棋 int flag = 1; /判定勝負(fù) int winner = 3; JButt

28、on btn1 = new JButton("開始"); /游戲開始 JButton btn2 = new JButton("再來一局");/游戲重置 /確定白棋先還是黑棋先 CheckboxGroup cbg = new CheckboxGroup(); Checkbox chb1 = new Checkbox("黑棋先開始",cbg,true); Checkbox chb2 = new Checkbox("白棋先開始",cbg,false); Override public void itemStateChan

29、ged(ItemEvent ie) / throw new UnsupportedOperationException("Not supported yet."); if(chb1.getState() flag = 1; else flag = 2; class GameStart implements ActionListener public void actionPerformed(ActionEvent ae) if(ae.getSource() = btn1)/str.equals("Start") start(); repaint(); b

30、tn1.setEnabled(false); btn2.setEnabled(true); chb1.setEnabled(false); chb2.setEnabled(false); if(ae.getSource() = btn2) start(); repaint(); chb1.setEnabled(true); chb2.setEnabled(true); CheseGame() this.setLayout(null); chb1.setBounds(650, 50, 100, 30); chb2.setBounds(650, 100, 100, 30); chb1.addIte

31、mListener(this); chb2.addItemListener(this); btn1.setBounds(650,150,100,30); btn1.addActionListener(new GameStart(); btn2.setBounds(650, 200, 100, 30); btn2.addActionListener(new GameStart(); btn2.setEnabled(false); this.add(btn1); this.add(btn2); this.add(chb1); this.add(chb2); void start() for(int

32、 i = 0;i < 20;i+) for(int j = 0;j < 20;j+) mapij = 0; winner = 0; Boolean win(int x,int y) int score = 1; for(int i = x;i < x+4;)/橫向x+ if(i = 19) break; if(mapiy != map+iy) break; score+; for(int i = x;i > x-4;)/橫向x- if(i = 0) break; if(mapiy != map-iy) break; score+; if(score >= 5) r

33、eturn true; else score = 1; for(int j = y; j < y+4;)/縱向y+ if(j = 19) break; if(mapxj != mapx+j) break; score+; for(int j = y; j > y-4;)/縱向y- if(j = 0) break; if(mapxj != mapx-j) break; score+; if(score >= 5) return true; else score = 1; for(int i = x;i < x+4;)/斜向x+、y+ for(int j = y;j <

34、; y+4;) if(i = 19 | y = 19) i = x+4; break; if(mapij != map+i+j) i = x+4; break; score+; for(int i = x;i > x-4;)/斜向x-、y- for(int j = y;j > y-4;) if(i = 0|j=0) i = x-4; break; if(mapij != map-i-j) i = x-4; break; score+; if(score >= 5) return true; else score = 1; for(int i = x;i > x-4;)/

35、斜向x-、y+ for(int j = y;j < y+4;) if(i=0 | j=19) i = x-4;break; if(mapij != map-i+j) i = x-4; break; score+; for(int i = x;i < x+4;)/斜向x+、y- for(int j = y;j > y-4;) if(i=19|j=0) i = x+4;break; if(mapij != map+i-j) i = x + 4; break; score+; if(score >= 5) return true; else return false; pub

36、lic void paintComponent(Graphics g) super.paintComponent(g); setBackground(color2); /畫棋盤 for(int i = 1;i <= 20;i+) g.setColor(color0); g.drawLine(30, i*30 ,600 , i*30); g.drawLine(i*30,30, i*30, 600); /畫棋子 for(int i = 0;i < 20;i+) for(int j = 0;j < 20;j+) if(mapij = 1) g.setColor(color0); g.fillOval(i+1)*30-15, (j+1)*30-15, 30, 30); if(mapij = 2) g.setColor(color1); g.fillOval(i+1)*30-15, (j+1)*30-15, 30, 30);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論