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

下載本文檔

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

文檔簡(jiǎn)介

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(java 2 micro edition)是近年來(lái)隨著各種不同設(shè)備,尤其是移動(dòng)通 信設(shè)備的飛速發(fā)展而誕生的一項(xiàng)開發(fā)技術(shù)。它因其“write once,run anywhere”的 java 特性而提高了開發(fā)的效率。隨著手機(jī)性能的不斷提高,手機(jī) 休閑娛樂(lè)應(yīng)用將成為 pc 休閑娛樂(lè)應(yīng)用之后又一重要業(yè)務(wù)增長(zhǎng)點(diǎn)。棋類游戲規(guī)則 單一,比較適合在手機(jī)等便攜終端推廣。 由于具有跨平臺(tái)、易于移植、占用空間小的優(yōu)勢(shì),j2me 成為移動(dòng)應(yīng)用開發(fā) 平臺(tái)的主流,并

2、提供了很多用以支持移動(dòng)應(yīng)用軟件的開發(fā)的 api?,F(xiàn)將該技術(shù) 用于這次的手機(jī)游戲開發(fā),可以實(shí)現(xiàn)游戲的快速開發(fā),不但便于查看游戲運(yùn)行 過(guò)程中內(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)基本的人工智能。過(guò)程中使用了 j2me 中 的 cldc/midp 軟件體系,主要運(yùn)用了 mid profile 的特定類的支持,來(lái)完成游

3、戲的開發(fā)。 關(guān)鍵詞:關(guān)鍵詞:j2me;cldc;midp abstract j2me 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 the entertainme

4、nt 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 more suitable for

5、 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 development, can achi

6、eve 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 designed by j2me, t

7、he 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, i learned sof

8、tware system of cldc/midp and the specific class of the mid profile to complete the game development. key words: j2me;cldc;midp 目目 錄錄 1 概述.5 1.1 課題研究背景.5 1.2 課題研究意義.5 2 開發(fā)技術(shù)背景.6 2.1 java 語(yǔ)言概述.6 2.2 j2me 簡(jiǎn)介.6 2.3 移動(dòng)信息設(shè)備簡(jiǎn)表.6 3 系統(tǒng)分析及總體設(shè)計(jì).7 3.1 可行性分析.7 3.2 需求分析.8 3.3 系統(tǒng)概要設(shè)計(jì).8 4 系統(tǒng)詳細(xì)設(shè)計(jì).9 4.1 界面設(shè)計(jì).9 4.1.1

9、 圖形的低級(jí)繪制.10 4.1.2 用戶按鍵設(shè)計(jì).10 4.2 走棋算法.11 4.3 勝負(fù)判斷.11 5 系統(tǒng)測(cè)試.11 5.1 測(cè)試方案.11 5.2 測(cè)試結(jié)果.12 6 總 結(jié).13 基于基于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 和其它的解釋語(yǔ)言。java 2 micro edition 是一種針對(duì)移動(dòng)電話和 pda 這 樣的小型設(shè)備的 java

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

11、戲?qū)?永遠(yuǎn)扮演著一個(gè)邊緣者的角色,因?yàn)檎l(shuí)也不能指望一個(gè)人在家的時(shí)候用手機(jī)玩 游戲或者看電影。但是手機(jī)游戲的市場(chǎng)是巨大的,即便是只有十分之一的用戶 來(lái)購(gòu)買游戲,那也將是不可忽視的商業(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 技術(shù)開發(fā)

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

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

14、式;健壯性。 2.2 j2me 簡(jiǎn)介 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),但是必須要通過(guò)tck測(cè)試,這樣確保兼容 性。j2me是java的三大分支之一,專門用于開發(fā)基于消費(fèi)性電子產(chǎn)品的應(yīng)用。 j2me支持個(gè)人手持移動(dòng)設(shè)備,如手機(jī)、pda等。手機(jī)用戶可以通過(guò)支持java功能 的終端,使用多種全新圖形化、動(dòng)態(tài)化和個(gè)性化的移動(dòng)增值服務(wù)。 2.3

15、移動(dòng)信息設(shè)備簡(jiǎn)表 移動(dòng)信息設(shè)備簡(jiǎn)表(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 所示。 圖 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ù)可行性 五子棋是傳統(tǒng)的對(duì)弈游戲,歷史悠

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

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

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

