ChangeAnimalWindow類負(fù)責(zé)創(chuàng)建動(dòng)物換位的主窗口,該類含有main方法,程序從該類開始執(zhí)行。ChangeAnimalWindow類的成員變量中有七種重要類型的對(duì)象:Animal、Point、Stone、HandleMouse、Customdlg、ShowRecordDialog和AutoMoveAnimal對(duì)象。
2.1.2 Animal.javaAnimal類是JPanel的一個(gè)子類,創(chuàng)建的對(duì)象是ChangeAnimalWindow類的重要成員之一,用來表示“動(dòng)物”。
2.1.3 Point.javaPoint類負(fù)責(zé)創(chuàng)建確定位置的對(duì)象,使用Point對(duì)象,可以確定Animal以及Stone對(duì)象在窗體中的位置。
2.1.4 Stone.javaStone類是JButton的一個(gè)子類,創(chuàng)建的對(duì)象表示“石頭”。
2.1.5 HandleMouse.javaHandleMouse類所創(chuàng)建的對(duì)象負(fù)責(zé)處理鼠標(biāo)事件。
2.1.6 AutoMoveAnimal.javaAutoMoveAnimal類所創(chuàng)建的對(duì)象使用算法完成動(dòng)物的自動(dòng)換位。
2.1.7 Customdlg.javaCustomdlg類所創(chuàng)建的對(duì)象用來設(shè)置“自定義”級(jí)別的動(dòng)物數(shù)量。
2.1.8 People.javaPeople對(duì)象封裝用戶的名字和成績(jī),以便ShowRecordDialog對(duì)象可以按成績(jī)的高低排序用戶。
2.1.9 Record.javaRecord類是javax.swing包中JDialog對(duì)話框的子類,當(dāng)用戶成功完成相應(yīng)級(jí)別的游戲時(shí),Record創(chuàng)建的對(duì)象負(fù)責(zé)保存用戶的名字和成績(jī)到相應(yīng)的級(jí)別文件中。
2.1.10 ShowRecordDialog.javaShowRecordDialog類是javax.swing包中JDialog對(duì)話框的子類,當(dāng)用戶單擊查看相應(yīng)的級(jí)別排行榜時(shí),ShowRecordDialog創(chuàng)建的對(duì)象負(fù)責(zé)顯示用戶的成績(jī)。
2.2. 詳細(xì)設(shè)計(jì)2.2.1 ChangeAnimalWindow類(主類)1)效果圖
ChangeAnimalWindow創(chuàng)建的窗口效果如圖2-2-1所示:
ChangeAnimalWindow類是javax.swing包中的JFrame的一個(gè)子類,并實(shí)現(xiàn)了ActionListener接口,標(biāo)明該類的主要成員變量和方法的UML圖如圖2-2-2所示。
以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說明。
2)成員變量
amoutOfAnimal是int型數(shù)據(jù),默認(rèn)值是6。amoutOfAnimal的值用來確定ChangeAnimalWindow窗體中“動(dòng)物”的數(shù)目,即Animal對(duì)象的數(shù)目。
distance是int型數(shù)據(jù),默認(rèn)值是80。distance的值用來確定Point對(duì)象之間的距離,進(jìn)而可以確定Animal之間,Stone之間的距離以及Animal和Stone對(duì)象外觀的大小。
animal是Animal型數(shù)組,其長度為amoutOfAnimal。
point是Point型數(shù)組,其長度為amoutOfAnimal+1。
stone是Stone型數(shù)組,其長度為amoutOfAnimal+1。
handleMouse是HandleMouse類創(chuàng)建的鼠標(biāo)事件監(jiān)視器,用來監(jiān)視animal數(shù)組中Animal對(duì)象觸發(fā)的鼠標(biāo)事件。
autoMoveAnimal是AutoMoveAnimal類創(chuàng)建的對(duì)話框。通過該對(duì)話框可以實(shí)現(xiàn)程序自動(dòng)將左右動(dòng)物交換位置。
bar是JMenuBar創(chuàng)建的菜單條,用來添加菜單。bar被放置在窗口的頂部。
menuGrade是JMenu創(chuàng)建的菜單,其名字為“選擇級(jí)別”。menuImage也是JMenu創(chuàng)建的菜單,其名字為“選擇動(dòng)物圖像(JPG,GIF)”。menuHelp也是JMenu創(chuàng)建的菜單,其名字為“幫助”。menuHero也是JMenu創(chuàng)建的菜單,其名字為“英雄榜”。menuGrade、menuImage、menuHero和menuHelp被添加到菜單條bar中。
oneGradeItem、twoGradeItem、threeGradeItem和custom是JMenuItem創(chuàng)建的菜單項(xiàng),它們的名字依次為“初級(jí)”、“中級(jí)”、“高級(jí)”和“自定義”,這四個(gè)菜單項(xiàng)被添加到菜單項(xiàng)menuGrade中。leftImage、rightImage和defaultImage也是JMenuItem創(chuàng)建的菜單項(xiàng),其名字依次為“左面動(dòng)物的圖像”、“右面動(dòng)物的圖像”和“左右面動(dòng)物的默認(rèn)圖像”,這三個(gè)菜單項(xiàng)被添加到菜單項(xiàng)menuImage中。oneGradeResult、twoGradeResult、threeGradeResult、customGradeResult和limitTime也是JMenuItem創(chuàng)建的菜單項(xiàng),其名字依次為“初級(jí)英雄榜”、“中級(jí)英雄榜”、“高級(jí)英雄榜”、“自定義英雄榜”、“我超時(shí)了嗎”,這五個(gè)菜單項(xiàng)被添加到菜單項(xiàng)menuHero中。helpcontent和aboutUs是JMenuItem創(chuàng)建的菜單項(xiàng),它們的名字依次為“游戲規(guī)則”、和“關(guān)于我們”,這兩個(gè)菜單項(xiàng)被添加到菜單項(xiàng)menuHelp中。oneGradeItem、twoGradeItem、threeGradeItem和custom以及l(fā)eftImage、rightImage和defaultImage等菜單項(xiàng)都將當(dāng)前窗口注冊(cè)為自己的ActionEvent事件監(jiān)視器。
renew、quit和autoButton是JButton創(chuàng)建的按鈕對(duì)象,名字依次為“重新開始”、“撤銷”和“自動(dòng)演示”。renew、quit和autoButton都將當(dāng)前窗口注冊(cè)為自己的ActionEvent事件監(jiān)視器。
3)方法
ChangeAnimalWindow()是構(gòu)造方法,負(fù)責(zé)完成窗口的初始化。
init()方法負(fù)責(zé)完成Animal、Stone和Point對(duì)象的創(chuàng)建。
setAmoutOfAnimal(int)方法負(fù)責(zé)設(shè)置動(dòng)物的個(gè)數(shù),即amountOfAnimal的值。
removeAnimalAndStone()方法負(fù)責(zé)從窗體中移掉動(dòng)物和石頭,即移掉Animal對(duì)象和Stone對(duì)象。
needDoing()方法負(fù)責(zé)執(zhí)行一些經(jīng)常需要重復(fù)執(zhí)行的代碼。
actionPerformed(ActionEvent)方法是ChangeAnimalWindow類實(shí)現(xiàn)的ActionListener接口中的方法。ChangeAnimalWindow創(chuàng)建的窗口是oneGradeItem、twoGradeItem、threeGradeItem、custom、leftImage、rightImage、defaultImage等菜單項(xiàng)和renew、quit、autoButton按鈕的ActionEvent事件監(jiān)視器。當(dāng)用戶選中某個(gè)菜單項(xiàng)或單擊按鈕時(shí),窗口將執(zhí)行actionPerformed(ActionEvent)方法進(jìn)行相應(yīng)的操作。如果用戶選中oneGradeItem、twoGradeItem、threeGradeItem和custom四個(gè)菜單項(xiàng)的某一項(xiàng)時(shí),actionPerformed(ActionEvent)方法所執(zhí)行的操作就是改變amountOfAnimal的值,并執(zhí)行needDoing()方法,完成必要的初始化。如果用戶選中l(wèi)eftImage和rightImage菜單項(xiàng)的某一個(gè)時(shí),actionPerformed(ActionEvent)方法所執(zhí)行的操作就是改變leftImageFile和rightImageFile的引用。當(dāng)用戶單擊renew按鈕時(shí),actionPerformed(ActionEvent)方法所進(jìn)行的操作是保持當(dāng)前的amountOfAnimal的值,并執(zhí)行needDoing()方法,完成必要的初始化,當(dāng)用戶單擊quit按鈕時(shí),actionPerformed(ActionEvent)方法所進(jìn)行的操作是撤銷當(dāng)前“動(dòng)物”的前一次跳躍。當(dāng)用戶單擊autoButton按鈕時(shí),actionPerformed(ActionEvent)方法所進(jìn)行的操作是彈出autoMoveAnimal對(duì)話框,用戶可以通過該對(duì)話框讓程序顯示動(dòng)物換位過程。
main(String)方法是程序運(yùn)行的入口方法。
2.2.2 Animal類
自定義Animal類繼承javax.swing.JPanel,其對(duì)象是數(shù)組animal的單元中的對(duì)象。Animal型數(shù)組animal是ChangeAnimalWindow窗口的重要成員之一。標(biāo)明Animal類的主要成員變量和方法以及和ChangeAnimalWindow類之間組合關(guān)系的UML圖,如圖2-2-3所示。
成員變量
point是Point型對(duì)象,用來確定Animal對(duì)象在窗口中的位置。
isLeft是boolean型數(shù)據(jù),用來確定Animal對(duì)象是否為“左”。
tool是Toolkit對(duì)象,用來獲得Image對(duì)象。
leftImage和rightImage是File類型的對(duì)象,用來確定Animal對(duì)象上繪制的圖像文件。
方法
Animal()是構(gòu)造方法,負(fù)責(zé)完成Animal對(duì)象的初始化。
Animal對(duì)象調(diào)用setLeftImage(File)方法可以設(shè)置leftImage文件對(duì)象。
Animal對(duì)象調(diào)用setRightImage(File)方法可以設(shè)置rightImage文件對(duì)象。
Animal對(duì)象調(diào)用setIsLeft(boolean)設(shè)置自己是否為“左”的動(dòng)物,即設(shè)置isLeft屬性的值。
Animal對(duì)象調(diào)用getIsLeft()方法判斷自己是否為“左”的動(dòng)物,即返回isLeft屬性的值。
Animal對(duì)象調(diào)用setAtPoint(Point)方法設(shè)置自己所在的“點(diǎn)”,即設(shè)置屬性point的對(duì)象引用。
Animal對(duì)象調(diào)用getAtPoint()返回自己所在的“點(diǎn)”,即返回point對(duì)象的引用。
Animal對(duì)象調(diào)用paintComponent(Graphics)方法繪制圖像,即繪制tool對(duì)象根據(jù)leftImage或rightImage文件所創(chuàng)建的Image對(duì)象。
2.2.3 Point類
Point創(chuàng)建的對(duì)象含有兩個(gè)重要int型數(shù)據(jù),分別用來表示窗體坐標(biāo)系中的x軸坐標(biāo)和y軸坐標(biāo)值,窗體坐標(biāo)系的原點(diǎn)是窗體的左上角,向右是x軸的正向,向下是y軸的正向。Point類創(chuàng)建的對(duì)象是數(shù)組point的單元中的對(duì)象。Point型數(shù)組point是ChangeAnimalWindow窗口的重要成員之一,其單元中的Point對(duì)象用來確定Animal對(duì)象和Stone對(duì)象在窗體中的位置。標(biāo)明Point類的主要成員變量和方法以及和ChangeAnimalWindow類之間的組合關(guān)系的UML圖,如圖2-2-4所示。
成員變量
x和y是Point對(duì)象中的兩個(gè)int型數(shù)據(jù),分別用來表示窗體坐標(biāo)系中的x軸和y軸坐標(biāo)值。
haveAnimal是boolean數(shù)據(jù),如果有Animal對(duì)象在該P(yáng)oint對(duì)象上時(shí),該數(shù)據(jù)為true;否則為false。
animal是Animal類聲明的對(duì)象,用來存放一個(gè)Animal對(duì)象的引用,標(biāo)明該Animal對(duì)象在當(dāng)前Point對(duì)象上。
2)方法
Point(int x,int y)是構(gòu)造方法,用來創(chuàng)建Point對(duì)象。
Point對(duì)象調(diào)用isHaveAnimal()方法可以返回一個(gè)boolean數(shù)據(jù),如果當(dāng)前Point對(duì)象上有Animal對(duì)象,isHaveDisc()方法返回true;否則返回false。
Point對(duì)象調(diào)用setIsHaveAnimal(boolean boo)方法可以根據(jù)參數(shù)boo的值設(shè)置當(dāng)前Point對(duì)象上是否有Animal對(duì)象。
Point對(duì)象getX()和getY()方法可以返回其中的x軸坐標(biāo)和y軸坐標(biāo)。
Point對(duì)象調(diào)用equals(TowerPoint p)方法可以判斷當(dāng)前Point對(duì)象是否和參數(shù)p指定的Point對(duì)象相同。
Point對(duì)象調(diào)用setThisAnimal(Animal animal)方法,指定參數(shù)animal在當(dāng)前Point對(duì)象上。
Point對(duì)象調(diào)用getThisAnimal()方法可以返回當(dāng)前Point對(duì)象上的Animal對(duì)象。
Point對(duì)象調(diào)用setThisStone(Stone stone)方法,指定參數(shù)stone在當(dāng)前Point對(duì)象上。
Point對(duì)象調(diào)用getThisStone()方法可以返回當(dāng)前Point對(duì)象上的Stone對(duì)象。
2.2.4 Stone類
Stone類是javax.swing包中JButton按鈕組件的一個(gè)子類,創(chuàng)建的對(duì)象是數(shù)組stone的單元中的對(duì)象。Stone型數(shù)組stone是ChangeAnimalWindow窗口的重要成員之一。標(biāo)明Stone類主要成員變量和方法以及和ChangeAnimalWindow類之間的組合關(guān)系的UML圖,如圖2-2-5所示。
1)成員變量
point是Point型數(shù)組,用來存放ChangeAnimalWindow窗體中point數(shù)組的引用。
step是ArrayList<Integer>數(shù)組表,用來存放移動(dòng)“動(dòng)物”的步驟。
spendTime用來記錄用戶移動(dòng)“動(dòng)物”所用時(shí)間。
recordTime是計(jì)時(shí)器。
success是boolean型數(shù)據(jù),當(dāng)該變量的值為true時(shí)表示用戶成功地將左右動(dòng)物換位。
countTime是boolean型數(shù)據(jù),當(dāng)該變量的值為true時(shí),將啟動(dòng)計(jì)時(shí)器為用戶計(jì)時(shí);否則不為用戶計(jì)時(shí)。
showTime是JTextField創(chuàng)建的文本框,負(fù)責(zé)顯示用時(shí)。
2)方法
HandleMouse()是構(gòu)造方法,負(fù)責(zé)創(chuàng)建HandleMouse對(duì)象。
handleMouse對(duì)象調(diào)用setPoint(Point[ ])方法將ChangeAnimalWindow窗體中的point對(duì)象的引用傳遞給該對(duì)象中的point,以便handleMouse移動(dòng)窗體中的Animal對(duì)象。
handleMouse對(duì)象調(diào)用initStep()方法清空step中的數(shù)據(jù)。
handleMouse對(duì)象調(diào)用initSpendTime()將spendTime的值設(shè)置為0。
handleMouse對(duì)象調(diào)用setCountTime(boolean)設(shè)置是否啟動(dòng)計(jì)時(shí)器。
handleMouse對(duì)象調(diào)用getStep()返回step對(duì)象。
mousePressed(MouseEvent)是HandleMouse類實(shí)現(xiàn)的MouseListener接口中的方法,當(dāng)用戶用在ChangeAnimalWindow窗體中的Animal對(duì)象上按下鼠標(biāo)時(shí),將觸發(fā)MouseEvent鼠標(biāo)事件,handleMouse對(duì)象將調(diào)用執(zhí)行mousePressed(MouseEvent)方法對(duì)事件作出處理,即根據(jù)規(guī)則移動(dòng)當(dāng)前被鼠標(biāo)單擊的Animal對(duì)象。
mouseReleased(MouseEvent)方法是HandleMouse類實(shí)現(xiàn)的MouseListener接口中的方法,ChangeAnimalWindow窗體中的Animal對(duì)象上釋放鼠標(biāo)時(shí),將觸發(fā)MouseEvent鼠標(biāo)事件,handleMouse對(duì)象將調(diào)用執(zhí)行mouseReleased(MouseEvent)方法對(duì)事件作出處理,其主要操作是判斷用戶是否已經(jīng)成功地將左右動(dòng)物換位。
actionPerformed(ActionEvent)是HandleMouse類實(shí)現(xiàn)的ActionListener接口中的方法。使用Timer類的構(gòu)造方法:Timer(int a,Object b)創(chuàng)建了計(jì)時(shí)器:recordTime,其中的參數(shù)a的單位是毫秒,確定計(jì)時(shí)器每隔a毫秒“振鈴”一次,參數(shù)b是計(jì)時(shí)器的監(jiān)視器。在這里取a=1000,監(jiān)視器b是當(dāng)前handleMouse對(duì)象。計(jì)時(shí)器發(fā)生的振鈴事件是ActionEvent事件,當(dāng)振鈴事件發(fā)生時(shí),監(jiān)視器就會(huì)監(jiān)視到這個(gè)事件,監(jiān)視器就會(huì)調(diào)用actionPerformed(ActionEvent)方法。當(dāng)振鈴每隔1000毫秒發(fā)生一次時(shí),方法actionPerformed(ActionEvent)就被執(zhí)行一次,所執(zhí)行的操作就是按著step指定的步驟移動(dòng)一個(gè)Animal對(duì)象。
2.2.6 AutoMoveAnimal類
AutoMoveAnimal類是javax.swing包中JDialog的子類,并實(shí)現(xiàn)了ActionListener接口,創(chuàng)建的對(duì)象autoMoveAnimal是ChangeAnimalWindow的成員之一。標(biāo)明AutoMoveAnimal類的主要成員變量、方法以及和ChangeAnimalWindow類之間的組合關(guān)系的UML圖,如圖2-2-7所示。
1)成員變量
point是Point型數(shù)組,用來存放ChangeAnimalWindow窗體中point數(shù)組的引用。
step是ArrayList<Integer>型對(duì)象,用來存放移動(dòng)“動(dòng)物”的步驟。
bStart,bStop,bContinue,bClose是JButton按鈕,當(dāng)用戶單擊bStart按鈕時(shí),程序?qū)粗鴖tep中的步驟開始移動(dòng)動(dòng)物;單擊按鈕bStop時(shí),暫停移動(dòng)動(dòng)物;單擊bContinue按鈕時(shí),恢復(fù)移動(dòng)動(dòng)物;單擊bClose按鈕時(shí),關(guān)閉當(dāng)前對(duì)話框,并停止移動(dòng)動(dòng)物。
time是javax.swing包中Timer類創(chuàng)建的計(jì)時(shí)器。使用Timer類的構(gòu)造方法:Timer(int a,Object b)創(chuàng)建一個(gè)計(jì)時(shí)器,其中的參數(shù)a的單位是毫秒,確定計(jì)時(shí)器每隔a毫秒“振鈴”一次,參數(shù)b是計(jì)時(shí)器的監(jiān)視器,在這里我們?nèi)=1000,監(jiān)視器b是當(dāng)前對(duì)話框。計(jì)時(shí)器發(fā)生的振鈴事件是ActionEvent類型事件,當(dāng)振鈴事件發(fā)生時(shí),監(jiān)視器就會(huì)監(jiān)視到這個(gè)事件,監(jiān)視器就回調(diào)ActionListener接口中的actionPerformed方法。當(dāng)振鈴每隔1000毫秒發(fā)生一次時(shí),方法actionPerformed就被執(zhí)行一次,并按著step指定的步驟移動(dòng)一個(gè)動(dòng)物。
2)方法
AutoMoveAnimal()是構(gòu)造方法,用來創(chuàng)建對(duì)象autoMoveAnimal。
autoMoveAnimal對(duì)象調(diào)用setPoint(Point[ ])方法將ChangeAnimalWindow窗體中point數(shù)組的引用傳遞給對(duì)象,以便autoMoveAnimal對(duì)象移動(dòng)ChangeAnimalWindow窗體中的動(dòng)物。
actionPerformed(ActionEvent)是接口ActionListener中的方法。當(dāng)用戶單擊bStart、bStop、bContinue或bClose當(dāng)中任何一個(gè)按鈕時(shí),autoMoveDisc對(duì)象將調(diào)用執(zhí)行actionPerformed(ActionEvent)方法,該方法的操作是,如果用戶單擊了bStart按鈕,就按著moveStep中的步驟開始移動(dòng)盤子;如果單擊了bStop按鈕,就暫停移動(dòng)盤子;如果單擊了bContinue按鈕,就恢復(fù)移動(dòng)盤子;如果單擊了bClose按鈕,就關(guān)閉當(dāng)前對(duì)話框,并停止移動(dòng)盤子。
autoMoveAnimal對(duì)象調(diào)用setStep()方法設(shè)置step對(duì)象中的數(shù)據(jù)。step是ArrayList<Integer>,存放著移動(dòng)“動(dòng)物”的步驟,這些步驟是setStep()用算法生成了整數(shù)序列,例如,當(dāng)step中存放的整數(shù)序列是“4,3,2,4”時(shí),那么該序列表示了兩個(gè)連續(xù)的移動(dòng)步驟:“將point[4]上的動(dòng)物移動(dòng)到point[3]上”和“將point[2]上的動(dòng)物移動(dòng)到point[4]上”。
2.2.7 ShowRecordDialog類
ShowRecordDialog類是javax.swing包中JDialog的子類,并實(shí)現(xiàn)了ActionListener接口,該類創(chuàng)建的對(duì)象showDialog是ChangeAnimalWindow窗口的成員之一。當(dāng)用戶選擇窗口上的“英雄榜”菜單中的選項(xiàng),該對(duì)話框可見,并顯示相應(yīng)級(jí)別文件中存儲(chǔ)的成績(jī)。標(biāo)明ShowRecordDialog類的主要成員變量、方法以及和ChangeAnimalWindow類之間組合關(guān)系的UML圖,如圖2-2-8所示。
1)成員變量
gradeFile是對(duì)話框要讀取的文件,該文件存儲(chǔ)成績(jī)。
clear是注冊(cè)了ActionEvent事件的按鈕。
showArea文本區(qū)顯示對(duì)話框從gradeFile文件中讀出的成績(jī)。
treeSet負(fù)責(zé)將成績(jī)按高低排序。
2)方法
ShowRecordDialog()是構(gòu)造方法,負(fù)責(zé)創(chuàng)建showDialog對(duì)象。
setGradeFile(File)方法。ShowRecordDialog類創(chuàng)建的ShowRecordDialog對(duì)話框是主類ChangeAnimalWindow窗口中的一個(gè)成員。當(dāng)用戶選擇窗口上的“英雄榜”菜單中的菜單項(xiàng)時(shí),ShowRecordDialog對(duì)話框調(diào)用setGradeFile(File)方法將相應(yīng)的級(jí)別文件傳遞給gradeFile。
showRecord()方法。ShowRecordDialog對(duì)話框調(diào)用showRecord()方法讀取gradeFile文件中的成績(jī),為了將成績(jī)按高低順序顯示在showArea文本區(qū)中,showRecord()方法根據(jù)讀取的名字和該名字的對(duì)應(yīng)成績(jī),創(chuàng)建一個(gè)People對(duì)象,并將該P(yáng)eople對(duì)象存放在treeSet樹集中。
actionPerformed(ActionEvent)是ActionListener接口中的方法,clear注冊(cè)了ActionEvent事件,當(dāng)用戶單擊clear按鈕時(shí),actionPerformed(ActionEvent)方法被調(diào)用執(zhí)行,清除gradeFile文件中的內(nèi)容。
2.2.8 People類
People對(duì)象中的數(shù)據(jù)由ShowRecordDialog對(duì)話框從gradeFile文件中讀取的用戶姓名和成績(jī)所構(gòu)成。ShowRecordDialog對(duì)話框?qū)eople對(duì)象作為其treeSet樹集上的節(jié)點(diǎn),以便按著成績(jī)高低排列People對(duì)象。標(biāo)明People的主要成員變量、方法以及和ShowRecordDialog類之間關(guān)系的UML圖,如圖2-2-9所示。
以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說明。
1)成員變量
name是用戶的名字。
time是用戶的用時(shí)。
2)方法
getTime()方法返回time。
getName()方法返回name。
compareTo(Object)是comparable接口中的方法,其操作是確定People對(duì)象的大小關(guān)系。
2.2.9 Record類
Record是javax.swing包中JDialog的子類,并實(shí)現(xiàn)了ActionListener接口,該類創(chuàng)建的對(duì)象record是HandleMouse類的成員之一。當(dāng)用戶成功完成游戲時(shí),程序彈出Record對(duì)話框,用戶使用該對(duì)話框提供的界面將成績(jī)保存到相應(yīng)的文件中。標(biāo)明Record類的主要成員變量、方法以及和HandleMouse類之間關(guān)系的UML圖,如圖2-2-10所示。
1)成員變量
time是用戶的用時(shí)。
yourName是用戶用來輸入名字的文本框。
enter、cancel是按鈕對(duì)象,用戶單擊enter按鈕可保存成績(jī),單擊cancel按鈕可放棄保存成績(jī)。
gradeFile是級(jí)別文件。
2)方法
Record()是構(gòu)造方法,負(fù)責(zé)創(chuàng)建record對(duì)象。
setGradeFile(File)方法。Record類創(chuàng)建的Record對(duì)話框是測(cè)試區(qū)HandleMouse中的一個(gè)成員。當(dāng)用戶成功完成游戲時(shí)測(cè)試區(qū)彈出Record對(duì)話框,Record對(duì)話框?qū)⒄{(diào)用setGradeFile(File)方法將測(cè)試區(qū)中的級(jí)別文件傳遞給Record對(duì)話框gradeFile。
setTime(int)方法。當(dāng)用戶成功完成游戲后,測(cè)試區(qū)彈出Record對(duì)話框,Record對(duì)話框?qū)⒄{(diào)用setTime(int)方法將測(cè)試區(qū)記錄的用戶用時(shí)傳遞給Record對(duì)話框中的time。
actionPerformed(ActionEvent)是ActionListener接口中的方法,enter和cancel按鈕注冊(cè)了ActionEvent事件,當(dāng)用戶單擊enter時(shí),actionPerformed(ActionEvent)方法被調(diào)用執(zhí)行,其操作是將用戶在文本框yourName中輸入的名字以及time的值保存到gradeFile文件中,然后關(guān)閉當(dāng)前對(duì)話框;當(dāng)用戶單擊cancel按鈕時(shí),actionPerformed(ActionEvent)方法將被調(diào)用執(zhí)行,其操作是關(guān)閉當(dāng)前對(duì)話框。
2.2.10 Customdlg類
Customdlg是javax.swing包中JDialog的子類,并實(shí)現(xiàn)了ActionListener接口,該類創(chuàng)建的對(duì)象record是ChangeAnimalWindow類的成員之一。當(dāng)用戶單擊菜單中“自定義”級(jí)別按鈕設(shè)置時(shí),程序彈出Customdlg對(duì)話框,用戶使用該對(duì)話框可以設(shè)置游戲的動(dòng)物數(shù)量。標(biāo)明Customdlg類的主要成員變量、方法以及和ChangeAnimalWindow類之間關(guān)系的UML圖,如圖2-2-11所示。
針對(duì)本設(shè)計(jì)由于時(shí)間和技術(shù)有限,我覺得還有如下需要改進(jìn)的地方:
對(duì)“自定義”級(jí)別動(dòng)物數(shù)量設(shè)置中,數(shù)量輸入時(shí)不能太大,否則在主窗口顯示的動(dòng)物圖像會(huì)非常窄小。建議應(yīng)設(shè)定一個(gè)上限,當(dāng)達(dá)到上限時(shí)彈出提示信息,提醒用戶“您輸入的數(shù)量太大”。對(duì)“我超時(shí)了嗎”,如果超時(shí),則彈出提示消息后,左右兩邊圖像被其他圖像代替。但是如果在沒有關(guān)閉游戲時(shí),重新開始再玩一盤,如果再超時(shí),同樣彈出提示信息,但圖像不會(huì)再調(diào)換。因此,建議能在此改進(jìn),使得能不停調(diào)換。對(duì)“英雄榜”中記錄用戶玩游戲時(shí)的成績(jī),但不能在當(dāng)玩家成績(jī)?cè)谂判邪裰信胚M(jìn)前三彈出提示信息。在此希望在以后的學(xué)習(xí)中繼續(xù)改進(jìn)。
在設(shè)計(jì)的過程中了解到自己的知識(shí)還是比較有限,更肯定了自己在以后學(xué)習(xí)編程的道路.上堅(jiān)定不移的但由于只學(xué)習(xí)了一個(gè)學(xué)期的JAVA語言,自己水平有限,使得程序還有不是很完善; 顧起此次java,至今我仍感慨頗多,的確,從選題到定稿,從理論到實(shí)踐,在整整兩個(gè)星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的的東西
以上的Word格式文檔51黑下載地址(不含程序):
艾克拜爾·伊波拉音.doc
(1.33 MB, 下載次數(shù): 9)
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |