【正文】
l e v e l m i d l e tS e t t i n g D e f a u l t P a c k a g e R e c o r d S t o r e E x c e p t i o nR e c o r d S t o r ej a v a x . m i c r o e d i t i o n . r m sj a v a x . m i c r o e d i t i o n . l c d u iC o m m a n d L i s t e n e r I t e m S t a t e L i s t e n e rj a v a x . m i c r o e d i t i o n . l c d u iC h o i c e G r o u pF o r mC o m m a n d G a u g ej a v a x . m i c r o e d i t i o n . l c d u iD i s p l a y a b l eI t e mI m a g e 第四章 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 20 棋盤尺寸選擇 標(biāo)準(zhǔn)的五子棋棋盤為 15*15,但為了滿足不同玩家的需求,這里提供了大小為 10*10 到 20*20 的棋盤,用戶可以通過(guò) Gauge 組件改變。 //棋盤規(guī)格 (gaugeSize)。 //獲取當(dāng)前的 Gauge 值并計(jì)算棋盤大?。?10) (棋盤規(guī)格 : + bs + X + bs)。添加選項(xiàng)的方法如下: int append(String stringPart, Image imagePart) 該方法追加一個(gè)選項(xiàng)元素到選擇組中,追加的選項(xiàng)為選擇組中的最后一個(gè)元素,選擇組的大小加 1。 //創(chuàng)建復(fù)選框 (電腦先手 , null)。對(duì)于單選框, setSelectedIndex 只能用來(lái)指定某個(gè)選項(xiàng)被選中,因此,布爾值selected 的值必然為 true,否則便沒有意義。 //創(chuàng)建難度級(jí)別選項(xiàng)組 (拜師學(xué)藝 , null)。 //設(shè)置默認(rèn)情況為難度 1,索引值為 0 (choicelevel)。 //確認(rèn)軟件 private Command CMD_CANCEL。 //背景音樂復(fù)選框 private ChoiceGroup choicelevel。 //是否有背景 音樂 private int level。 //在默認(rèn)情況下背景音樂為關(guān)閉 level = 1。 //創(chuàng)建參數(shù)設(shè)置表單并添加標(biāo)簽 gaugeSize = new Gauge(棋盤規(guī)格 : + boardSize + X + boardSize, true, 10, boardSize 10)。 //添加選項(xiàng)元素 (0, ComputerFirst)。 //添加選項(xiàng)元素 (0, MusicOn。 //將多選框添加到主表單中 choiceMusic = new ChoiceGroup(null, 2)。 //將 Gauge 組件添加到表單中 choiceFirst = new ChoiceGroup(null, 2)。 loadSetting()。 //默認(rèn)棋盤大小 ComputerFirst = true。 //棋盤尺寸 private boolean ComputerFirst。 //棋盤大小的 Gauge 對(duì)象 private ChoiceGroup choiceFirst。 //主類對(duì)象 private Form form。 //難度 2 (誰(shuí)與爭(zhēng)鋒 , null)。創(chuàng)建難度選擇單選框的代碼如下: level = 1。 //設(shè)置多選框的默認(rèn)狀態(tài) (choiceFirst)。設(shè)置初始選擇狀態(tài)的方法如下: void setSelectedIndex(int elementNum, Boolean selected) 這里創(chuàng)建一個(gè)只有一個(gè)選項(xiàng)元素的多選框用于玩家設(shè)置是否計(jì)算機(jī)先行,在默認(rèn)情況下為 true,創(chuàng)建完成多選框后將其添加到主表單中,代碼如下: ComputerFirst = true。 ChoiceGroup 組件用來(lái)構(gòu)造選擇框,其構(gòu)造函數(shù)如下: ChoiceGroup(String label, int choiceType) 選擇先手的選項(xiàng)框?yàn)檫x擇組件,屬性為復(fù)選框,標(biāo)簽名為空。這里將根據(jù) Gauge 的當(dāng)前值改變標(biāo)簽,顯示當(dāng)前的棋盤大小。創(chuàng)建 Gauge 組件的代碼如下: form = new Form(游戲設(shè)置 )。表單中使用了 Gauge 和 ChoiceGroup 兩種高級(jí)用戶界面組件。 //監(jiān)聽鍵盤事件 } public void mandAction(Command c, Displayable s)//監(jiān)聽鍵盤事件 { if(c == CMD_OK) //玩家按下確認(rèn)鍵退出 并 返回主表單 { ()。 \n)。\n +〖 3〗黑棋禁手判負(fù)、白棋無(wú)禁手。 \n +以持黑方、 15 15 棋盤為準(zhǔn),棋盤上的縱軸線從左到右用英文字母 A~O 標(biāo)記。棋盤兩端的橫線稱端線。 //創(chuàng)建表單 (五子棋的由來(lái) :\n\n—— 五子棋是我國(guó)古代的、傳統(tǒng)的黑白棋種之一,大 約在南北朝時(shí)期隨圍棋一起先后傳入朝鮮、日本等地。 private Form form。 import 。 } 紅河學(xué)院本科畢業(yè)論文 (設(shè)計(jì) ) 17 public void startApp() //顯示主表單 { (form)。 else if(c == CMD_ABOUT) //顯示關(guān)于表單 (())。 } else if(c == CMD_GO) //開局 { (gameCanvas)。 //創(chuàng)建關(guān)于表單 help = new Help(this)。 //添加退出游戲軟件到主表單 (this)。 //添加開局軟件 到主表單 (CMD_SETTING)。 CMD_SETTING = new Command(游戲設(shè)置 , 4, 2)。 //加載閃屏圖片 } catch(IOException _ex) { imgSplash = (1, 1)。 //游戲幫助軟件 private Command CMD_HELP。 //屏幕圖片 private Command CMD_EXIT。 //關(guān)于表單 private Help help?!巴顺鲇螒颉避涙I用于退出程序,“開局”軟鍵用于顯示畫布進(jìn)行人機(jī)對(duì)戰(zhàn),“游戲設(shè)置”軟鍵用于顯示選項(xiàng) 表單,包括棋盤大小、先手、智力級(jí)別的設(shè)置,“游戲幫助”軟鍵用于顯示幫助信息,“關(guān)于”軟鍵用于顯示包含游戲版本等信息的表單。如果玩家存在最佳攻擊位置,那 么計(jì)算機(jī)就將下一步的棋子擺在玩家的最佳攻擊位置上以阻止玩家的進(jìn)攻,否則計(jì)算機(jī)便將妻子下在自己的最佳攻擊位置上進(jìn)行攻擊。對(duì)手進(jìn)過(guò)越偏激,則防守的效果越好。 攻擊與防守 獲勝棋型的算法是中性的,不區(qū)分計(jì)算機(jī)和玩家,這就涉及到攻 擊和防守何者優(yōu)先的問(wèn)題。 這樣,所有的獲勝組合數(shù)為: 165+165+121+121=572。我們假定當(dāng)前的棋盤為 15*15: ( 1)計(jì)算水平方向的獲勝組合數(shù),每一列的獲勝組合是 11,共 15 列,所以水平方向的獲勝組合數(shù)為: 11*15=165。 整個(gè)游戲的界面切換流程圖如圖 31 所示。當(dāng)玩家選擇“游戲設(shè)置”軟鍵時(shí),則顯示游戲參數(shù)設(shè)置表單;當(dāng)玩家選擇“開局”軟鍵時(shí),則顯示游戲?qū)?zhàn)主界面;當(dāng)玩家選擇“游戲幫助”軟鍵時(shí) ,則顯示游戲幫助表單;當(dāng)玩家選擇“關(guān)于”軟鍵時(shí),則顯示游戲關(guān)于表單。 圖 32 游戲循環(huán)圖 游戲的類設(shè)計(jì) 本游戲共由 7 個(gè)類組成,它們各自的功能如下 : ( 1) GobangMIDlet 類 負(fù)責(zé)程序的啟動(dòng)和屏幕之間的切換; ( 2) GobangCanvas 類 玩家的對(duì)戰(zhàn)平臺(tái),他繼承于 Canvas 類; ( 3) Setting 類 用于創(chuàng)建游戲的各項(xiàng)設(shè)置參數(shù)表單; ( 4) GobangLogic 類 游戲的邏輯類,負(fù)責(zé)勝負(fù)判斷和計(jì)算機(jī)落子; 開 始結(jié) 束初 始 化玩 家 落 子主 循 環(huán) 控 制計(jì) 算 機(jī) 落 子判 斷 勝 負(fù)某 方 勝 出否分 析 盤 面填 寫 棋 型 表 紅河學(xué)院本科畢業(yè)論文 (設(shè)計(jì) ) 11 ( 5) Dot 類 棋子類,包含了棋子的位置信息; ( 6) Help 類 游戲的幫助類,包含五子棋的一些常識(shí)信息和五子棋教學(xué)內(nèi)容; ( 7) About 類 游戲的關(guān)于類,包含游戲的版本、版權(quán)等信息 。 圖 31 游戲的界面設(shè)計(jì)圖 事件驅(qū)動(dòng)設(shè)計(jì) 棋類游戲通常具備兩個(gè)重要特性,首先是對(duì)戰(zhàn)雙方輪流落子,其次是騾子間隔通常是不確定的,尤其是對(duì)戰(zhàn)后期,可能每一步棋都要經(jīng) 過(guò)深思熟慮,無(wú)論是人還是計(jì)算機(jī),都無(wú)法對(duì)時(shí)間間隔有事先的預(yù)期。 WTK 不帶有文本編 輯功能,所以需要另尋搭配使用?;竟δ苁怯涗浧遄拥穆潼c(diǎn)坐標(biāo)等。 第二章 系統(tǒng)分析 8 游戲畫布類基本功能分析 GobangCanvas 類是游戲的畫布類,屬于游戲的表現(xiàn)層,功能是獲取屏幕信息,繪制棋盤,棋子。這些外部信息包括游戲棋盤的大小設(shè)置、先手選擇、游戲難易程度控制等。 像五子棋這類大眾化的游戲,又因?yàn)橛辛撕芏嘁呀?jīng)面世的手機(jī)版本 可供借鑒 ,所以在 對(duì)此游戲 進(jìn)行再開發(fā)時(shí) , 經(jīng)濟(jì)上是可行 的。 在手機(jī)游戲的開發(fā)上,開發(fā)人員可以免費(fèi)獲得各種軟件開發(fā)應(yīng)用接口,不需要支付任何費(fèi)用給手機(jī)廠商或者軟件廠商,這些 內(nèi)容在 Nokia 或 Java Sun 的網(wǎng)站上查看即可明白。 此游戲以文本編輯器就能夠進(jìn)行代碼的編寫,再在 Java 虛擬機(jī)上運(yùn)行調(diào)試、測(cè)試即能完成游戲的開發(fā)。 數(shù)據(jù)結(jié)構(gòu)知識(shí)在大二時(shí)我就已經(jīng)學(xué)習(xí)過(guò)了,再通過(guò)后來(lái)在許多課程設(shè)計(jì)中的使用,現(xiàn)在運(yùn)用起來(lái)已經(jīng)是得心應(yīng)手了。 Java平臺(tái)由 JVM 和 API 構(gòu)成。 技術(shù)可行性分析 本 設(shè)計(jì)的目標(biāo)是基于 J2ME 開發(fā)平臺(tái),設(shè)計(jì)出一款功能更加完善,界面更加人性化,操作簡(jiǎn)單,可移植性強(qiáng)的手機(jī)五子棋游戲人機(jī)對(duì)戰(zhàn)版。傳統(tǒng)的精神需求獲得手段也已經(jīng)不能在滿足于現(xiàn)狀,這就 使得 一些新事物新思想得到了發(fā)展和壯大。這些工具包含字節(jié)碼校驗(yàn)器手 機(jī) 游 戲現(xiàn) 狀 調(diào) 查統(tǒng) 計(jì) 分 析 和 游戲 功 能 構(gòu) 思游 戲 規(guī) 則 和算 法 設(shè) 計(jì)游 戲 界 面 設(shè) 計(jì)程 序 代 碼實(shí) 現(xiàn)游 戲 調(diào) 試及 測(cè) 試手 機(jī) 實(shí) 際 平 臺(tái)測(cè) 試 和 定 型 ****