20、上、下、左、右鍵來(lái)移動(dòng)落子點(diǎn)位,使用確 定按鈕來(lái)落子,相應(yīng)條件下可實(shí)現(xiàn)重新開始游戲功能。 d) 勝負(fù)判斷:涉及人工智能,用以判斷人與機(jī)器的輸贏狀況,游戲無(wú)“禁 手” ,五子首先連成一線者勝。 3.3 系統(tǒng)概要設(shè)計(jì) 該系統(tǒng)設(shè)計(jì)的主要模塊分為:歡迎模塊、規(guī)則說(shuō)明模塊、對(duì)弈與勝負(fù)判斷 模塊。各主要模塊的功能描述如下: 歡迎模塊:這部分是游戲出現(xiàn)的第一個(gè)界面,主要是為了說(shuō)明已經(jīng)進(jìn)入五 子棋游戲系統(tǒng)。 規(guī)則說(shuō)明模塊:此模塊說(shuō)明了游戲規(guī)則。玩家可以選擇開始游戲或返回歡 迎界面。 對(duì)弈模塊:該部分主要是進(jìn)行人機(jī)對(duì)弈的棋盤界面。該模塊有退出游戲和 重新開始的功能。 勝負(fù)判斷模塊:這部分即是對(duì)每次棋局結(jié)果的判斷

21、,是人贏了或者是電腦 獲勝。 系統(tǒng)主要功能模塊如圖 3-1 所示。 基于 j2me 的手機(jī)五子棋游戲 歡 迎 模 塊 勝 負(fù) 判 斷 模 塊 規(guī) 則 說(shuō) 明 模 塊 對(duì)弈模塊 重 新 開 始 圖 3-1 系統(tǒng)功能模塊圖 4 系統(tǒng)詳細(xì)設(shè)計(jì) 4.1 界面設(shè)計(jì) 該部分主要說(shuō)明手機(jī)游戲畫面顯示,包括畫面的低級(jí)繪制以及如何進(jìn)行游 戲按鍵處理。 本程序的設(shè)計(jì)主要使用了 midp 所提供的 javax.microedition.lcdui 包中 的類來(lái)實(shí)現(xiàn)手機(jī)的用戶界面。 各個(gè)類如表 4-1 所示。 表4-1 javax.microedition.lcdui包 類描 述 接口 commandlistener

22、允許創(chuàng)建一個(gè)高級(jí)的ui命令消息的監(jiān)聽器 ui系統(tǒng)以及工具類 display代表系統(tǒng)顯示設(shè)備和輸入設(shè)備的管理器 image提供一個(gè)類來(lái)保存圖像對(duì)象(以png格式) displayable提供一個(gè)可以顯示對(duì)象的抽象基類 高級(jí)ui command抽象用戶的交互動(dòng)作 低級(jí)ui graphics提供二維圖像工具 canvas提供一個(gè)創(chuàng)建低級(jí)ui圖像的基類 .1 圖形的低級(jí)繪制圖形的低級(jí)繪制 若是要在midlet中使用低級(jí)用戶界面設(shè)計(jì),就必須定義一個(gè)從canvas類派 生出來(lái)的子類。 在 canvas 類的子類中必須實(shí)現(xiàn) paint()方法。graphics 對(duì)象包含了所有 的在屏幕上繪畫

23、的方法,例如 drawarc()、drawline(),drawrect (), drawstring()和 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 f

24、illarc(int x,int y,int width,int height,int startangel,in tint arcangel)。 使用上述方法繪制棋盤界面: 繪制棋盤: gg.drawline(gridwidth,i*gridheight,grifwidth*linenumber+1,i*gridh eight)。 gg.drawline(i*gridwidth,gridheight,i*gridwidth,linenumber*gridhe ight+1)。 繪制棋子: gg.fillarc(x-gridwidth*2/5),y- gridheight*2/5,gridwi

