java五子棋小游戲?qū)嶒?yàn)報(bào)告(附源代碼)_第1頁
java五子棋小游戲?qū)嶒?yàn)報(bào)告(附源代碼)_第2頁
java五子棋小游戲?qū)嶒?yàn)報(bào)告(附源代碼)_第3頁
java五子棋小游戲?qū)嶒?yàn)報(bào)告(附源代碼)_第4頁
java五子棋小游戲?qū)嶒?yàn)報(bào)告(附源代碼)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、手機(jī)五子棋游戲的設(shè)計(jì)與實(shí)手機(jī)五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)現(xiàn)專業(yè):專業(yè): 姓名:姓名: 班級(jí):班級(jí): 學(xué)號(hào):學(xué)號(hào):指導(dǎo)教師:指導(dǎo)教師: 基于 j2me 的手機(jī)五子棋游戲2摘摘 要要j2me(java 2 micro edition)是近年來隨著各種不同設(shè)備,尤其是移動(dòng)通信設(shè)備的飛速發(fā)展而誕生的一項(xiàng)開發(fā)技術(shù)。它因其“write once,run anywhere”的 java 特性而提高了開發(fā)的效率。隨著手機(jī)性能的不斷提高,手機(jī)休閑娛樂應(yīng)用將成為 pc 休閑娛樂應(yīng)用之后又一重要業(yè)務(wù)增長點(diǎn)。棋類游戲規(guī)則單一,比較適合在手機(jī)等便攜終端推廣。 由于具有跨平臺(tái)、易于移植、占用空間小的優(yōu)勢,j2me 成為移動(dòng)應(yīng)用

2、開發(fā)平臺(tái)的主流,并提供了很多用以支持移動(dòng)應(yīng)用軟件的開發(fā)的 api?,F(xiàn)將該技術(shù)用于這次的手機(jī)游戲開發(fā),可以實(shí)現(xiàn)游戲的快速開發(fā),不但便于查看游戲運(yùn)行過程中內(nèi)存的占用量和程序的每一部分代碼消耗了多少處理器時(shí)間,而且可以不斷地優(yōu)化代碼,使代碼具有高度的復(fù)用性、可擴(kuò)展性、可維護(hù)性。游戲的開發(fā)以 j2me 為平臺(tái),利用 java 技術(shù),結(jié)合 j2me 的 midp 技術(shù),并對(duì)于程序設(shè)計(jì)思想,重要類、方法等展開討論。在對(duì)弈部分,分析設(shè)計(jì)走棋算法,選擇合適的方式組織成代碼,實(shí)現(xiàn)基本的人工智能。過程中使用了 j2me 中的 cldc/midp 軟件體系,主要運(yùn)用了 mid profile 的特定類的支持,來完成

3、游戲的開發(fā)。關(guān)鍵詞:關(guān)鍵詞:j2me;cldc;midp基于 j2me 的手機(jī)五子棋游戲3abstractj2me is a kind of fast developing technology implemented on various devices especially mobile communication equipments. it improves the efficiency of the development process because of its write once, run anywhere nature. the development trend of

4、the entertainment market based on the cell phone is very obvious because the handset performance enhances unceasingly. the entertainment market based on the cell phone will to be the new important business growth point follow the pc entertainment market. as the rules of a single chess game, it is mo

5、re suitable for mobile phones and other portable terminal extension. j2me has been the preferred platform for development because of its platform independent and compatibility, and provides a lot of apis to support the development of mobile application software. the technology for mobile game develo

6、pment, can achieve the rapid development of the game. it is not only easy to observe the memory consumption and processor consumed time during the operation of the game, but also can optimize the code, so that the code has a high degree of reusability, scalability, maintainability. the game has desi

7、gned by j2me, the java technology and the midp technology. i studied the procedure thought, the important class and the method. in the playing chess part, i have analyzed the algorithm, choosed the appropriate way to organize the code and realized the basic artificial intelligence. on the other hand

8、, i learned software system of cldc/midp and the specific class of the mid profile to complete the game development. key words: j2me;cldc;midp基于 j2me 的手機(jī)五子棋游戲4目目 錄錄1 概述.51.1 課題研究背景.51.2 課題研究意義.52 開發(fā)技術(shù)背景.62.1 java 語言概述.62.2 j2me 簡介.62.3 移動(dòng)信息設(shè)備簡表.63 系統(tǒng)分析及總體設(shè)計(jì).73.1 可行性分析.73.2 需求分析.83.3 系統(tǒng)概要設(shè)計(jì).84 系統(tǒng)詳細(xì)設(shè)計(jì)

