【正文】
//添加選項元素 (0, MusicOn。 //將多選框添加到主表單中 choiceMusic = new ChoiceGroup(null, 2)。 //添加選項元素 (0, ComputerFirst)。 //將 Gauge 組件添加到表單中 choiceFirst = new ChoiceGroup(null, 2)。 //創(chuàng)建參數(shù)設(shè)置表單并添加標(biāo)簽 gaugeSize = new Gauge(棋盤規(guī)格 : + boardSize + X + boardSize, true, 10, boardSize 10)。 loadSetting()。 //在默認(rèn)情況下背景音樂為關(guān)閉 level = 1。 //默認(rèn)棋盤大小 ComputerFirst = true。 //是否有背景 音樂 private int level。 //棋盤尺寸 private boolean ComputerFirst。 //背景音樂復(fù)選框 private ChoiceGroup choicelevel。 //棋盤大小的 Gauge 對象 private ChoiceGroup choiceFirst。 //確認(rèn)軟件 private Command CMD_CANCEL。 //主類對象 private Form form。 //設(shè)置默認(rèn)情況為難度 1,索引值為 0 (choicelevel)。 //難度 2 (誰與爭鋒 , null)。 //創(chuàng)建難度級別選項組 (拜師學(xué)藝 , null)。創(chuàng)建難度選擇單選框的代碼如下: level = 1。對于單選框, setSelectedIndex 只能用來指定某個選項被選中,因此,布爾值selected 的值必然為 true,否則便沒有意義。 //設(shè)置多選框的默認(rèn)狀態(tài) (choiceFirst)。 //創(chuàng)建復(fù)選框 (電腦先手 , null)。設(shè)置初始選擇狀態(tài)的方法如下: void setSelectedIndex(int elementNum, Boolean selected) 這里創(chuàng)建一個只有一個選項元素的多選框用于玩家設(shè)置是否計算機(jī)先行,在默認(rèn)情況下為 true,創(chuàng)建完成多選框后將其添加到主表單中,代碼如下: ComputerFirst = true。添加選項的方法如下: int append(String stringPart, Image imagePart) 該方法追加一個選項元素到選擇組中,追加的選項為選擇組中的最后一個元素,選擇組的大小加 1。 ChoiceGroup 組件用來構(gòu)造選擇框,其構(gòu)造函數(shù)如下: ChoiceGroup(String label, int choiceType) 選擇先手的選項框為選擇組件,屬性為復(fù)選框,標(biāo)簽名為空。 //獲取當(dāng)前的 Gauge 值并計算棋盤大?。?10) (棋盤規(guī)格 : + bs + X + bs)。這里將根據(jù) Gauge 的當(dāng)前值改變標(biāo)簽,顯示當(dāng)前的棋盤大小。 //棋盤規(guī)格 (gaugeSize)。創(chuàng)建 Gauge 組件的代碼如下: form = new Form(游戲設(shè)置 )。 圖 44 Setting 類的構(gòu)造函數(shù) 圖 J a v a . l a n gS t r i n gj a v a . l a n gO b j e c t D e f a u l t P a c k a g e G o b a n g M I D l e t+ C o m p u t e r F i r s t ( )+ M u s i c O n ( )+ c o m m a n d A c t i o n ( )+ g e t B o a r d S i z e ( )+ g e t F o r m ( )+ g e t l e v e l ( )+ i t e m S t a t e C h a n g e d ( ) l o a d S e t t i n g ( ) s a v e S e t t i n g ( ) C M D _ C A N C E L C M D _ O K C o m p u t e r F i r s t M u s i c O n b o a r d S i z e c h o i c e F i r s t c h o i c e M u s i c c h o i c e l e v e l f o r m g a u g e S i z e 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è)計與實現(xiàn) 20 棋盤尺寸選擇 標(biāo)準(zhǔn)的五子棋棋盤為 15*15,但為了滿足不同玩家的需求,這里提供了大小為 10*10 到 20*20 的棋盤,用戶可以通過 Gauge 組件改變。表單中使用了 Gauge 和 ChoiceGroup 兩種高級用戶界面組件。 } } 游戲的關(guān)于表單與游戲幫助表單類似,在此就不再類舉了。 //監(jiān)聽鍵盤事件 } public void mandAction(Command c, Displayable s)//監(jiān)聽鍵盤事件 { if(c == CMD_OK) //玩家按下確認(rèn)鍵退出 并 返回主表單 { ()。 紅河學(xué)院本科畢業(yè)論文 (設(shè)計 ) 19 (CMD_OK)。 \n)。黑棋只能以“四、三”取勝; \n +〖 4〗如分不出勝負(fù),則到為平局; \n +〖 5〗五連與禁手同時形成,判勝; \n +〖 6〗黑方禁手形成時,白方應(yīng)立即指出。\n +〖 3〗黑棋禁手判負(fù)、白棋無禁手。 +縱橫軸上的橫縱線交叉點分別用橫縱線標(biāo)記的名稱合寫成。 \n +以持黑方、 15 15 棋盤為準(zhǔn),棋盤上的縱軸線從左到右用英文字母 A~O 標(biāo)記。 +從兩條端線和兩條邊線向正中發(fā)展而縱橫交叉在第四條線形成的四個點稱為“星”。棋盤兩端的橫線稱端線。通過一系列的規(guī)則變化使連珠五子棋這一簡單的游戲復(fù)雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋, +同時也成為一種國際比賽棋。 //創(chuàng)建表單 (五子棋的由來 :\n\n—— 五子棋是我國古代的、傳統(tǒng)的黑白棋種之一,大 約在南北朝時期隨圍棋一起先后傳入朝鮮、日本等地。 //確認(rèn)軟件 public Help(GobangMIDlet m) { midlet = m。 private Form form。 import 。 import 。 Help 類和 About 類的 UML 圖如圖 4 43所示。 } 紅河學(xué)院本科畢業(yè)論文 (設(shè)計 ) 17 public void startApp() //顯示主表單 { (form)。 } 改變程序狀態(tài) GobangMIDlet 類提供了很多方法來改變當(dāng)前狀態(tài),如開始、停止、退出、返回等。 else if(c == CMD_ABOUT) //顯示關(guān)于表單 (())。 ()。 } else if(c == CMD_GO) //開局 { (gameCanvas)。此方法的代碼如下: public void mandAction(Command c, Displayable s) //響應(yīng)鍵盤事件 { if(c == CMD_EXIT) //退出程序 { destroyApp(false)。 //創(chuàng)建關(guān)于表單 help = new Help(this)。 //創(chuàng)建畫布 setting = new Setting(this)。 //添加退出游戲軟件到主表單 (this)。 //添加關(guān)于軟件到主表單 (CMD_HELP)。 //添加開局軟件 到主表單 (CMD_SETTING)。 CMD_HELP = new Command(游戲幫助 ,5, 4)。 CMD_SETTING = new Command(游戲設(shè)置 , 4, 2)。 CMD_EXIT = new Command(退出游戲 , 7, 1)。 //加載閃屏圖片 } catch(IOException _ex) { imgSplash = (1, 1)。 form = new Form(null)。 //游戲幫助軟件 private Command CMD_HELP。 //游戲開局軟件 private Command CMD_SETTING。 //屏幕圖片 private Command CMD_EXIT。 //顯示 private Form form。 //關(guān)于表單 private Help help。 //游戲畫布 private Setting setting?!巴顺鲇螒颉避涙I用于退出程序,“開局”軟鍵用于顯示畫布進(jìn)行人機(jī)對戰(zhàn),“游戲設(shè)置”軟鍵用于顯示選項 表單,包括棋盤大小、先手、智力級別的設(shè)置,“游戲幫助”軟鍵用于顯示幫助信息,“關(guān)于”軟鍵用于顯示包含游戲版本等信息的表單。 GobangMIDlet 類的 UML 圖如圖 41 所示。如果玩家存在最佳攻擊位置,那 么計算機(jī)就將下一步的棋子擺在玩家的最佳攻擊位置上以阻止玩家的進(jìn)攻,否則計算機(jī)便將妻子下在自己的最佳攻擊位置上進(jìn)行攻擊。而這缺一不可。對手進(jìn)過越偏激,則防守的效果越好。進(jìn)攻是取勝的手段,是防守的延續(xù)和發(fā)展。 攻擊與防守 獲勝棋型的算法是中性的,不區(qū)分計算機(jī)和玩家,這就涉及到攻 擊和防守