25、dth*4/5,gridheight*4/5,0,360)。 繪制顯示輸贏的字符串: gg.drawstring(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 keypresse

26、d(int keycode) if (keycode=getkeycode(canvas.left) 手機(jī)鍵盤與平常設(shè)備鍵盤不同,命令的執(zhí)行主要通過(guò) 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ì)于五子棋游戲,主要就是判斷棋盤上是否存在五子連珠情

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

28、棋子,如果檢測(cè)到直 線方向上存在 5 個(gè)連續(xù)的同類棋子,則判斷為“連五”并結(jié)束檢測(cè)?;跈z測(cè) 結(jié)果,可以判斷游戲是否結(jié)束,并根據(jù)獲勝方的落子代碼判斷獲勝方是誰(shuí)。 5 系統(tǒng)測(cè)試 5.1 測(cè)試方案 程序測(cè)試是程序編碼完成后必須的一步,通過(guò)測(cè)試,檢查代碼的正確性, 了解功能的實(shí)現(xiàn)性,可以達(dá)到發(fā)現(xiàn)問(wèn)題,改進(jìn)功能,讓程序更完善更健壯。沒 有經(jīng)過(guò)測(cè)試的軟件是無(wú)法大量投入使用的,因?yàn)樗鼰o(wú)法保證可以在用戶端健壯 地運(yùn)行。測(cè)試通常分為兩大類:白盒測(cè)試和黑盒測(cè)試?!鞍缀袦y(cè)試”指的是測(cè) 試者清楚待測(cè)對(duì)象內(nèi)部工作機(jī)制的測(cè)試;“黑盒測(cè)試”指的是測(cè)試者無(wú)需了解 測(cè)試對(duì)象內(nèi)部工作機(jī)制的測(cè)試。 因?yàn)椴⒉皇撬械挠脩舳寄苤老?/p>

29、統(tǒng)的結(jié)構(gòu)和處算法,所以,從用戶的角 度出發(fā),采用黑盒測(cè)試法對(duì)系統(tǒng)進(jìn)行功能測(cè)試。 5.2 測(cè)試結(jié)果 a)運(yùn)行程序,出現(xiàn)歡迎界面,如圖 5-1 所示: 5-1 b)點(diǎn)擊“確定”進(jìn)入游戲說(shuō)明界面,可點(diǎn)擊“返回”回到歡迎界面,如圖 5-2 所示: 5-2 c)點(diǎn)擊“開始游戲”進(jìn)入棋盤界面,默認(rèn)玩家先行,為黑子,如圖 5-3 所示 5-3 d)對(duì)弈棋盤如圖 5-4 所示,假設(shè)走棋結(jié)果人獲勝。 5-4 e)假設(shè)走棋結(jié)果電腦獲勝,結(jié)果如圖 5-5 所示。 5-5 6 總 結(jié) 整個(gè)設(shè)計(jì)基本完成,由于能力和時(shí)間的關(guān)系,總是有很多不盡人意的地方, 譬如功能較少、外觀較粗糙等。通過(guò)這個(gè)程序設(shè)計(jì),我深刻體會(huì)到即使是對(duì)

30、于 一個(gè)并不大的程序,代碼的組織都是非常重要的,因?yàn)檫@關(guān)系到日后的維護(hù)以 及擴(kuò)展。 剛開始決定編寫五子棋游戲時(shí),我覺得難度比較大。后來(lái)通過(guò)網(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ì)于我而言很難,通過(guò)網(wǎng)絡(luò)資源,我了解 到,不少參考資料上已提供了各種精良可用的現(xiàn)成算法,我可以先學(xué)習(xí)這些已 經(jīng)設(shè)計(jì)好的算法,選擇合適的方式組織代碼。 整個(gè)設(shè)計(jì)過(guò)程中,我受益非淺,感受頗深,體會(huì)到軟件開發(fā)并不是純數(shù)學(xué), 更側(cè)重于分析。雖然設(shè)計(jì)結(jié)果并不是很完善,有很多地方還有待進(jìn)一步改進(jìn), 但是我覺得最可貴的是過(guò)程中的收獲。在以后的時(shí)間里,我仍將努力

31、學(xué)習(xí),深 入實(shí)踐,不斷提升自我,努力實(shí)現(xiàn)更高的自我價(jià)值。 參考文獻(xiàn) 1 赫玉龍,李向前.j2me 移動(dòng)應(yīng)用開發(fā)m.北京:清華大學(xué)出版社,2006.9. 2 李振鵬,龔劍.j2me 手機(jī)游戲開發(fā)技術(shù)詳解m.北京:清華大學(xué)出版社,2006.3. 3 王森.java 手機(jī)/pda 程序設(shè)計(jì)入門m.北京:電子工業(yè)出版社,2004.3. 5 歐陽(yáng)泉,許向陽(yáng).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.科技廣場(chǎng),2007,(01):66-68. 7 李觀華,范輝.j2me 在移動(dòng)通信程序中的應(yīng)