9、.94.1 界面設(shè)計(jì).94.1.1 圖形的低級(jí)繪制.104.1.2 用戶按鍵設(shè)計(jì).104.2 走棋算法.114.3 勝負(fù)判斷.115 系統(tǒng)測試.115.1 測試方案.115.2 測試結(jié)果.126 總 結(jié).13基于 j2me 的手機(jī)五子棋游戲5基于基于j2mej2me的手機(jī)五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)的手機(jī)五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)1 概述 1.1 課題研究背景五子棋是當(dāng)前非常流行的一種棋。五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。手機(jī)游戲的實(shí)現(xiàn)方式主要包括嵌入式游戲、瀏覽器游戲、短消息服務(wù)游戲、j2me 和其它的解釋語言。java 2 micro edition 是一種針對(duì)移動(dòng)電

10、話和 pda 這樣的小型設(shè)備的 java 語言。j2me 與臺(tái)式機(jī)中的 java 相比還是有一定的限制,但是它已經(jīng)極大的提高了移動(dòng)電話支持游戲的能力。并且具備一定的優(yōu)勢:龐大的潛在用戶群、便攜性、開發(fā)門檻較低。手機(jī)是現(xiàn)代生活方式的產(chǎn)物,如同因特網(wǎng)的普及導(dǎo)致網(wǎng)絡(luò)游戲的高速發(fā)展一樣,手機(jī)的普及,對(duì)滿足不同功能的手機(jī)軟件的需求也就越來越迫切,這就需要比較好的手機(jī)軟件開發(fā)平臺(tái),此時(shí)具有平臺(tái)無關(guān)性優(yōu)點(diǎn)的 j2me 開發(fā)平臺(tái)也就應(yīng)運(yùn)而生。與傳統(tǒng)的主流的 pc 游戲相比,手機(jī)游戲的價(jià)值在于打發(fā)一些無聊的時(shí)間,作為一個(gè)移動(dòng)的娛樂終端,手機(jī)游戲施展身手的機(jī)會(huì)永遠(yuǎn)可能是在地鐵站、公交車或者是洗手間這些地方,也許在

11、龐大的游戲行業(yè)里,手機(jī)游戲?qū)⒂肋h(yuǎn)扮演著一個(gè)邊緣者的角色,因?yàn)檎l也不能指望一個(gè)人在家的時(shí)候用手機(jī)玩游戲或者看電影。但是手機(jī)游戲的市場是巨大的,即便是只有十分之一的用戶來購買游戲,那也將是不可忽視的商業(yè)機(jī)遇。手機(jī)游戲是手機(jī)的一種高附加值操作軟件,游戲編程是手機(jī)軟件編程的重要組成,同時(shí)也持續(xù)推動(dòng)手機(jī)軟件技術(shù)升級(jí)進(jìn)步。手機(jī)游戲按手機(jī)平臺(tái)分類,主要有 j2me、brew、unija 等。其中 j2me 手機(jī)開發(fā)平臺(tái)使用最為廣泛。作為sun 公司針對(duì)微型嵌入式消費(fèi)電子產(chǎn)品開發(fā)的編程系統(tǒng),j2me 技術(shù)是當(dāng)前手機(jī)軟件開發(fā)的主流平臺(tái),各大手機(jī)生產(chǎn)廠商目前的主流產(chǎn)品絕大都使用 j2me 技術(shù)?;?j2me 技

12、術(shù)開發(fā)手機(jī)軟件可以實(shí)現(xiàn)手機(jī)功能的多樣化與專業(yè)化,極大的滿足了人們對(duì)手機(jī)要求更高的需求。1.2 課題研究意義本設(shè)計(jì)基于 j2me 技術(shù),開發(fā)一款五子棋游戲軟件,可以供人們閑暇時(shí)間隨時(shí)隨地娛樂,提高棋藝。五子棋不但容易上手,而且它區(qū)別于別的游戲,它不但使人娛樂,而且能使人的頭腦變得更加聰明。通過對(duì)該課題的研究,首先,進(jìn)一步熟悉面向?qū)ο笳Z言,加深對(duì) j2me 層次結(jié)構(gòu)的了解。通過 eclipse 集成開發(fā)環(huán)境創(chuàng)建軟件,最終形成一個(gè)具備基本功能的手機(jī)五子棋游戲,可應(yīng)用于便攜式設(shè)備,適合于棋類愛好者。其次,了解基于 j2me 的手機(jī)五子棋游戲6手機(jī)游戲開發(fā)的特點(diǎn)和現(xiàn)狀。2 開發(fā)技術(shù)背景2.1 java

