版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)論文</b></p><p><b> 目錄</b></p><p><b> 內(nèi)容摘要1</b></p><p><b> 關(guān) 鍵 字1</b></p><p> Abstract.1</p>
2、<p> Key words1</p><p><b> 前言1</b></p><p><b> 第一章 概述2</b></p><p><b> 1.1編程語(yǔ)言2</b></p><p> 1.2 java開發(fā)平臺(tái)3</p>&
3、lt;p> 第二章 需求分析5</p><p> 2.1五子棋發(fā)展史5</p><p> 2.2五子棋功能說(shuō)明6</p><p> 第三章 設(shè)計(jì)分析8</p><p> 3.1重點(diǎn)模塊分析:8</p><p> 3.2 設(shè)計(jì)流程:8</p><p> 4.1 主
4、類Test:9</p><p> 4.2程序窗體類FiveChessFrame類:9</p><p> 第五章 游戲的調(diào)試20</p><p><b> 第六章 結(jié)論24</b></p><p><b> 參考文獻(xiàn)24</b></p><p><b&g
5、t; 致謝:25</b></p><p> 內(nèi)容摘要: 隨著互聯(lián)網(wǎng)迅速的發(fā)展,網(wǎng)絡(luò)游戲已經(jīng)成為人們普遍生活中不可或缺的一部分,它不僅能使人娛樂(lè),也能夠開發(fā)人的智力,就像本文所主要講的五子棋游戲一樣能挖掘人們聰明的才干與腦袋的機(jī)靈程度。</p><p> 本文主要講的是用Eclipse開發(fā)工具與java開發(fā)語(yǔ)言開發(fā)出一個(gè)自定義界面的五子棋小游戲,本游戲程序能實(shí)現(xiàn)兩個(gè)人對(duì)
6、陣下棋,并且程序中能自定義游戲的時(shí)間并且也能智能的判定游戲的獲勝方和游戲的結(jié)束與否,實(shí)現(xiàn)兩方進(jìn)行博弈。</p><p> 關(guān)鍵詞:Eclipse java語(yǔ)言 智能 自定義 五子棋</p><p> Abstract: As the rapid development of Internet, Online games have become an integral part
7、 of the universal life, Not only does it make people entertainment, but also to develop people's intelligence, as in this paper as the main spoken welcome to play smart to tap people's talents and head of the cle
8、ver level.</p><p> This article is talking about Eclipse development tools and java development language to develop a custom interface Gobang game, the game program can achieve against two people playing ch
9、ess, and the program can be custom game time and also be able to determine intelligence the game winning side and the end of the game or not, to achieve two side game.</p><p> Key words:Eclipse,java languag
10、e,intelligence,user—defined ,chess</p><p><b> 前言</b></p><p> 電腦已經(jīng)深入到日常工作和生活的方方面面,比如文字處理、信息管理、輔助設(shè)計(jì)、圖形圖像處理、教育培訓(xùn)以及游戲娛樂(lè)等。Windows系統(tǒng)的推出使電腦從高雅的學(xué)術(shù)殿堂走入了尋常百姓家,各行各業(yè)的人們無(wú)須經(jīng)過(guò)特別的訓(xùn)練就能夠使用電腦完成許許多多復(fù)
11、雜的工作。然而,雖然現(xiàn)在世界上已經(jīng)充滿了花樣繁多的各種軟件,但它們依然不能滿足用戶的各種特殊需要,人們還不得不開發(fā)適合自己特殊需求的軟件。 </p><p> 作為一名學(xué)生,在系統(tǒng)的學(xué)習(xí)了Java語(yǔ)言之后,用它編了一些小程序。這次課程設(shè)計(jì),我就想將學(xué)過(guò)的Java語(yǔ)言中的各種技術(shù)綜合起來(lái),編寫一個(gè)小游戲,既對(duì)自己學(xué)過(guò)的技能進(jìn)行一次檢驗(yàn),也能系統(tǒng)地將學(xué)過(guò)的知識(shí)復(fù)習(xí)鞏固。</p><p>
12、<b> 第一章 概述</b></p><p> 本文使用功能強(qiáng)大的Eclipse開發(fā)工具和java開發(fā)語(yǔ)言開發(fā)出一款擁有自己特色的五子棋小程序,其中Eclipse 是一個(gè)開放源代碼的、基于 Java 的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開發(fā)工具(Java Develop
13、ment Tools,JDT)。</p><p><b> 1.1編程語(yǔ)言 </b></p><p> 1.1.1 java語(yǔ)言介紹</p><p> 現(xiàn)代技術(shù)的發(fā)展,尤其是網(wǎng)絡(luò)技術(shù),給現(xiàn)代企業(yè)帶來(lái)了許多新的機(jī)遇和挑戰(zhàn),如改善客戶服務(wù)、全球化和信息檢索等,這些在技術(shù)上反映為信息的獲取、系統(tǒng)管理、系統(tǒng)集成、新技術(shù)的開發(fā)、Internet
14、、Intranet等等與商業(yè)的結(jié)合。而這些要求一個(gè)隨處可用的開放的結(jié)構(gòu)和在不同的平臺(tái)之間低成本的信息傳遞方式,Java正好滿足這些要求。 Java是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言(以下簡(jiǎn)稱Java語(yǔ)言)和Java平臺(tái)的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺(tái)、動(dòng)感的Web、Internet計(jì)算。從此,Java被廣泛接受
15、并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。另一方面,Java技術(shù)也不斷更新。Java平臺(tái)由Java虛擬機(jī)(Java Virtual Machine)和Java 應(yīng)用編程接口(Application Programming Interface、簡(jiǎn)稱API)構(gòu)成。Java 應(yīng)用編程接口為Java應(yīng)用提供了一個(gè)獨(dú)立于操作系統(tǒng)的標(biāo)準(zhǔn)接口,可分為基本部分</p><p> 1.1.2 ja
16、va語(yǔ)言的優(yōu)點(diǎn) </p><p><b> (1)面向?qū)ο?lt;/b></p><p> Java提供了簡(jiǎn)單的類機(jī)制和動(dòng)態(tài)的構(gòu)架模型。對(duì)象中封裝了它的狀態(tài)變量和方法,很好地實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,通過(guò)繼承和重載機(jī)制,子類可以使用或重新定義父類或超類所提供的方法,從而既實(shí)現(xiàn)了代碼的復(fù)用,又提供了一種動(dòng)態(tài)的解決方案。(2) 多線程
17、 多線程使應(yīng)用程序可以同時(shí)進(jìn)行不同的操作,處理不同的事件。在多線程機(jī)制中,不同的線程處理不同的任務(wù),他們之間互不干涉,不會(huì)由于一處等待影響其他部分,這樣容易實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互操作。</p><p> (3)動(dòng)態(tài)性 Java的設(shè)計(jì)使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類庫(kù)中可以自由地加入新的方法和實(shí)例變量而不會(huì)影響用戶程序的執(zhí)行。并且 Java通過(guò)接口來(lái)支持多重繼承 ,使之比嚴(yán)格的類繼承具
18、有更靈活的方式和擴(kuò)展性。</p><p> (4) 安全性 用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵,Java不支持指針,一切對(duì)內(nèi)存的訪問(wèn)都必須通過(guò)對(duì)象的實(shí)例變量來(lái)實(shí)現(xiàn),這樣就防止了程序員使用欺騙手段訪問(wèn)對(duì)象的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。</p><p> (5).可移植性 與平臺(tái)無(wú)關(guān)的特性使 Java程序可以方便地
19、被移植到網(wǎng)絡(luò)上的不同機(jī)器。同時(shí) ,Java的類庫(kù)中也實(shí)現(xiàn)了與不同平臺(tái)的接口 ,使這些類庫(kù)可以移植。另外,Java編譯器是由 Java語(yǔ)言實(shí)現(xiàn)的 ,Java運(yùn)行時(shí)系統(tǒng)由標(biāo)準(zhǔn) C實(shí)現(xiàn) ,這使得Java系統(tǒng)本身也具有可移植性。</p><p> 1.2 java開發(fā)平臺(tái) </p><p> 1.2.1 java的開發(fā)環(huán)境 </p><p> Java是由Sun
20、微系統(tǒng)公司所發(fā)展出來(lái)的程序語(yǔ)言,它本身是一種對(duì)象導(dǎo)向(Object-Oriented)的程序語(yǔ)言。JAVA目前在手機(jī)上應(yīng)用最多的就是JAVA游戲。 </p><p> Java也號(hào)稱是能跨平臺(tái)使用的語(yǔ)言,這主要是因?yàn)镴ava本身被編譯之后,并不是直接產(chǎn)生可執(zhí)行的碼,而是產(chǎn)生一種中間碼叫作 ByteCode,這種碼必需在透過(guò) Java 的直譯器來(lái)解讀它,才能夠真正的被執(zhí)行,所以只要平臺(tái)上裝有這種Java的直譯器,
21、就能解讀ByteCode也就能執(zhí)行Java編譯過(guò)的程序,故與Java程序是在哪種平臺(tái)上被編譯的,就完全沒(méi)有關(guān)系了。Java寫出來(lái)的程序可分為兩類,分別是Java Applet與一般的Application,而Application 這一類就與一般的程序如C++的作用是比較類似的,是一個(gè)獨(dú)立可執(zhí)行的應(yīng)用程序,像HotJava是一個(gè)瀏覽器,且就是使用Java程序所開發(fā)出來(lái)的。最常見的Java程序包括應(yīng)用程序和applets。應(yīng)用程序是單獨(dú)的
22、程序,諸如HotJava瀏覽器軟件就是用Java語(yǔ)言編寫的。 Applets類似于應(yīng)用程序,但是它們不能單獨(dú)運(yùn)行, Applets可以在支持Java的瀏覽器中運(yùn)行。Applet主要是內(nèi)置于HTML網(wǎng)頁(yè)中,在瀏覽時(shí)發(fā)揮作用。 </p><p> 1.2.2 java的編輯環(huán)境 </p><p> (一)用功能強(qiáng)大的開源工具Eclipse來(lái)開發(fā),相對(duì)較為方便,eclipse比較通用,而
23、且支持很多插件。</p><p> (二) Java主要是利用文本編輯器來(lái)完成程序設(shè)計(jì)的編輯工作,可以使用各種文本編輯器來(lái)編寫,例如:記事本、Editplus和UltraEdit軟件等都可以用來(lái)實(shí)現(xiàn)。</p><p> (1)用記事本編寫過(guò)程很簡(jiǎn)單,只需要帶開記事本在里面編寫代碼幾可以了。</p><p> (2)用Editplus軟件配置JAVA編輯環(huán)境:&
24、lt;/p><p> 1:打開Editplus,選擇"工具->參數(shù)選擇"在彈出的窗口中選擇"用戶工具";</p><p> 2:點(diǎn)組名稱,將"組1"改成別的名稱(當(dāng)然不改也可以);點(diǎn)"添加工具->應(yīng)用程序";菜單文件選項(xiàng)可寫"Java編譯",在命令中選擇JDK的javac.exe
25、,是在JDK的目錄下的bin目錄下;參數(shù)在下拉菜單中選擇"文件名",初始目錄在下拉菜單中選擇"文件目錄";在"捕獲輸出"前打勾,這就完成了"Java編譯"的配置.</p><p> 3:再點(diǎn)"添加工具->應(yīng)用程序";菜單文件選項(xiàng)可寫"Java運(yùn)行",在命令中選擇JDK的java.exe.
26、參數(shù)在下拉菜單中選擇"文件名(不含擴(kuò)展名)",初始目錄在下拉菜單中選擇"文件目錄";在"捕獲輸出"前打勾,完成了"Java編譯"的配置.配置完成了,寫一個(gè)"Hello World"來(lái)測(cè)試一下.只要按快捷鍵"Ctrl+1",是對(duì)當(dāng)前打開的文件進(jìn)行編譯;只要按快捷鍵"Ctrl+2",是運(yùn)行當(dāng)前文件. &
27、lt;/p><p> (三)Jbulder也是java的一款開發(fā)工具,功能更全面,而且操作好多都是即見即所得的,就想VB一樣方便快捷,不過(guò)它是一款收費(fèi)軟件,所以不是一些大公司一般不會(huì)使用它來(lái)作為java的開發(fā)工具。</p><p> 1.2.3 java的運(yùn)行環(huán)境 </p><p> 通常一個(gè)程序運(yùn)行的平臺(tái)是一個(gè)硬件或者軟件運(yùn)行的環(huán)境。目前比較流行的是Wind
28、ows 2000, Linux, Solaris, 和MacOS。Java的平臺(tái)不太一樣,它由兩個(gè)部分組成:一個(gè)是Java Virtual Machine即Java虛擬機(jī),另一部分是Java Application Programming Interface (Java API) 即Java應(yīng)用程序設(shè)計(jì)接口,這兩部份軟件就構(gòu)成了Java運(yùn)行的基本的環(huán)境。Java API 是一個(gè)大的已經(jīng)做好的軟件集合,這個(gè)集合里有許多開發(fā)時(shí)所需要的控件,
29、用來(lái)輔助開發(fā)。Java API和JVM整合在一起處于機(jī)器硬件之上。也就是說(shuō),Java平臺(tái)把一個(gè)Java應(yīng)用程序從硬件系統(tǒng)分離開從而很好的保證了程序的獨(dú)立性。為了更好的適應(yīng)開發(fā)的需要,Java的設(shè)計(jì)者們?yōu)槲覀兲峁┝巳NJava平臺(tái):Java 2 Micro Edition (J2ME ), Java 2 Standard Edition (J2SE)和 Java 2 Enterprise Edition (J2EE). 每一個(gè)版本都提供了
30、豐富的開發(fā)工具箱以適應(yīng)不同的開發(fā)需要。</p><p><b> 第二章 需求分析</b></p><p><b> 2.1五子棋發(fā)展史</b></p><p> 五子棋是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(Five in a
31、Row的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。 </p><p> 五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問(wèn)“陰陽(yáng)易理”;它既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜聞樂(lè)見,又有深?yuàn)W的技巧和高水平的國(guó)際性比賽;它的棋文化源淵流長(zhǎng),具有東方的神秘和西方的直觀;既有“場(chǎng)”的概念,亦有
32、“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。 </p><p> 對(duì)于五子棋與圍棋的關(guān)系有兩種說(shuō)法,一說(shuō)早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲;一說(shuō)源于圍棋,是圍棋發(fā)展的一個(gè)分支。在中國(guó)的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同,縱橫各十七道。五子棋大約隨圍棋一起在我國(guó)南北朝時(shí)先后傳入朝鮮、日本等地。</p><p> 2.2五子棋功能說(shuō)明</
33、p><p> 2.2.1五子棋特點(diǎn)及規(guī)則</p><p> 五子棋的娛樂(lè)性強(qiáng)、規(guī)則簡(jiǎn)單、易學(xué)、流行性廣,普通人不需長(zhǎng)時(shí)間專門訓(xùn)練即可自如行棋,因此極受大眾喜歡·</p><p><b> 五子棋規(guī)則為:</b></p><p> 1.棋盤:采用像圍棋盤一樣的棋盤,本系統(tǒng)采用18路的棋盤·</
34、p><p> 2.下法:兩人分別執(zhí)黑白兩色棋子,輪流在棋盤上選擇一個(gè)無(wú)子的交叉點(diǎn)落子,無(wú)子的交叉點(diǎn)又被稱為空點(diǎn)·</p><p> 3.輸贏判斷:黑、白雙方有一方的五個(gè)棋子在橫、豎或斜方向上連接成一線即為該方贏·</p><p> 2.2.2操作界面需求</p><p> 操作界面如下圖(1)所示,游戲畫面簡(jiǎn)單易懂:&
35、lt;/p><p><b> 圖(1)</b></p><p> 2.2.3程序流程</p><p> 2.2.3主要模塊分析</p><p> 我們看到本程序由4個(gè)基本功能模塊構(gòu)成,各模塊的詳細(xì)分析如下:</p><p> 1.初始化FiveChessFrame類</p>
36、<p> 過(guò)imagePath = System.getProperty("user.dir")+"/bin/image/background.jpg" ;</p><p> bgImage = ImageIO.read(new File(imagePath.replaceAll("\\\\", "/")));加載背景
37、圖片,然后再背景圖上通過(guò):paint方法中的for (int i = 0; i < 18; i++) {g2.drawLine(258, 102 + 30 * i, 767, 102 + 30 * i);</p><p> g2.drawLine(258 + 30 * i, 102, 258 + 30 * i, 612);</p><p> }語(yǔ)句繪制一個(gè)18*18的網(wǎng)格棋盤,
38、每次下棋后通過(guò)調(diào)用repaint方法來(lái)初始化程序。</p><p> 2.通過(guò)public void mousePressed(MouseEvent e)這個(gè)主方法中的isBlack變量值來(lái)判斷當(dāng)前應(yīng)該哪一方開始下棋。</p><p> 3.若是白子,則通過(guò)allChess[][]這個(gè)二維數(shù)組的值為1來(lái)定義該子,若是黑子,則通過(guò)allChess[][]數(shù)組的值為2來(lái)定義該子,若為0,則
39、為空。</p><p> 4.通過(guò)checkWin()方法來(lái)判定當(dāng)前方是否已練成5個(gè)同顏色的棋子。若同時(shí)有了5個(gè)同顏色的連子(不論是豎直,水平還是斜方向的)則判定該方獲勝。</p><p><b> 第三章 設(shè)計(jì)分析</b></p><p> 3.1重點(diǎn)模塊分析:</p><p> 本程序最重要的就是能夠自動(dòng)判定
40、黑白兩方各個(gè)方向上的棋子是否連成了五個(gè)相同顏色的棋子,怎么做到這點(diǎn)呢?這個(gè)要通過(guò)private int checkCount(int xChange, int yChange, int color)方法來(lái)判定,然后通過(guò)private boolean checkWin()方法判定獲勝方(具體方法后邊會(huì)寫出,供讀者了解分析)。其次本程序關(guān)鍵的一點(diǎn)就是可以模擬游戲中的按鈕來(lái)自定義游戲的時(shí)間,從而增加本游戲的可控性,智能性,同時(shí)增強(qiáng)游戲玩家的趣
41、味性和刺激性。</p><p><b> 3.2 設(shè)計(jì)流程:</b></p><p> 因?yàn)楸境绦蛴肊clipse開發(fā),如圖(2):</p><p><b> 圖(2)</b></p><p> 在Eclipse中建立了兩個(gè)類,一個(gè)是有主方法的test主類,另一個(gè)是程序的主窗體FiveChe
42、ssFrame類,同時(shí)為了方便管理和應(yīng)用兩個(gè)類都分別打包了,具體見后面。</p><p><b> 第四章 代碼設(shè)計(jì)</b></p><p> 4.1 主類Test:</p><p> package org.guoguo.game.test;</p><p> import org.guoguo.game.f
43、rame.FiveChessFrame;</p><p> public class Test {</p><p> public static void main(String[] args) {</p><p> FiveChessFrame ff = new FiveChessFrame();</p><p><b>
44、 }</b></p><p><b> }</b></p><p> 4.2程序窗體類FiveChessFrame類:</p><p> 4.2.1主類FiveChessFrame</p><p> public class FiveChessFrame extends JFrame implemen
45、ts MouseListener, Runnable {</p><p> int width = Toolkit.getDefaultToolkit().getScreenSize().width;</p><p> int height = Toolkit.getDefaultToolkit().getScreenSize().height;</p><p>
46、; BufferedImage bgImage = null;</p><p> int x = 0;int y = 0;</p><p> int[][] allChess = new int[18][18];</p><p> boolean isBlack = false;boolean canPlay = true;</p><p
47、> String message = "白方先行";int maxTime = 0;</p><p> Thread t = new Thread(this);</p><p> int blackTime = 0;int whiteTime = 0;</p><p> String blackMessage = "無(wú)限制
48、";String whiteMessage = "無(wú)限制";</p><p> String blackMessage0 = "無(wú)限制";String whiteMessage0 = "無(wú)限制";</p><p> public FiveChessFrame() {this.setTitle("五子棋&qu
49、ot;);</p><p> this.setSize(1000, 750);this.setLocation((width - 1000) / 2, (height - 750) /2);this.setResizable(false);</p><p> this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p>
50、<p> this.addMouseListener(this);this.setVisible(true);t.start();</p><p> t.suspend();this.repaint();String imagePath = "" ;</p><p> try {imagePath=System.getProperty("
51、user.dir")+"/bin/image/background.jpg" ;</p><p> bgImage = ImageIO.read(new File(imagePath.replaceAll("\\\\", "/")));</p><p> } catch (IOException e) {</p
52、><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p> 4.2.2畫棋盤的paint方法:</p><p> public void paint(Graphics g) {<
53、;/p><p> BufferedImage bi = new BufferedImage(1000, 750,</p><p> BufferedImage.TYPE_INT_RGB);</p><p> Graphics g2 = bi.createGraphics();</p><p> g2.setColor(Color.WHIT
54、E);g2.drawImage(bgImage, 1, 20, this);</p><p> g2.setFont(new Font("隸書", Font.BOLD, 20));</p><p> g2.drawString("游戲信息:" + message, 428, 83);</p><p> g2.setCol
55、or(Color.BLACK);</p><p> g2.setFont(new Font("宋體", Font.BOLD, 14));</p><p> g2.drawString(whiteMessage, 128, 360);</p><p> g2.drawString(blackMessage0, 128, 315);g2.set
56、Color(Color.WHITE);</p><p> g2.drawString(blackMessage, 830, 365);</p><p> g2.drawString(whiteMessage0,830, 315);g2.setColor(Color.BLACK);</p><p> g2.setFont(new Font("隸書&q
57、uot;, Font.BOLD, 40));</p><p> for (int i = 0; i < 18; i++) {</p><p> g2.drawLine(258, 102 + 30 * i, 767, 102 + 30 * i);</p><p> g2.drawLine(258 + 30 * i, 102, 258 + 30 * i, 6
58、12);</p><p><b> }</b></p><p> g2.fillOval(375, 219, 8, 8);g2.fillOval(645,219, 8, 8);</p><p> g2.fillOval(645, 489, 8, 8);g2.fillOval(375, 489, 8, 8);</p><
59、p> for (int i = 0; i < 18; i++) {</p><p> for (int j = 0; j < 18; j++) {</p><p> if (allChess[i][j] == 1) {</p><p> int tempX = i * 30 + 258;int tempY = j * 30 + 102;&l
60、t;/p><p> g2.fillOval(tempX - 12, tempY - 12, 28, 28);</p><p><b> }</b></p><p> if (allChess[i][j] == 2) {</p><p> int tempX = i * 30 + 258;int tempY = j *
61、 30 + 102;</p><p> g2.setColor(Color.WHITE);</p><p> g2.fillOval(tempX - 12, tempY - 12, 28, 28);</p><p> g2.setColor(Color.BLACK);</p><p> g2.drawOval(tempX - 12,
62、tempY - 12, 28, 28);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> g.drawImage(bi, 0, 0, this);</p><p>
63、;<b> }</b></p><p> 4.2.3鼠標(biāo)點(diǎn)擊的mousePressed()方法,其中包括點(diǎn)擊各個(gè)按鈕的相應(yīng)事件</p><p> public void mousePressed(MouseEvent e) {</p><p> System.out.println("X:"+e.getX());
64、 System.out.println("Y:"+e.getY());</p><p> if (canPlay == true) {</p><p> x = e.getX();</p><p> y = e.getY();</p><p> if (x >=260 && x <=
65、767 && y >= 101 && y <= 610) {</p><p> x = (x - 260) / 30;y = (y - 101) / 30;</p><p> if (allChess[x][y] == 0)</p><p> {if (isBlack == true) {</p>&l
66、t;p> allChess[x][y] = 1;isBlack = false;</p><p> message = "輪到白方";</p><p><b> } else {</b></p><p> allChess[x][y] = 2;isBlack = true;</p><p&g
67、t; message = "輪到黑方";</p><p><b> }</b></p><p> boolean winFlag = this.checkWin();</p><p> if (winFlag == true) {</p><p> if(allChess[x][y]=
68、= 1){</p><p> message="黑方勝利";t.suspend();</p><p><b> }</b></p><p><b> else</b></p><p> {message="白方勝利";</p><
69、p> t.suspend();</p><p><b> }</b></p><p> JOptionPane.showMessageDialog(this, "游戲結(jié)束,"</p><p> + (allChess[x][y] == 1 ? "黑方" : "白方") +
70、 "獲勝!");</p><p> this.canPlay = false;</p><p><b> }</b></p><p><b> } else {</b></p><p> JOptionPane.showMessageDialog(this, "
71、當(dāng)前位置已經(jīng)有棋子,請(qǐng)重新落子!");</p><p><b> }</b></p><p> this.repaint();</p><p><b> }</b></p><p><b> }</b></p><p> if (e.
72、getX() >= 482 && e.getX() <= 523 && e.getY() >= 667&& e.getY() <= 685) {int result = JOptionPane.showConfirmDialog(this, "是否重新開始游戲?");if (result == 0) {</p><p>
73、 for (int i = 0; i < 18; i++) {</p><p> for (int j = 0; j < 18; j++) {</p><p> allChess[i][j] = 0;</p><p><b> }</b></p><p><b> }</b>&l
74、t;/p><p> message = "白方先行";isBlack = false;</p><p> blackTime = maxTime;whiteTime = maxTime;</p><p> if (maxTime > 0) {</p><p> blackMessage = maxTime / 3
75、600 + ":"+ (maxTime / 60 - maxTime / 3600 * 60) + ":"+ (maxTime - maxTime / 60 * 60);</p><p> whiteMessage = maxTime / 3600 + ":"+ (maxTime / 60 - maxTime / 3600 * 60) + "
76、:"+ (maxTime - maxTime / 60 * 60);</p><p> t.resume();</p><p><b> } else {</b></p><p> blackMessage = "無(wú)限制";whiteMessage = "無(wú)限制";</p>
77、<p><b> }</b></p><p> this.canPlay = true;this.repaint();</p><p><b> }</b></p><p><b> }</b></p><p> if (e.getX() >= 264
78、 && e.getX() <= 307 && e.getY() >= 645</p><p> && e.getY() <= 665) {</p><p> String input = JOptionPane.showInputDialog("請(qǐng)輸入游戲的最大時(shí)間(單位:分鐘),如果輸入0,表示沒(méi)有時(shí)間限制:
79、");</p><p><b> try {</b></p><p> maxTime = Integer.parseInt(input) * 60;</p><p> if (maxTime < 0) {</p><p> JOptionPane.showMessageDialog(this,
80、"請(qǐng)輸入正確信息,不允許輸入負(fù)數(shù)!");</p><p><b> }</b></p><p> if (maxTime == 0) {</p><p> int result = JOptionPane.showConfirmDialog(this,</p><p> "設(shè)置完成,
81、是否重新開始游戲?");</p><p> if (result == 0) {</p><p> for (int i = 0; i < 18; i++) {</p><p> for (int j = 0; j < 18; j++) {</p><p> allChess[i][j] = 0;</p&g
82、t;<p><b> }</b></p><p><b> }</b></p><p> message = "白方先行";isBlack = false;</p><p> blackTime = maxTime;whiteTime = maxTime;</p>&
83、lt;p> blackMessage = "無(wú)限制";whiteMessage = "無(wú)限制";</p><p> blackMessage0= "無(wú)限制";whiteMessage0 = "無(wú)限制";</p><p> t.suspend();this.canPlay = true;this.re
84、paint();</p><p><b> }</b></p><p><b> }</b></p><p> if (maxTime > 0) {</p><p> int result = JOptionPane.showConfirmDialog(this,</p>
85、<p> "設(shè)置完成,是否重新開始游戲?");</p><p> if (result == 0) {</p><p> for (int i = 0; i < 18; i++) {</p><p> for (int j = 0; j < 18; j++) {</p><p> allC
86、hess[i][j] = 0;</p><p><b> }</b></p><p><b> }</b></p><p> message = "白方先行";isBlack = false;</p><p> blackTime = maxTime;whiteTime
87、= maxTime;</p><p> blackMessage = maxTime / 3600 + ":"+ (maxTime / 60 - maxTime / 3600 * 60) + ":"+ (maxTime - maxTime / 60 * 60);</p><p> whiteMessage = maxTime / 3600 + &
88、quot;:"+ (maxTime / 60 - maxTime / 3600 * 60) + ":"+ (maxTime - maxTime / 60 * 60);</p><p> blackMessage0 = maxTime / 3600 + ":"+ (maxTime / 60 - maxTime / 3600 * 60) + ":"
89、;+ (maxTime - maxTime / 60 * 60);</p><p> whiteMessage0 = maxTime / 3600 + ":"+ (maxTime / 60 - maxTime / 3600 * 60) + ":"+ (maxTime - maxTime / 60 * 60);</p><p> t.resume(
90、);this.canPlay = true;this.repaint();</p><p><b> }</b></p><p><b> }</b></p><p> } catch (NumberFormatException e1) {</p><p> JOptionPane.sho
91、wMessageDialog(this, "請(qǐng)正確輸入信息!");</p><p><b> }</b></p><p><b> }</b></p><p> if (e.getX() >= 656 && e.getX() <= 697 && e.ge
92、tY() >= 644</p><p> && e.getY() <= 661) {</p><p> JOptionPane.showMessageDialog(this,</p><p> "這個(gè)一個(gè)五子棋游戲程序,黑白雙方輪流下棋,當(dāng)某一方連到五子時(shí),則該方獲勝,同時(shí)游戲結(jié)束。");</p>
93、<p><b> }</b></p><p> if (e.getX() >= 321 && e.getX() <= 364 && e.getY() >= 643</p><p> && e.getY() <= 663) {</p><p> JOptio
94、nPane.showMessageDialog(this,"游戲開始時(shí),根據(jù)上方提示信息,用鼠標(biāo)點(diǎn)擊棋盤黑白雙方輪流下子");</p><p><b> }</b></p><p> if (e.getX() >= 546 && e.getX() <= 592 && e.getY() >= 66
95、2&& e.getY() <= 678) {int result = JOptionPane.showConfirmDialog(this, "是否確認(rèn)認(rèn)輸?");</p><p> if (result == 0) {if (isBlack) {message ="黑方認(rèn)輸,白方獲勝?。?!";this.repaint();JOptionPane.s
96、howMessageDialog(this, "黑方已經(jīng)認(rèn)輸,游戲結(jié)束!");</p><p><b> } else {</b></p><p> message="白方認(rèn)輸,黑方獲勝!?。?quot;;</p><p> this.repaint();</p><p> JOpt
97、ionPane.showMessageDialog(this, "白方已經(jīng)認(rèn)輸,游戲結(jié)束!");</p><p><b> }</b></p><p> canPlay = false;</p><p><b> }</b></p><p><b> }<
98、/b></p><p> if (e.getX() >= 420 && e.getX() <= 457 && e.getY() >= 663</p><p> && e.getY() <= 683) {</p><p> JOptionPane.showMessageDialog(t
99、his,</p><p> "本程序來(lái)源蟈蟈基地,創(chuàng)作人:郭貴揚(yáng)(郭幗),有相關(guān)問(wèn)題可以寫信留言97682373@qq.com");</p><p><b> }</b></p><p> if (e.getX() >= 716 && e.getX() <= 762 && e
100、.getY() >= 648&& e.getY() <= 665) {JOptionPane.showMessageDialog(this, "游戲結(jié)束");System.exit(0);</p><p><b> }</b></p><p><b> }</b></p><
101、p> public void mouseReleased(MouseEvent e) {</p><p><b> }</b></p><p> private boolean checkWin() {</p><p> boolean flag = false;</p><p> int count =
102、 1;int color = allChess[x][y];</p><p> count = this.checkCount(1, 0, color);</p><p> if (count >= 5) {</p><p> flag = true;</p><p><b> } else {</b>&l
103、t;/p><p> count = this.checkCount(0, 1, color);</p><p> if (count >= 5) {flag = true;</p><p><b> } else {</b></p><p> count = this.checkCount(1, -1, col
104、or);</p><p> if (count >= 5) {</p><p> flag = true;</p><p><b> } else {</b></p><p> count = this.checkCount(1, 1, color);</p><p> if (c
105、ount >= 5) {</p><p> flag = true;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b&g
106、t;</p><p> return flag;</p><p><b> }</b></p><p> private int checkCount(int xChange, int yChange, int color) {</p><p> int count = 1;</p><p&g
107、t; int tempX = xChange;</p><p> int tempY = yChange;</p><p> while (x + xChange >= 0 && x + xChange <= 17 && y + yChange >= 0</p><p> && y + yCh
108、ange <= 17</p><p> && color == allChess[x + xChange][y + yChange]) {</p><p><b> count++;</b></p><p> if (xChange != 0)</p><p> xChange++;<
109、/p><p> if (yChange != 0) {</p><p> if (yChange > 0)</p><p> yChange++;</p><p><b> else {</b></p><p> yChange--;</p><p><b
110、> }}}</b></p><p> xChange = tempX;yChange = tempY;</p><p> while (x - xChange >= 0 && x - xChange <= 17 && y - yChange >= 0&& y - yChange <= 17&am
111、p;& color == allChess[x - xChange][y - yChange]) {count++;</p><p> if (xChange != 0)</p><p> xChange++;</p><p> if (yChange != 0) {</p><p> if (yChange > 0)&
112、lt;/p><p> yChange++;</p><p><b> else {</b></p><p> yChange--;</p><p><b> }</b></p><p><b> }</b></p><p>
113、<b> }</b></p><p> return count;</p><p><b> }</b></p><p> public void run() {</p><p> if (maxTime > 0) {</p><p> while (tru
114、e) {</p><p> if (isBlack) {</p><p> blackTime--;</p><p> if (blackTime == 0) {</p><p> message ="白方勝利";</p><p> JOptionPane.showMessageDial
115、og(this, "黑方超時(shí),游戲結(jié)束!");</p><p> blackMessage ="0:0:0";this.canPlay=false;this.repaint();t.suspend();</p><p><b> }</b></p><p><b> } else {<
116、;/b></p><p> whiteTime--;</p><p> if (whiteTime == 0) {</p><p> message ="黑方勝利";</p><p> JOptionPane.showMessageDialog(this, "白方超時(shí),游戲結(jié)束!");&l
117、t;/p><p> whiteMessage ="0:0:0";this.canPlay =false;</p><p> this.repaint();t.suspend();</p><p><b> }</b></p><p><b> }</b></p>
118、<p> blackMessage = blackTime / 3600 + ":"+ (blackTime / 60 - blackTime / 3600 * 60) + ":"+ (blackTime - blackTime / 60 * 60);</p><p> whiteMessage = whiteTime / 3600 + ":&qu
119、ot;+ (whiteTime / 60 - whiteTime / 3600 * 60) + ":"+ (whiteTime - whiteTime / 60 * 60);</p><p> this.repaint();</p><p><b> try {</b></p><p> Thread.sleep(10
120、00);</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b>
121、 }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 第五章 游戲的調(diào)試</b></p><p> 1 由于本程序是在Eclipse中開發(fā)的,所以程序在運(yùn)行的過(guò)程中是看不到中間的編譯過(guò)程的,直接
122、從測(cè)試類Test運(yùn)行來(lái)進(jìn)行游戲的調(diào)試,如圖(3):</p><p><b> 圖(3)</b></p><p> 2 游戲運(yùn)行后的界面如下圖(4)所示:</p><p><b> 圖(4)</b></p><p> 3 測(cè)試一下游戲下方各虛擬按鈕的效果,看是否能正常響應(yīng)鼠標(biāo)的操作,首先點(diǎn)擊“
123、設(shè)置”按鈕并在對(duì)話框中輸入數(shù)字5時(shí)如下圖(5)所示:</p><p><b> 圖(5)</b></p><p> 回車后如圖(6)所示:</p><p><b> 圖(6)</b></p><p> 點(diǎn)擊“是”按鈕后如圖(7)所示:</p><p><b>
124、; 圖(7)</b></p><p> 點(diǎn)擊主界面如圖(8):</p><p><b> 圖(8)</b></p><p> 由于篇幅有限不在一一測(cè)試,最后看下獲勝后的結(jié)果如圖(9)所示:</p><p><b> 圖(9)</b></p><p>&l
125、t;b> 第六章 結(jié)論</b></p><p> 通過(guò)對(duì)五子棋游戲的編寫,使自己對(duì)java語(yǔ)言有了更深的了解。也更加熟悉和了解了java開發(fā)工具Eclipse的使用</p><p> 同時(shí),程序在編寫完畢之后還有很多地方需要完善。例如:可以把另一方選擇為電腦方,讓電腦自動(dòng)下,也可以給游戲添加背景音樂(lè);甚至可以修改成網(wǎng)絡(luò)游戲,用戶可以在網(wǎng)上對(duì)戰(zhàn)。總之,有很多地方可以擴(kuò)
126、充和完善。在此次畢業(yè)設(shè)計(jì)過(guò)程中我也學(xué)到了許多了關(guān)于計(jì)算機(jī)方面的知識(shí),編程能力有了很大的提高。 </p><p><b> 參考文獻(xiàn)</b></p><p> [1] 葉核亞,陳道蓄.Java 2程序設(shè)計(jì)實(shí)用教程.電子工業(yè)出版社,2008,11(8)</p><p> [2] 嚴(yán)小衛(wèi),莫建文.智能五子棋的設(shè)計(jì)與實(shí)現(xiàn).廣西師范大學(xué)學(xué)報(bào)1999
127、年12月</p><p> [3] (美)埃克爾 著,陳昊鵬 譯,《Java編程思想》 機(jī)械工業(yè)出版社2007年06</p><p> [4]《Java課程設(shè)計(jì)案例精編》 張廣彬 孟紅蕊 張永寶 編著 清華大學(xué)出版社</p><p> [5]www.mldn.cn</p><p><b> 致謝:</b>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 五子棋游戲程序設(shè)計(jì)報(bào)告
- 畢業(yè)設(shè)計(jì)(論文)-五子棋游戲程序設(shè)計(jì)與開發(fā)
- java五子棋畢業(yè)設(shè)計(jì)--java五子棋對(duì)弈程序的設(shè)計(jì)與實(shí)現(xiàn)
- 開題報(bào)告智能五子棋程序設(shè)計(jì)
- 開題報(bào)告智能五子棋程序設(shè)計(jì)
- 電子信息工程畢業(yè)設(shè)計(jì)智能五子棋程序設(shè)計(jì)
- 五子棋游戲畢業(yè)設(shè)計(jì)
- [vc畢設(shè)]游戲程序設(shè)計(jì)(五子棋)
- 五子棋對(duì)弈系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--五子棋人機(jī)對(duì)弈
- flash五子棋畢業(yè)設(shè)計(jì)論文
- java五子棋畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)---網(wǎng)絡(luò)五子棋游戲
- 網(wǎng)絡(luò)五子棋游戲畢業(yè)設(shè)計(jì)
- java五子棋畢業(yè)設(shè)計(jì)(整套)
- 面向?qū)ο蟪绦蛟O(shè)計(jì)---五子棋-java課程設(shè)計(jì)
- 網(wǎng)絡(luò)五子棋五子棋設(shè)計(jì)與實(shí)現(xiàn).doc
- 《java程序設(shè)計(jì)》課程設(shè)計(jì)-五子棋小游戲
- qt網(wǎng)絡(luò)五子棋五子棋設(shè)計(jì)與實(shí)現(xiàn)
- 五子棋畢業(yè)論文-html開發(fā)五子棋的原型設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論