




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、手機五子棋游戲的設(shè)計與實手機五子棋游戲的設(shè)計與實 現(xiàn)現(xiàn) 專業(yè):專業(yè): 姓名:姓名: 班級:班級: 學號:學號: 指導教師:指導教師: 摘摘 要要 j2me(java 2 micro edition)是近年來隨著各種不同設(shè)備,尤其是移動通 信設(shè)備的飛速發(fā)展而誕生的一項開發(fā)技術(shù)。它因其“write once,run anywhere”的 java 特性而提高了開發(fā)的效率。隨著手機性能的不斷提高,手機 休閑娛樂應用將成為 pc 休閑娛樂應用之后又一重要業(yè)務增長點。棋類游戲規(guī)則 單一,比較適合在手機等便攜終端推廣。 由于具有跨平臺、易于移植、占用空間小的優(yōu)勢,j2me 成為移動應用開發(fā) 平臺的主流,并
2、提供了很多用以支持移動應用軟件的開發(fā)的 api?,F(xiàn)將該技術(shù) 用于這次的手機游戲開發(fā),可以實現(xiàn)游戲的快速開發(fā),不但便于查看游戲運行 過程中內(nèi)存的占用量和程序的每一部分代碼消耗了多少處理器時間,而且可以 不斷地優(yōu)化代碼,使代碼具有高度的復用性、可擴展性、可維護性。 游戲的開發(fā)以 j2me 為平臺,利用 java 技術(shù),結(jié)合 j2me 的 midp 技術(shù),并 對于程序設(shè)計思想,重要類、方法等展開討論。在對弈部分,分析設(shè)計走棋算 法,選擇合適的方式組織成代碼,實現(xiàn)基本的人工智能。過程中使用了 j2me 中 的 cldc/midp 軟件體系,主要運用了 mid profile 的特定類的支持,來完成游
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 語言概述.6 2.2 j2me 簡介.6 2.3 移動信息設(shè)備簡表.6 3 系統(tǒng)分析及總體設(shè)計.7 3.1 可行性分析.7 3.2 需求分析.8 3.3 系統(tǒng)概要設(shè)計.8 4 系統(tǒng)詳細設(shè)計.9 4.1 界面設(shè)計.9 4.1.1
9、 圖形的低級繪制.10 4.1.2 用戶按鍵設(shè)計.10 4.2 走棋算法.11 4.3 勝負判斷.11 5 系統(tǒng)測試.11 5.1 測試方案.11 5.2 測試結(jié)果.12 6 總 結(jié).13 基于基于j2mej2me的手機五子棋游戲的設(shè)計與實現(xiàn)的手機五子棋游戲的設(shè)計與實現(xiàn) 1 概述 1.1 課題研究背景 五子棋是當前非常流行的一種棋。五子棋不僅能增強思維能力,提高智力, 而且富含哲理,有助于修身養(yǎng)性。 手機游戲的實現(xiàn)方式主要包括嵌入式游戲、瀏覽器游戲、短消息服務游戲、 j2me 和其它的解釋語言。java 2 micro edition 是一種針對移動電話和 pda 這 樣的小型設(shè)備的 java
10、 語言。j2me 與臺式機中的 java 相比還是有一定的限制, 但是它已經(jīng)極大的提高了移動電話支持游戲的能力。并且具備一定的優(yōu)勢:龐 大的潛在用戶群、便攜性、開發(fā)門檻較低。 手機是現(xiàn)代生活方式的產(chǎn)物,如同因特網(wǎng)的普及導致網(wǎng)絡(luò)游戲的高速發(fā)展 一樣,手機的普及,對滿足不同功能的手機軟件的需求也就越來越迫切,這就 需要比較好的手機軟件開發(fā)平臺,此時具有平臺無關(guān)性優(yōu)點的 j2me 開發(fā)平臺也 就應運而生。與傳統(tǒng)的主流的 pc 游戲相比,手機游戲的價值在于打發(fā)一些無聊 的時間,作為一個移動的娛樂終端,手機游戲施展身手的機會永遠可能是在地 鐵站、公交車或者是洗手間這些地方,也許在龐大的游戲行業(yè)里,手機游
11、戲?qū)?永遠扮演著一個邊緣者的角色,因為誰也不能指望一個人在家的時候用手機玩 游戲或者看電影。但是手機游戲的市場是巨大的,即便是只有十分之一的用戶 來購買游戲,那也將是不可忽視的商業(yè)機遇。 手機游戲是手機的一種高附加值操作軟件,游戲編程是手機軟件編程的重 要組成,同時也持續(xù)推動手機軟件技術(shù)升級進步。手機游戲按手機平臺分類, 主要有 j2me、brew、unija 等。其中 j2me 手機開發(fā)平臺使用最為廣泛。作為 sun 公司針對微型嵌入式消費電子產(chǎn)品開發(fā)的編程系統(tǒng),j2me 技術(shù)是當前手機 軟件開發(fā)的主流平臺,各大手機生產(chǎn)廠商目前的主流產(chǎn)品絕大都使用 j2me 技術(shù)。 基于 j2me 技術(shù)開發(fā)
12、手機軟件可以實現(xiàn)手機功能的多樣化與專業(yè)化,極大的滿足 了人們對手機要求更高的需求。 1.2 課題研究意義 本設(shè)計基于 j2me 技術(shù),開發(fā)一款五子棋游戲軟件,可以供人們閑暇時間隨 時隨地娛樂,提高棋藝。五子棋不但容易上手,而且它區(qū)別于別的游戲,它不 但使人娛樂,而且能使人的頭腦變得更加聰明。 通過對該課題的研究,首先,進一步熟悉面向?qū)ο笳Z言,加深對 j2me 層次 結(jié)構(gòu)的了解。通過 eclipse 集成開發(fā)環(huán)境創(chuàng)建軟件,最終形成一個具備基本功 能的手機五子棋游戲,可應用于便攜式設(shè)備,適合于棋類愛好者。其次,了解 手機游戲開發(fā)的特點和現(xiàn)狀。 2 開發(fā)技術(shù)背景 2.1 java 語言概述 java
13、 的出現(xiàn)是源于對獨立于平臺語言的需要,希望這種編程語言能編寫出 嵌入各種家用電器等設(shè)備的芯片上、且易于維護的程序。人們發(fā)現(xiàn)當時的編程 語言都有一個共同的缺點,就是針對 cpu 芯片進行編譯。這樣,一旦電器設(shè)備 更換了芯片就不能保證程序正確運行。九零年 sun 公司成立了開發(fā)小組,開始 致力于開發(fā)一種可移植的、跨平臺的編程語言,該語言能生成正確運行于各種 操作系統(tǒng)、各種芯片上的代碼。java 的出現(xiàn)標志著真正的分布式系統(tǒng)的到來。 java 是一種跨平臺的、面向?qū)ο蟮?、分布式的、解釋的、安全的、結(jié)構(gòu)的、 可移植的、性能很優(yōu)異的多線程的動態(tài)語言。 java 的特點:平臺無關(guān)性;安全性;面向?qū)ο螅环植?/p>
14、式;健壯性。 2.2 j2me 簡介 j2me是sun公司針對嵌入式、消費類電子產(chǎn)品推出的開發(fā)平臺,與j2se和 j2ee共同組成java技術(shù)的三個重要的分支。j2me實際上是一系列規(guī)范的集合, 由jcp組織制定相關(guān)的java specification request(jsr)并發(fā)布,各個廠商 會按照規(guī)范在自己的產(chǎn)品上進行實現(xiàn),但是必須要通過tck測試,這樣確保兼容 性。j2me是java的三大分支之一,專門用于開發(fā)基于消費性電子產(chǎn)品的應用。 j2me支持個人手持移動設(shè)備,如手機、pda等。手機用戶可以通過支持java功能 的終端,使用多種全新圖形化、動態(tài)化和個性化的移動增值服務。 2.3
15、移動信息設(shè)備簡表 移動信息設(shè)備簡表(midp)為移動電話和入門級pda設(shè)計,為移動應用程序提 供了所需的全部核心功能,包括應用程序模型、用戶界面、持久性數(shù)據(jù)存儲、 聯(lián)網(wǎng)能力及應用程序管理功能,目前應用非常廣泛的midlet就是在midp中定義 的。 midp 框架如圖 2-1 所示。 圖 2-1 midp 框架圖 midp提供核心應用程序功能,包括用戶界面、網(wǎng)絡(luò)連接、本地數(shù)據(jù)存儲和 應用程序生命周期管理。midlet生命周期流程圖如圖2-2所示。 midp中含有下列api包: a. javax.microedition.lcdui: 用戶界面(ui)api,它為midp應用提供了 一整套實現(xiàn)用
16、戶界面的功能特性。 b. javax.microediton.rms: 移動信息設(shè)備描述提供了一種讓midlets持久 性儲存并在以后可以取回數(shù)據(jù)的機制。 c. javax.microedition.midlet: 這個midlet包明確定義了midp應用,也 定義了和應用環(huán)境之間的交互。 d. javax.microedition.io: 移動信息設(shè)備還描述包括基于有限連接設(shè)備 配置genericconnection框架的網(wǎng)絡(luò)支持。 圖 2-2 midlet 生命周期流程圖 3 系統(tǒng)分析及總體設(shè)計 3.1 可行性分析 .1 技術(shù)可行性技術(shù)可行性 五子棋是傳統(tǒng)的對弈游戲,歷史悠
17、久、規(guī)則單一。手機游戲的實現(xiàn)方式主 要包括嵌入式游戲、瀏覽器游戲、短消息服務游戲、j2me 和其它的解釋語言。 java 2 micro edition 是一種針對移動電話和 pda 這樣的小型設(shè)備的 java 語 言,雖然它與臺式機中的 java 相比還是有一定的限制,但是已經(jīng)極大的提高了 移動電話支持游戲的能力。 在 eclipse 環(huán)境中編寫并在模擬器中運行簡單明了。 .2 操作可行性操作可行性 本游戲開發(fā)后可導入手機操作,供個人平常娛樂所用,完全使用手機鍵盤 操作,操作簡單,所以在這方面是完全可行的。 3.2 需求分析 .1 系統(tǒng)的性能需求系統(tǒng)的性能需求
18、 首先,手機游戲最大的問題在于每一款手機擁有自己的屏幕大小和特定的 api 及性能。游戲開發(fā)過程中,要考慮到游戲程序的設(shè)計要能合乎大多數(shù)手機 的應用。j2me 提出的一系列標準使得使用 j2me 開發(fā)的游戲可以在配備 j2me 的 任何廠家的移動設(shè)備上運行。軟件最好操作簡單容易。受手機屏幕大小和顯示 的影響。手機鍵盤的不方便,游戲需要設(shè)計得容易操作。 其次,軟件具有人工智能算法原理要簡單,并且運行快速。對于人機游戲, 不需要網(wǎng)絡(luò)連接,游戲處理不會有太長的等待時間。游戲是需要快速反應的。 手機處理器的頻率直接要求我們需要使用簡單實用的智能算法。 .2 系統(tǒng)的功能需求系統(tǒng)的功能需求
19、 a.游戲內(nèi)容 此款游戲主題是五子棋對弈。無“禁手”的規(guī)則基本是人人皆知。相同顏 色的棋子,五子一線為勝。 b.游戲方式 區(qū)別于一般的生活中的人與人的對弈,用在手機上為人機對弈,在手機屏 幕上構(gòu)造一個游戲棋盤,并且設(shè)計黑、白棋子。利用人工智能的相關(guān)知識實現(xiàn) 對弈。 c.游戲?qū)ο?五子棋手機游戲是大眾游戲,游戲者只要具備一般的操作知識就可以進入 游戲。對玩游戲者并沒有什么特殊要求。 d.游戲目標 此款手機游戲為棋類游戲,就是為了讓人們閑暇時間休閑、鍛煉棋藝。 a) 歡迎界面:玩家可點擊“確定”進入規(guī)則說明界面。 b) 規(guī)則說明界面:玩家可點擊“開始游戲”進入游戲。 c) 棋盤界面:對弈界面,使用
20、上、下、左、右鍵來移動落子點位,使用確 定按鈕來落子,相應條件下可實現(xiàn)重新開始游戲功能。 d) 勝負判斷:涉及人工智能,用以判斷人與機器的輸贏狀況,游戲無“禁 手” ,五子首先連成一線者勝。 3.3 系統(tǒng)概要設(shè)計 該系統(tǒng)設(shè)計的主要模塊分為:歡迎模塊、規(guī)則說明模塊、對弈與勝負判斷 模塊。各主要模塊的功能描述如下: 歡迎模塊:這部分是游戲出現(xiàn)的第一個界面,主要是為了說明已經(jīng)進入五 子棋游戲系統(tǒng)。 規(guī)則說明模塊:此模塊說明了游戲規(guī)則。玩家可以選擇開始游戲或返回歡 迎界面。 對弈模塊:該部分主要是進行人機對弈的棋盤界面。該模塊有退出游戲和 重新開始的功能。 勝負判斷模塊:這部分即是對每次棋局結(jié)果的判斷
21、,是人贏了或者是電腦 獲勝。 系統(tǒng)主要功能模塊如圖 3-1 所示。 基于 j2me 的手機五子棋游戲 歡 迎 模 塊 勝 負 判 斷 模 塊 規(guī) 則 說 明 模 塊 對弈模塊 重 新 開 始 圖 3-1 系統(tǒng)功能模塊圖 4 系統(tǒng)詳細設(shè)計 4.1 界面設(shè)計 該部分主要說明手機游戲畫面顯示,包括畫面的低級繪制以及如何進行游 戲按鍵處理。 本程序的設(shè)計主要使用了 midp 所提供的 javax.microedition.lcdui 包中 的類來實現(xiàn)手機的用戶界面。 各個類如表 4-1 所示。 表4-1 javax.microedition.lcdui包 類描 述 接口 commandlistener
22、允許創(chuàng)建一個高級的ui命令消息的監(jiān)聽器 ui系統(tǒng)以及工具類 display代表系統(tǒng)顯示設(shè)備和輸入設(shè)備的管理器 image提供一個類來保存圖像對象(以png格式) displayable提供一個可以顯示對象的抽象基類 高級ui command抽象用戶的交互動作 低級ui graphics提供二維圖像工具 canvas提供一個創(chuàng)建低級ui圖像的基類 .1 圖形的低級繪制圖形的低級繪制 若是要在midlet中使用低級用戶界面設(shè)計,就必須定義一個從canvas類派 生出來的子類。 在 canvas 類的子類中必須實現(xiàn) paint()方法。graphics 對象包含了所有 的在屏幕上繪畫
23、的方法,例如 drawarc()、drawline(),drawrect (), drawstring()和 fillarc()等。 本程序設(shè)計用到了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è)計用戶按鍵設(shè)計 游戲是交互的,因此在游戲中一個重要的內(nèi)容就是響應用戶的按鍵操作。 下 面介紹在游戲中用戶按鍵響應的實現(xiàn)。 使用 canvas 中的 protected void keypressed(int keycode)函數(shù),當按 下按鍵時調(diào)用該函數(shù),實現(xiàn)上下左右的按鍵消息。 設(shè)計舉例: protected void keypresse
26、d(int keycode) if (keycode=getkeycode(canvas.left) 手機鍵盤與平常設(shè)備鍵盤不同,命令的執(zhí)行主要通過 command 類設(shè)計。該 類構(gòu)建在執(zhí)行信息狀態(tài)列中,功能是在對象中命令執(zhí)行動作狀況。動作定義在 commandlistener,并且結(jié)合顯示狀態(tài),主要提供接口與使用者交互模式。 設(shè)計舉例: private command ok1 = new command(確定, command.ok, 1); 使用優(yōu)先級作為希望的命令顯示順序的標識。一般數(shù)字越小,在列表中的級別 就越高。 4.2 走棋算法 對于五子棋游戲,主要就是判斷棋盤上是否存在五子連珠情
27、況。判斷五子 連珠的原理是從橫,豎,左斜線,右斜線 4 條線上是否存在 5 個相連的同類棋 子。 對戰(zhàn)一方落子后,在該處向 8 個方向檢測連續(xù)的同類棋子,如果檢測到直 線方向上存在 5 個連續(xù)的同類棋子,則判斷為“連五”并結(jié)束檢測。基于檢測 結(jié)果,可以判斷游戲是否結(jié)束,并根據(jù)獲勝方的落子代碼判斷獲勝方是誰。 4.3 勝負判斷 為檢測當前棋局是否已經(jīng)有一方獲勝,從橫向、縱向、左斜、右斜四種情 況考慮。首先,獲取當前下棋點(x,y)和棋子的顏色,接著計算連續(xù)的相同顏 色的棋子;有連續(xù) 5 個相同的棋子則 return true;給出本次棋局結(jié)果。 對戰(zhàn)一方落子后,在該處向 8 個方向檢測連續(xù)的同類
28、棋子,如果檢測到直 線方向上存在 5 個連續(xù)的同類棋子,則判斷為“連五”并結(jié)束檢測。基于檢測 結(jié)果,可以判斷游戲是否結(jié)束,并根據(jù)獲勝方的落子代碼判斷獲勝方是誰。 5 系統(tǒng)測試 5.1 測試方案 程序測試是程序編碼完成后必須的一步,通過測試,檢查代碼的正確性, 了解功能的實現(xiàn)性,可以達到發(fā)現(xiàn)問題,改進功能,讓程序更完善更健壯。沒 有經(jīng)過測試的軟件是無法大量投入使用的,因為它無法保證可以在用戶端健壯 地運行。測試通常分為兩大類:白盒測試和黑盒測試?!鞍缀袦y試”指的是測 試者清楚待測對象內(nèi)部工作機制的測試;“黑盒測試”指的是測試者無需了解 測試對象內(nèi)部工作機制的測試。 因為并不是所有的用戶都能知道系
29、統(tǒng)的結(jié)構(gòu)和處算法,所以,從用戶的角 度出發(fā),采用黑盒測試法對系統(tǒng)進行功能測試。 5.2 測試結(jié)果 a)運行程序,出現(xiàn)歡迎界面,如圖 5-1 所示: 5-1 b)點擊“確定”進入游戲說明界面,可點擊“返回”回到歡迎界面,如圖 5-2 所示: 5-2 c)點擊“開始游戲”進入棋盤界面,默認玩家先行,為黑子,如圖 5-3 所示 5-3 d)對弈棋盤如圖 5-4 所示,假設(shè)走棋結(jié)果人獲勝。 5-4 e)假設(shè)走棋結(jié)果電腦獲勝,結(jié)果如圖 5-5 所示。 5-5 6 總 結(jié) 整個設(shè)計基本完成,由于能力和時間的關(guān)系,總是有很多不盡人意的地方, 譬如功能較少、外觀較粗糙等。通過這個程序設(shè)計,我深刻體會到即使是對
30、于 一個并不大的程序,代碼的組織都是非常重要的,因為這關(guān)系到日后的維護以 及擴展。 剛開始決定編寫五子棋游戲時,我覺得難度比較大。后來通過網(wǎng)絡(luò)尋找相 關(guān)的視頻學習相關(guān)知識,并查找,一點點進行下去。同時,因為該程序的設(shè)計 側(cè)重于算法部分,對弈算法的設(shè)計,對于我而言很難,通過網(wǎng)絡(luò)資源,我了解 到,不少參考資料上已提供了各種精良可用的現(xiàn)成算法,我可以先學習這些已 經(jīng)設(shè)計好的算法,選擇合適的方式組織代碼。 整個設(shè)計過程中,我受益非淺,感受頗深,體會到軟件開發(fā)并不是純數(shù)學, 更側(cè)重于分析。雖然設(shè)計結(jié)果并不是很完善,有很多地方還有待進一步改進, 但是我覺得最可貴的是過程中的收獲。在以后的時間里,我仍將努力
31、學習,深 入實踐,不斷提升自我,努力實現(xiàn)更高的自我價值。 參考文獻 1 赫玉龍,李向前.j2me 移動應用開發(fā)m.北京:清華大學出版社,2006.9. 2 李振鵬,龔劍.j2me 手機游戲開發(fā)技術(shù)詳解m.北京:清華大學出版社,2006.3. 3 王森.java 手機/pda 程序設(shè)計入門m.北京:電子工業(yè)出版社,2004.3. 5 歐陽泉,許向陽.j2me 平臺結(jié)構(gòu)及開發(fā)應用j.計算機與數(shù)字工程,2006,(03):112-113. 6 劉潔,段曉勇.基于 j2me 的 java 手機應用程序的開發(fā)j.科技廣場,2007,(01):66-68. 7 李觀華,范輝.j2me 在移動通信程序中的應
32、用j.計算機應用,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;/新建一個 form 對象 private command o
33、k1; private command exit; private image welcomeimg; /說明界面 private form e; private command ok2; private command back; private image helpimg; public midlet1() lc.setparam(); /初始化數(shù)組 display = display.getdisplay(this); /通過 display 的 靜態(tài)方法 getdisplay()來獲得當前設(shè)備的 display 對象 public void commandaction(command
34、c,displayable s) if (c =exit) this.notifydestroyed(); if (c = ok1) display.setcurrent(e);/調(diào)用 setcurrent()方法將 display 對象綁定到顯示設(shè)備 if (c = back) display.setcurrent(w); if (c = ok2) display.setcurrent(lc); public void startapp() /歡迎界面 w= new form(歡迎您進入五子棋游戲_); display.setcurrent(w);/調(diào)用 setcurrent 方法將 dis
35、play 對象綁定到顯示設(shè)備 ok1 = new command(確定,command.ok,1); exit = new command(退出,command.exit,1); w.addcommand(exit); /調(diào)用 addcommand 方法將 command 對 象添加到 gui 顯示組件 w.addcommand(ok1); try welcomeimg = image.createimage(/welcome.png); w.append(welcomeimg); catch (exception e) /游戲說明界面 e= new form(五子棋游戲說明); 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)造一個隨機數(shù)生成器 int linenumber=15; int gridwidth=10; /格子的寬度 int gridheight=10; /格子的高度 int linecolor =
38、 0 x006699; /棋盤格子線的顏色 int focuscolor = 0 x00ff00; /焦點的顏色 int intrunmode = 0; /0-等待初始態(tài),1-下棋,2-等待用戶響應 int intplayer =0; /0-黑棋(先下者) ,1-白棋(后下者) int gotovalue; int qipan; /使用一個二維數(shù)組記錄棋盤棋子的分布/檢查后,如果不存在五 子,則全為 0,如果存在,則依次是五個子的位置 int wuzi = new int5; int q; int m; /int g=1,16,15,17;/這個 int g= new int4; int ba
39、sex=10; /棋盤左上角 x int basey=10; /棋盤左上角 y int currentx; /當前所在區(qū)域的左上角 x int currenty; /當前所在區(qū)域的左上角 y int currenta; /當前是第幾個豎線 int currentb; /當前是第幾個橫線 int lasta; /最后一個子位于第幾根豎線 int lastb; /最后一個子位于第幾根橫線 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è)置最開始時的焦點 位置 */ 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); /畫光標 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); /* * 畫格子,并畫棋子。把這部分獨立出來主要是要檢查邊界問題 * 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 分別是圓的中心坐標,棋子的直徑為格子邊長(格 子為正方形)的 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); /鍵盤被按下。主要是移動焦點,以及落子的處理 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 打樁機司機崗位面試問題及答案
- 安徽省宿州市五校2025年高一下化學期末調(diào)研試題含解析
- 2025屆云南省大姚一中高二下化學期末學業(yè)質(zhì)量監(jiān)測試題含解析
- 吉林省延邊州汪清縣四中2025屆高一下化學期末調(diào)研模擬試題含解析
- 廣東華南師大附中2025屆高一下化學期末監(jiān)測模擬試題含解析
- 晉城公墓管理暫行辦法
- 昭通墓地管理暫行辦法
- 合肥社區(qū)人員管理辦法
- 機械維修制度管理辦法
- 趣味性與原動力在學習和生活中的作用研究
- 義務教育新課標必背古詩詞135篇
- 營養(yǎng)專科護士總結(jié)匯報
- 熱射病科普宣傳
- 6S視覺管理之定置劃線顏色管理及標準樣式
- 數(shù)字資產(chǎn)的監(jiān)管框架
- DL∕T 5783-2019 水電水利地下工程地質(zhì)超前預報技術(shù)規(guī)程
- 2024年中華全國律師協(xié)會招聘5人歷年(高頻重點復習提升訓練)共500題附帶答案詳解
- 100MW400MWh全釩液流電池儲能電站項目可行性研究報告寫作模板-拿地申報
- 老版入團志愿書表格完整
- 四柱萬能液壓機液壓系統(tǒng) (1)講解
- 檔案管理借閱制度
評論
0/150
提交評論