13、語言概述 java 的出現(xiàn)是源于對(duì)獨(dú)立于平臺(tái)語言的需要,希望這種編程語言能編寫出嵌入各種家用電器等設(shè)備的芯片上、且易于維護(hù)的程序。人們發(fā)現(xiàn)當(dāng)時(shí)的編程語言都有一個(gè)共同的缺點(diǎn),就是針對(duì) cpu 芯片進(jìn)行編譯。這樣,一旦電器設(shè)備更換了芯片就不能保證程序正確運(yùn)行。九零年 sun 公司成立了開發(fā)小組,開始致力于開發(fā)一種可移植的、跨平臺(tái)的編程語言,該語言能生成正確運(yùn)行于各種操作系統(tǒng)、各種芯片上的代碼。java 的出現(xiàn)標(biāo)志著真正的分布式系統(tǒng)的到來。java 是一種跨平臺(tái)的、面向?qū)ο蟮?、分布式的、解釋的、安全的、結(jié)構(gòu)的、可移植的、性能很優(yōu)異的多線程的動(dòng)態(tài)語言。java 的特點(diǎn):平臺(tái)無關(guān)性;安全性;面向?qū)ο螅环?/p>

14、布式;健壯性。2.2 j2me 簡介j2me是sun公司針對(duì)嵌入式、消費(fèi)類電子產(chǎn)品推出的開發(fā)平臺(tái),與j2se和j2ee共同組成java技術(shù)的三個(gè)重要的分支。j2me實(shí)際上是一系列規(guī)范的集合,由jcp組織制定相關(guān)的java specification request(jsr)并發(fā)布,各個(gè)廠商會(huì)按照規(guī)范在自己的產(chǎn)品上進(jìn)行實(shí)現(xiàn),但是必須要通過tck測試,這樣確保兼容性。j2me是java的三大分支之一,專門用于開發(fā)基于消費(fèi)性電子產(chǎn)品的應(yīng)用。j2me支持個(gè)人手持移動(dòng)設(shè)備,如手機(jī)、pda等。手機(jī)用戶可以通過支持java功能的終端,使用多種全新圖形化、動(dòng)態(tài)化和個(gè)性化的移動(dòng)增值服務(wù)。2.3 移動(dòng)信息設(shè)備簡表

15、 移動(dòng)信息設(shè)備簡表(midp)為移動(dòng)電話和入門級(jí)pda設(shè)計(jì),為移動(dòng)應(yīng)用程序提供了所需的全部核心功能,包括應(yīng)用程序模型、用戶界面、持久性數(shù)據(jù)存儲(chǔ)、聯(lián)網(wǎng)能力及應(yīng)用程序管理功能,目前應(yīng)用非常廣泛的midlet就是在midp中定義的。midp 框架如圖 2-1 所示?;?j2me 的手機(jī)五子棋游戲7圖 2-1 midp 框架圖midp提供核心應(yīng)用程序功能,包括用戶界面、網(wǎng)絡(luò)連接、本地?cái)?shù)據(jù)存儲(chǔ)和應(yīng)用程序生命周期管理。midlet生命周期流程圖如圖2-2所示。midp中含有下列api包:a. javax.microedition.lcdui: 用戶界面(ui)api,它為midp應(yīng)用提供了一整套實(shí)現(xiàn)用戶

16、界面的功能特性。b. javax.microediton.rms: 移動(dòng)信息設(shè)備描述提供了一種讓midlets持久性儲(chǔ)存并在以后可以取回?cái)?shù)據(jù)的機(jī)制。c. javax.microedition.midlet: 這個(gè)midlet包明確定義了midp應(yīng)用,也定義了和應(yīng)用環(huán)境之間的交互。d. javax.microedition.io: 移動(dòng)信息設(shè)備還描述包括基于有限連接設(shè)備配置genericconnection框架的網(wǎng)絡(luò)支持。圖 2-2 midlet 生命周期流程圖3 系統(tǒng)分析及總體設(shè)計(jì)3.1 可行性分析.1 技術(shù)可行性技術(shù)可行性基于 j2me 的手機(jī)五子棋游戲8五子棋是傳統(tǒng)的對(duì)弈游

17、戲,歷史悠久、規(guī)則單一。手機(jī)游戲的實(shí)現(xiàn)方式主要包括嵌入式游戲、瀏覽器游戲、短消息服務(wù)游戲、j2me 和其它的解釋語言。java 2 micro edition 是一種針對(duì)移動(dòng)電話和 pda 這樣的小型設(shè)備的 java 語言,雖然它與臺(tái)式機(jī)中的 java 相比還是有一定的限制,但是已經(jīng)極大的提高了移動(dòng)電話支持游戲的能力。在 eclipse 環(huán)境中編寫并在模擬器中運(yùn)行簡單明了。.2 操作可行性操作可行性本游戲開發(fā)后可導(dǎo)入手機(jī)操作,供個(gè)人平常娛樂所用,完全使用手機(jī)鍵盤操作,操作簡單,所以在這方面是完全可行的。3.2 需求分析.1 系統(tǒng)的性能需求系統(tǒng)的性能需求首先,手機(jī)