32、用j.計(jì)算機(jī)應(yīng)用,2003,(03):124-126. 8http:/ 源代碼: midlet1.java import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class midlet1 extends midlet implements commandlistener public display display; private canvas1 lc = new canvas1(); /歡迎界面 private form w;/新建一個(gè) form 對(duì)象 private command o

33、k1; private command exit; private image welcomeimg; /說(shuō)明界面 private form e; private command ok2; private command back; private image helpimg; public midlet1() lc.setparam(); /初始化數(shù)組 display = display.getdisplay(this); /通過(guò) display 的 靜態(tài)方法 getdisplay()來(lái)獲得當(dāng)前設(shè)備的 display 對(duì)象 public void commandaction(command

34、c,displayable s) if (c =exit) this.notifydestroyed(); if (c = ok1) display.setcurrent(e);/調(diào)用 setcurrent()方法將 display 對(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 方法將 dis

35、play 對(duì)象綁定到顯示設(shè)備 ok1 = new command(確定,command.ok,1); exit = new command(退出,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) /游戲說(shuō)明界面 e= new form(五子棋游戲說(shuō)明); ok2= n

36、ew command(開始游戲,command.ok,1); back= new command(返回,command.back,1); e.addcommand(ok2); e.addcommand(back); try helpimg = image.createimage(/help.png); e.append(helpimg); /添加圖層 catch (exception e) /設(shè)置命令監(jiān)聽者 w.setcommandlistener(this); e.setcommandlistener(this); public void pauseapp() public void des

37、troyapp(boolean unconditional) canvas1.java import javax.microedition.lcdui.*; 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 =

38、 0 x006699; /棋盤格子線的顏色 int focuscolor = 0 x00ff00; /焦點(diǎn)的顏色 int intrunmode = 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 ba

39、sex=10; /棋盤左上角 x int basey=10; /棋盤左上角 y int currentx; /當(dāng)前所在區(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 vo

40、id setparam() qipan = new intlinenumber * linenumber; q = 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

41、) buildchessboard(); /事件處理函數(shù) public void commandaction(command c, displayable d) if (c = cmdrestart) intrunmode = 0; repaint(); /* * 開始游戲時(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

42、5; i+) wuzii = 0; gg.setcolor(0 x006699cc); 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 +

43、 gridwidth * 3, y + gridheight); drawchessman(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); mydr

44、awrect(x + gridwidth, y + gridheight * 2, gridwidth, gridheight); /最右邊的豎線 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 + gridhei

45、ght * 3); drawchessman(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)

46、; gg.drawline(currentx + 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 +gridwidt

47、h*4/5,currenty + gridheight, currentx + gridwidth,currenty + gridheight); gg.drawline(currentx + gridwidth,currenty + gridheight *4 / 5,currentx + gridwidth, currenty + gridheight); repaint(); catch (exception e) system.out.println(movefoucs error: + e); /* * 畫格子,并畫棋子。把這部分獨(dú)立出來(lái)主要是要檢查邊界問(wèn)題 * x格子右上角 x *

48、 y格子右上角 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 gg.drawrect(x, y + 1, width, height); drawchessman(x, y); /畫棋子,x,y 分別是圓的中心坐標(biāo),棋子的直徑為格子邊長(zhǎng)(格 子為正方形)的 4/5 p

49、ublic 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) * linenumber + a - 1 = 2) gg.setcolor(255

50、, 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 gg.drawline(x, y - gridheight / 5, x, y + gridheight / 5); gg.drawline(x - gridwidth / 5, y, x + gridwidth / 5, y); repaint(); catch (exception e) system.

51、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; currentx = currentx + gridwidth; currenta+; movefoucs(currentx - gridwidth * 3 / 2, currenty - gridheight /

52、2, gridwidth * 3, gridheight * 2); if(keycode=getkeycode(canvas.up) if (currenty basey + gridheight * (linenumber - 2)return; currenty = currenty + gridheight; currentb+; movefoucs(currentx - gridwidth / 2, currenty - gridheight * 3 / 2, gridwidth * 2, gridheight * 3); if(keycode=getkeycode(canvas.fire) if (intplayer = 0) if (qipanlinenumber

溫馨提示

  • 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ù)覽,若沒有圖紙預(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)論