18、游戲最大的問題在于每一款手機(jī)擁有自己的屏幕大小和特定的api 及性能。游戲開發(fā)過程中,要考慮到游戲程序的設(shè)計(jì)要能合乎大多數(shù)手機(jī)的應(yīng)用。j2me 提出的一系列標(biāo)準(zhǔn)使得使用 j2me 開發(fā)的游戲可以在配備 j2me 的任何廠家的移動(dòng)設(shè)備上運(yùn)行。軟件最好操作簡單容易。受手機(jī)屏幕大小和顯示的影響。手機(jī)鍵盤的不方便,游戲需要設(shè)計(jì)得容易操作。其次,軟件具有人工智能算法原理要簡單,并且運(yùn)行快速。對(duì)于人機(jī)游戲,不需要網(wǎng)絡(luò)連接,游戲處理不會(huì)有太長的等待時(shí)間。游戲是需要快速反應(yīng)的。手機(jī)處理器的頻率直接要求我們需要使用簡單實(shí)用的智能算法。.2 系統(tǒng)的功能需求系統(tǒng)的功能需求a.游戲內(nèi)容此款游戲主題是五

19、子棋對(duì)弈。無“禁手”的規(guī)則基本是人人皆知。相同顏色的棋子,五子一線為勝。b.游戲方式區(qū)別于一般的生活中的人與人的對(duì)弈,用在手機(jī)上為人機(jī)對(duì)弈,在手機(jī)屏幕上構(gòu)造一個(gè)游戲棋盤,并且設(shè)計(jì)黑、白棋子。利用人工智能的相關(guān)知識(shí)實(shí)現(xiàn)對(duì)弈。c.游戲?qū)ο笪遄悠迨謾C(jī)游戲是大眾游戲,游戲者只要具備一般的操作知識(shí)就可以進(jìn)入游戲。對(duì)玩游戲者并沒有什么特殊要求。d.游戲目標(biāo)此款手機(jī)游戲?yàn)槠孱愑螒?,就是為了讓人們閑暇時(shí)間休閑、鍛煉棋藝。a) 歡迎界面:玩家可點(diǎn)擊“確定”進(jìn)入規(guī)則說明界面。b) 規(guī)則說明界面:玩家可點(diǎn)擊“開始游戲”進(jìn)入游戲。 c) 棋盤界面:對(duì)弈界面,使用上、下、左、右鍵來移動(dòng)落子點(diǎn)位,使用確定按鈕來落子,相應(yīng)

20、條件下可實(shí)現(xiàn)重新開始游戲功能。d) 勝負(fù)判斷:涉及人工智能,用以判斷人與機(jī)器的輸贏狀況,游戲無“禁基于 j2me 的手機(jī)五子棋游戲9手” ,五子首先連成一線者勝。3.3 系統(tǒng)概要設(shè)計(jì)該系統(tǒng)設(shè)計(jì)的主要模塊分為:歡迎模塊、規(guī)則說明模塊、對(duì)弈與勝負(fù)判斷模塊。各主要模塊的功能描述如下:歡迎模塊:這部分是游戲出現(xiàn)的第一個(gè)界面,主要是為了說明已經(jīng)進(jìn)入五子棋游戲系統(tǒng)。規(guī)則說明模塊:此模塊說明了游戲規(guī)則。玩家可以選擇開始游戲或返回歡迎界面。對(duì)弈模塊:該部分主要是進(jìn)行人機(jī)對(duì)弈的棋盤界面。該模塊有退出游戲和重新開始的功能。勝負(fù)判斷模塊:這部分即是對(duì)每次棋局結(jié)果的判斷,是人贏了或者是電腦獲勝。系統(tǒng)主要功能模塊如圖

21、3-1 所示?;?j2me 的手機(jī)五子棋游戲歡迎模塊勝負(fù)判斷模塊規(guī)則說明模塊對(duì)弈模塊重新開始圖 3-1 系統(tǒng)功能模塊圖4 系統(tǒng)詳細(xì)設(shè)計(jì)4.1 界面設(shè)計(jì)該部分主要說明手機(jī)游戲畫面顯示,包括畫面的低級(jí)繪制以及如何進(jìn)行游戲按鍵處理。本程序的設(shè)計(jì)主要使用了 midp 所提供的 javax.microedition.lcdui 包中的類來實(shí)現(xiàn)手機(jī)的用戶界面。各個(gè)類如表 4-1 所示。基于 j2me 的手機(jī)五子棋游戲10表4-1 javax.microedition.lcdui包類描 述接口commandlistener允許創(chuàng)建一個(gè)高級(jí)的ui命令消息的監(jiān)聽器ui系統(tǒng)以及工具類display代表系統(tǒng)顯示設(shè)

22、備和輸入設(shè)備的管理器image提供一個(gè)類來保存圖像對(duì)象(以png格式)displayable提供一個(gè)可以顯示對(duì)象的抽象基類高級(jí)uicommand抽象用戶的交互動(dòng)作低級(jí)uigraphics提供二維圖像工具canvas提供一個(gè)創(chuàng)建低級(jí)ui圖像的基類.1 圖形的低級(jí)繪制圖形的低級(jí)繪制 若是要在midlet中使用低級(jí)用戶界面設(shè)計(jì),就必須定義一個(gè)從canvas類派生出來的子類。 在 canvas 類的子類中必須實(shí)現(xiàn) paint()方法。graphics 對(duì)象包含了所有的在屏幕上繪畫的方法,例如 drawarc()、drawline(),drawrect (),drawstring()和

23、fillarc()等。本程序設(shè)計(jì)用到了canvas類中的基本繪圖方法:繪制直線:public void drawline(int x1,int y1,int x2,int y2)繪制矩形:public void drawrect(int x,int y,int width,int height)。繪制字符串:public void drawstring(string str,int x,int y,int anchor)。填充指定矩形內(nèi)的圓:public void fillarc(int x,int y,int width,int height,int startangel,in tint a

24、rcangel)。使用上述方法繪制棋盤界面:繪制棋盤:gg.drawline(gridwidth,i*gridheight,grifwidth*linenumber+1,i*gridheight)。gg.drawline(i*gridwidth,gridheight,i*gridwidth,linenumber*gridheight+1)。繪制棋子:gg.fillarc(x-gridwidth*2/5),y-基于 j2me 的手機(jī)五子棋游戲11gridheight*2/5,gridwidth*4/5,gridheight*4/5,0,360)。繪制顯示輸贏的字符串: gg.drawstring

25、(show string,base x,base y,graphics.top| graphics.left)。.2 用戶按鍵設(shè)計(jì)用戶按鍵設(shè)計(jì) 游戲是交互的,因此在游戲中一個(gè)重要的內(nèi)容就是響應(yīng)用戶的按鍵操作。下面介紹在游戲中用戶按鍵響應(yīng)的實(shí)現(xiàn)。使用 canvas 中的 protected void keypressed(int keycode)函數(shù),當(dāng)按下按鍵時(shí)調(diào)用該函數(shù),實(shí)現(xiàn)上下左右的按鍵消息。設(shè)計(jì)舉例:protected void keypressed(int keycode) if (keycode=getkeycode(canvas.left) 手機(jī)鍵盤與平常設(shè)備鍵盤不

26、同,命令的執(zhí)行主要通過 command 類設(shè)計(jì)。該類構(gòu)建在執(zhí)行信息狀態(tài)列中,功能是在對(duì)象中命令執(zhí)行動(dòng)作狀況。動(dòng)作定義在commandlistener,并且結(jié)合顯示狀態(tài),主要提供接口與使用者交互模式。設(shè)計(jì)舉例:private command ok1 = new command(確定, command.ok, 1);使用優(yōu)先級(jí)作為希望的命令顯示順序的標(biāo)識(shí)。一般數(shù)字越小,在列表中的級(jí)別就越高。4.2 走棋算法對(duì)于五子棋游戲,主要就是判斷棋盤上是否存在五子連珠情況。判斷五子連珠的原理是從橫,豎,左斜線,右斜線 4 條線上是否存在 5 個(gè)相連的同類棋子。 對(duì)戰(zhàn)一方落子后,在該處向 8 個(gè)方向檢測連續(xù)的同

27、類棋子,如果檢測到直線方向上存在 5 個(gè)連續(xù)的同類棋子,則判斷為“連五”并結(jié)束檢測?;跈z測結(jié)果,可以判斷游戲是否結(jié)束,并根據(jù)獲勝方的落子代碼判斷獲勝方是誰。4.3 勝負(fù)判斷為檢測當(dāng)前棋局是否已經(jīng)有一方獲勝,從橫向、縱向、左斜、右斜四種情況考慮。首先,獲取當(dāng)前下棋點(diǎn)(x,y)和棋子的顏色,接著計(jì)算連續(xù)的相同顏色的棋子;有連續(xù) 5 個(gè)相同的棋子則 return true;給出本次棋局結(jié)果。 對(duì)戰(zhàn)一方落子后,在該處向 8 個(gè)方向檢測連續(xù)的同類棋子,如果檢測到直基于 j2me 的手機(jī)五子棋游戲12線方向上存在 5 個(gè)連續(xù)的同類棋子,則判斷為“連五”并結(jié)束檢測?;跈z測結(jié)果,可以判斷游戲是否結(jié)束,并根

28、據(jù)獲勝方的落子代碼判斷獲勝方是誰。5 系統(tǒng)測試5.1 測試方案程序測試是程序編碼完成后必須的一步,通過測試,檢查代碼的正確性,了解功能的實(shí)現(xiàn)性,可以達(dá)到發(fā)現(xiàn)問題,改進(jìn)功能,讓程序更完善更健壯。沒有經(jīng)過測試的軟件是無法大量投入使用的,因?yàn)樗鼰o法保證可以在用戶端健壯地運(yùn)行。測試通常分為兩大類:白盒測試和黑盒測試?!鞍缀袦y試”指的是測試者清楚待測對(duì)象內(nèi)部工作機(jī)制的測試;“黑盒測試”指的是測試者無需了解測試對(duì)象內(nèi)部工作機(jī)制的測試。因?yàn)椴⒉皇撬械挠脩舳寄苤老到y(tǒng)的結(jié)構(gòu)和處算法,所以,從用戶的角度出發(fā),采用黑盒測試法對(duì)系統(tǒng)進(jìn)行功能測試。5.2 測試結(jié)果 a)運(yùn)行程序,出現(xiàn)歡迎界面,如圖 5-1 所示:5

29、-1b)點(diǎn)擊“確定”進(jìn)入游戲說明界面,可點(diǎn)擊“返回”回到歡迎界面,如圖 5-2 所示:基于 j2me 的手機(jī)五子棋游戲135-2c)點(diǎn)擊“開始游戲”進(jìn)入棋盤界面,默認(rèn)玩家先行,為黑子,如圖 5-3 所示5-3d)對(duì)弈棋盤如圖 5-4 所示,假設(shè)走棋結(jié)果人獲勝。5-4e)假設(shè)走棋結(jié)果電腦獲勝,結(jié)果如圖 5-5 所示?;?j2me 的手機(jī)五子棋游戲145-56 總 結(jié)整個(gè)設(shè)計(jì)基本完成,由于能力和時(shí)間的關(guān)系,總是有很多不盡人意的地方,譬如功能較少、外觀較粗糙等。通過這個(gè)程序設(shè)計(jì),我深刻體會(huì)到即使是對(duì)于一個(gè)并不大的程序,代碼的組織都是非常重要的,因?yàn)檫@關(guān)系到日后的維護(hù)以及擴(kuò)展。剛開始決定編寫五子棋游

30、戲時(shí),我覺得難度比較大。后來通過網(wǎng)絡(luò)尋找相關(guān)的視頻學(xué)習(xí)相關(guān)知識(shí),并查找,一點(diǎn)點(diǎn)進(jìn)行下去。同時(shí),因?yàn)樵摮绦虻脑O(shè)計(jì)側(cè)重于算法部分,對(duì)弈算法的設(shè)計(jì),對(duì)于我而言很難,通過網(wǎng)絡(luò)資源,我了解到,不少參考資料上已提供了各種精良可用的現(xiàn)成算法,我可以先學(xué)習(xí)這些已經(jīng)設(shè)計(jì)好的算法,選擇合適的方式組織代碼。整個(gè)設(shè)計(jì)過程中,我受益非淺,感受頗深,體會(huì)到軟件開發(fā)并不是純數(shù)學(xué),更側(cè)重于分析。雖然設(shè)計(jì)結(jié)果并不是很完善,有很多地方還有待進(jìn)一步改進(jìn),但是我覺得最可貴的是過程中的收獲。在以后的時(shí)間里,我仍將努力學(xué)習(xí),深入實(shí)踐,不斷提升自我,努力實(shí)現(xiàn)更高的自我價(jià)值。參考文獻(xiàn)1 赫玉龍,李向前.j2me 移動(dòng)應(yīng)用開發(fā)m.北京:清華大

31、學(xué)出版社,2006.9.2 李振鵬,龔劍.j2me 手機(jī)游戲開發(fā)技術(shù)詳解m.北京:清華大學(xué)出版社,2006.3.3 王森.java 手機(jī)/pda 程序設(shè)計(jì)入門m.北京:電子工業(yè)出版社,2004.3.5 歐陽泉,許向陽.j2me 平臺(tái)結(jié)構(gòu)及開發(fā)應(yīng)用j.計(jì)算機(jī)與數(shù)字工程,2006,(03):112-113.6 劉潔,段曉勇.基于 j2me 的 java 手機(jī)應(yīng)用程序的開發(fā)j.科技廣場,2007,(01):66-68.7 李觀華,范輝.j2me 在移動(dòng)通信程序中的應(yīng)用j.計(jì)算機(jī)應(yīng)用,2003,(03):124-126. 8http:/ j2me 的手機(jī)五子棋游戲15源代碼:midlet1.javai

32、mport javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class midlet1 extends midlet implements commandlistenerpublic display display;private canvas1 lc = new canvas1();/歡迎界面private form w;/新建一個(gè) form 對(duì)象private command ok1;private command exit;private image welcomeimg;/說明界面private

33、form e;private command ok2;private command back;private image helpimg;public midlet1()lc.setparam(); /初始化數(shù)組display = display.getdisplay(this); /通過 display 的靜態(tài)方法 getdisplay()來獲得當(dāng)前設(shè)備的 display 對(duì)象public void commandaction(command c,displayable s)if (c =exit)this.notifydestroyed();if (c = ok1)display.set

34、current(e);/調(diào)用 setcurrent()方法將基于 j2me 的手機(jī)五子棋游戲16display 對(duì)象綁定到顯示設(shè)備if (c = back)display.setcurrent(w);if (c = ok2)display.setcurrent(lc);public void startapp()/歡迎界面w= new form(歡迎您進(jìn)入五子棋游戲_);display.setcurrent(w);/調(diào)用 setcurrent 方法將 display對(duì)象綁定到顯示設(shè)備ok1 = new command(確定,command.ok,1);exit = new command(退出

35、,command.exit,1);w.addcommand(exit); /調(diào)用 addcommand 方法將 command 對(duì)象添加到 gui 顯示組件w.addcommand(ok1);try welcomeimg = image.createimage(/welcome.png); w.append(welcomeimg); catch (exception e)/游戲說明界面e= new form(五子棋游戲說明);ok2= new command(開始游戲,command.ok,1);back= new command(返回,command.back,1);e.addcommand

36、(ok2);e.addcommand(back);try helpimg = image.createimage(/help.png); e.append(helpimg); /添加圖層 catch (exception e)/設(shè)置命令監(jiān)聽者基于 j2me 的手機(jī)五子棋游戲17w.setcommandlistener(this);e.setcommandlistener(this);public void pauseapp()public void destroyapp(boolean unconditional)canvas1.javaimport javax.microedition.lc

37、dui.*;import java.util.*;public class canvas1 extends canvas implements commandlistener graphics gg; random rnd = new random(); / 構(gòu)造一個(gè)隨機(jī)數(shù)生成器 int linenumber=15; int gridwidth=10; /格子的寬度 int gridheight=10; /格子的高度 int linecolor = 0 x006699; /棋盤格子線的顏色 int focuscolor = 0 x00ff00; /焦點(diǎn)的顏色 int intrunmode =

38、0; /0-等待初始態(tài),1-下棋,2-等待用戶響應(yīng) int intplayer =0; /0-黑棋(先下者) ,1-白棋(后下者) int gotovalue; int qipan;/使用一個(gè)二維數(shù)組記錄棋盤棋子的分布/檢查后,如果不存在五子,則全為 0,如果存在,則依次是五個(gè)子的位置 int wuzi = new int5; int q; int m; /int g=1,16,15,17;/這個(gè) int g= new int4; int basex=10; /棋盤左上角 x基于 j2me 的手機(jī)五子棋游戲18 int basey=10; /棋盤左上角 y int currentx; /當(dāng)前所

39、在區(qū)域的左上角 x int currenty; /當(dāng)前所在區(qū)域的左上角 y int currenta; /當(dāng)前是第幾個(gè)豎線 int currentb; /當(dāng)前是第幾個(gè)橫線 int lasta; /最后一個(gè)子位于第幾根豎線 int lastb; /最后一個(gè)子位于第幾根橫線 boolean loadedmenu = false; command cmdrestart = new command(重新開始, command.screen, 1); /設(shè)置一些棋盤參數(shù) public void setparam() qipan = new intlinenumber * linenumber; q =

40、new int3linenumber * linenumber; m = new int3linenumber * linenumber; g0 = 1; g1 = linenumber ; g2 = linenumber - 1; g3 = linenumber + 1; public void paint(graphics g) addcommand(cmdrestart); setcommandlistener(this); gg=g; if (intrunmode = 0) buildchessboard(); /事件處理函數(shù) public void commandaction(com

41、mand c, displayable d) if (c = cmdrestart) intrunmode = 0; repaint(); 基于 j2me 的手機(jī)五子棋游戲19 /* * 開始游戲時(shí)所做的一些工作 * 比如畫棋盤,初始化一些參數(shù)、數(shù)組,并設(shè)置最開始時(shí)的焦點(diǎn)位置 */ public void buildchessboard() try /初始化數(shù)組 for (int i = 0; i linenumber * linenumber; i+) qipani = 0; for (int i = 0; i 5; i+) wuzii = 0; gg.setcolor(0 x006699c

42、c); gg.fillrect(0, 0, getwidth(), getheight(); for (int i = 1; i height) mydrawrect(x + gridwidth * 2, y, gridwidth, gridheight); mydrawrect(x + gridwidth * 2, y + gridheight, gridwidth, gridheight); /最右邊的豎線 drawchessman(x + gridwidth * 3, y); drawchessman(x + gridwidth * 3, y + gridheight); drawche

43、ssman(x + gridwidth * 3, y + gridheight * 2); /最下面的橫線 drawchessman(x, y + gridheight * 2); drawchessman(x + gridwidth, y + gridheight * 2); drawchessman(x + gridwidth * 2, y + gridheight * 2); else mydrawrect(x, y + gridheight * 2, gridwidth, gridheight); mydrawrect(x + gridwidth, y + gridheight * 2

44、, gridwidth, gridheight);基于 j2me 的手機(jī)五子棋游戲21 /最右邊的豎線 drawchessman(x + gridwidth * 2, y); drawchessman(x + gridwidth * 2, y + gridheight); drawchessman(x + gridwidth * 2, y + gridheight * 2); drawchessman(x + gridwidth * 2, y + gridheight * 3); /最下面的橫線 drawchessman(x, y + gridheight * 3); drawchessman

45、(x + gridwidth, y + gridheight * 3); /畫光標(biāo) gg.setcolor(focuscolor); gg.drawline(currentx, currenty,currentx + gridwidth /5, currenty); gg.drawline(currentx, currenty, currentx,currenty + gridheight /5); gg.drawline(currentx +gridwidth*4/5,currenty,currentx + gridwidth, currenty); gg.drawline(currentx

46、 + gridwidth, currenty, currentx + gridwidth,currenty + gridheight /5); gg.drawline(currentx,currenty + gridheight * 4/ 5,currentx, currenty + gridheight); gg.drawline(currentx,currenty + gridheight,currentx + gridwidth / 5,currenty + gridheight); gg.drawline(currentx +gridwidth*4/5,currenty + gridh

47、eight, currentx + gridwidth,currenty + gridheight); gg.drawline(currentx + gridwidth,currenty + gridheight *4 / 5,currentx + gridwidth, currenty + gridheight); repaint(); 基于 j2me 的手機(jī)五子棋游戲22 catch (exception e) system.out.println(movefoucs error: + e); /* * 畫格子,并畫棋子。把這部分獨(dú)立出來主要是要檢查邊界問題 * x格子右上角 x * y格

48、子右上角 y * width格子寬度 * height 格子高度 */ private void mydrawrect(int x, int y, int width, int height) int a, b; a = (x - basex) / gridwidth + 1; b = (y - basey) / gridheight + 1; if (a != linenumber & b != linenumber) gg.setcolor(linecolor); gg.drawrect(x, y + 1, width, height); drawchessman(x, y); /

49、畫棋子,x,y 分別是圓的中心坐標(biāo),棋子的直徑為格子邊長(格子為正方形)的 4/5 public void drawchessman(int x, int y) try int a; int b; a = (x - basex) / gridwidth + 1; b = (y - basey) / gridheight + 1; if (a linenumber | a linenumber | b 1) return; if (qipan (b - 1) * linenumber + a - 1 = 1) gg.setcolor(0, 0, 0); else if (qipan (b - 1

50、) * linenumber + a - 1 = 2)基于 j2me 的手機(jī)五子棋游戲23 gg.setcolor(255, 255, 255); else return; gg.fillarc(x - gridwidth * 2 / 5, y - gridheight * 2 / 5, gridwidth * 4 / 5, gridheight * 4 / 5, 0, 360); if (lasta = a & lastb = b) gg.setcolor(0 xff0000); gg.drawline(x, y - gridheight / 5, x, y + gridheight

51、 / 5); gg.drawline(x - gridwidth / 5, y, x + gridwidth / 5, y); repaint(); catch (exception e) system.out.println(drawchessman error: + e); /鍵盤被按下。主要是移動(dòng)焦點(diǎn),以及落子的處理 protected void keypressed(int keycode) if(keycode=getkeycode(canvas.left) if (currentx basex + gridwidth * (linenumber - 2)return; curren

52、tx = currentx + gridwidth; currenta+; movefoucs(currentx - gridwidth * 3 / 2, currenty - gridheight / 2,基于 j2me 的手機(jī)五子棋游戲24 gridwidth * 3, gridheight * 2); if(keycode=getkeycode(canvas.up) if (currenty basey + gridheight * (linenumber - 2)return; currenty = currenty + gridheight; currentb+; movefoucs

53、(currentx - gridwidth / 2, currenty - gridheight * 3 / 2, gridwidth * 2, gridheight * 3); if(keycode=getkeycode(canvas.fire) if (intplayer = 0) if (qipanlinenumber * (currentb - 1) + currenta - 1 != 0) system.out.println(此處有子); return; qipanlinenumber * (currentb - 1) + currenta - 1 = 1; drawchessman(c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論