ChangeAnimalWindow類負責創建動物換位的主窗口,該類含有main方法,程序從該類開始執行。ChangeAnimalWindow類的成員變量中有七種重要類型的對象:Animal、Point、Stone、HandleMouse、Customdlg、ShowRecordDialog和AutoMoveAnimal對象。
2.1.2 Animal.javaAnimal類是JPanel的一個子類,創建的對象是ChangeAnimalWindow類的重要成員之一,用來表示“動物”。
2.1.3 Point.javaPoint類負責創建確定位置的對象,使用Point對象,可以確定Animal以及Stone對象在窗體中的位置。
2.1.4 Stone.javaStone類是JButton的一個子類,創建的對象表示“石頭”。
2.1.5 HandleMouse.javaHandleMouse類所創建的對象負責處理鼠標事件。
2.1.6 AutoMoveAnimal.javaAutoMoveAnimal類所創建的對象使用算法完成動物的自動換位。
2.1.7 Customdlg.javaCustomdlg類所創建的對象用來設置“自定義”級別的動物數量。
2.1.8 People.javaPeople對象封裝用戶的名字和成績,以便ShowRecordDialog對象可以按成績的高低排序用戶。
2.1.9 Record.javaRecord類是javax.swing包中JDialog對話框的子類,當用戶成功完成相應級別的游戲時,Record創建的對象負責保存用戶的名字和成績到相應的級別文件中。
2.1.10 ShowRecordDialog.javaShowRecordDialog類是javax.swing包中JDialog對話框的子類,當用戶單擊查看相應的級別排行榜時,ShowRecordDialog創建的對象負責顯示用戶的成績。
2.2. 詳細設計2.2.1 ChangeAnimalWindow類(主類)1)效果圖
ChangeAnimalWindow創建的窗口效果如圖2-2-1所示:

ChangeAnimalWindow類是javax.swing包中的JFrame的一個子類,并實現了ActionListener接口,標明該類的主要成員變量和方法的UML圖如圖2-2-2所示。
以下是UML圖中有關數據和方法的詳細說明。
2)成員變量
amoutOfAnimal是int型數據,默認值是6。amoutOfAnimal的值用來確定ChangeAnimalWindow窗體中“動物”的數目,即Animal對象的數目。
distance是int型數據,默認值是80。distance的值用來確定Point對象之間的距離,進而可以確定Animal之間,Stone之間的距離以及Animal和Stone對象外觀的大小。
animal是Animal型數組,其長度為amoutOfAnimal。
point是Point型數組,其長度為amoutOfAnimal+1。
stone是Stone型數組,其長度為amoutOfAnimal+1。
handleMouse是HandleMouse類創建的鼠標事件監視器,用來監視animal數組中Animal對象觸發的鼠標事件。
autoMoveAnimal是AutoMoveAnimal類創建的對話框。通過該對話框可以實現程序自動將左右動物交換位置。
bar是JMenuBar創建的菜單條,用來添加菜單。bar被放置在窗口的頂部。
menuGrade是JMenu創建的菜單,其名字為“選擇級別”。menuImage也是JMenu創建的菜單,其名字為“選擇動物圖像(JPG,GIF)”。menuHelp也是JMenu創建的菜單,其名字為“幫助”。menuHero也是JMenu創建的菜單,其名字為“英雄榜”。menuGrade、menuImage、menuHero和menuHelp被添加到菜單條bar中。
oneGradeItem、twoGradeItem、threeGradeItem和custom是JMenuItem創建的菜單項,它們的名字依次為“初級”、“中級”、“高級”和“自定義”,這四個菜單項被添加到菜單項menuGrade中。leftImage、rightImage和defaultImage也是JMenuItem創建的菜單項,其名字依次為“左面動物的圖像”、“右面動物的圖像”和“左右面動物的默認圖像”,這三個菜單項被添加到菜單項menuImage中。oneGradeResult、twoGradeResult、threeGradeResult、customGradeResult和limitTime也是JMenuItem創建的菜單項,其名字依次為“初級英雄榜”、“中級英雄榜”、“高級英雄榜”、“自定義英雄榜”、“我超時了嗎”,這五個菜單項被添加到菜單項menuHero中。helpcontent和aboutUs是JMenuItem創建的菜單項,它們的名字依次為“游戲規則”、和“關于我們”,這兩個菜單項被添加到菜單項menuHelp中。oneGradeItem、twoGradeItem、threeGradeItem和custom以及leftImage、rightImage和defaultImage等菜單項都將當前窗口注冊為自己的ActionEvent事件監視器。
renew、quit和autoButton是JButton創建的按鈕對象,名字依次為“重新開始”、“撤銷”和“自動演示”。renew、quit和autoButton都將當前窗口注冊為自己的ActionEvent事件監視器。
3)方法
ChangeAnimalWindow()是構造方法,負責完成窗口的初始化。
init()方法負責完成Animal、Stone和Point對象的創建。
setAmoutOfAnimal(int)方法負責設置動物的個數,即amountOfAnimal的值。
removeAnimalAndStone()方法負責從窗體中移掉動物和石頭,即移掉Animal對象和Stone對象。
needDoing()方法負責執行一些經常需要重復執行的代碼。
actionPerformed(ActionEvent)方法是ChangeAnimalWindow類實現的ActionListener接口中的方法。ChangeAnimalWindow創建的窗口是oneGradeItem、twoGradeItem、threeGradeItem、custom、leftImage、rightImage、defaultImage等菜單項和renew、quit、autoButton按鈕的ActionEvent事件監視器。當用戶選中某個菜單項或單擊按鈕時,窗口將執行actionPerformed(ActionEvent)方法進行相應的操作。如果用戶選中oneGradeItem、twoGradeItem、threeGradeItem和custom四個菜單項的某一項時,actionPerformed(ActionEvent)方法所執行的操作就是改變amountOfAnimal的值,并執行needDoing()方法,完成必要的初始化。如果用戶選中leftImage和rightImage菜單項的某一個時,actionPerformed(ActionEvent)方法所執行的操作就是改變leftImageFile和rightImageFile的引用。當用戶單擊renew按鈕時,actionPerformed(ActionEvent)方法所進行的操作是保持當前的amountOfAnimal的值,并執行needDoing()方法,完成必要的初始化,當用戶單擊quit按鈕時,actionPerformed(ActionEvent)方法所進行的操作是撤銷當前“動物”的前一次跳躍。當用戶單擊autoButton按鈕時,actionPerformed(ActionEvent)方法所進行的操作是彈出autoMoveAnimal對話框,用戶可以通過該對話框讓程序顯示動物換位過程。
main(String)方法是程序運行的入口方法。
2.2.2 Animal類
自定義Animal類繼承javax.swing.JPanel,其對象是數組animal的單元中的對象。Animal型數組animal是ChangeAnimalWindow窗口的重要成員之一。標明Animal類的主要成員變量和方法以及和ChangeAnimalWindow類之間組合關系的UML圖,如圖2-2-3所示。
成員變量
point是Point型對象,用來確定Animal對象在窗口中的位置。
isLeft是boolean型數據,用來確定Animal對象是否為“左”。
tool是Toolkit對象,用來獲得Image對象。
leftImage和rightImage是File類型的對象,用來確定Animal對象上繪制的圖像文件。
方法
Animal()是構造方法,負責完成Animal對象的初始化。
Animal對象調用setLeftImage(File)方法可以設置leftImage文件對象。
Animal對象調用setRightImage(File)方法可以設置rightImage文件對象。
Animal對象調用setIsLeft(boolean)設置自己是否為“左”的動物,即設置isLeft屬性的值。
Animal對象調用getIsLeft()方法判斷自己是否為“左”的動物,即返回isLeft屬性的值。
Animal對象調用setAtPoint(Point)方法設置自己所在的“點”,即設置屬性point的對象引用。
Animal對象調用getAtPoint()返回自己所在的“點”,即返回point對象的引用。
Animal對象調用paintComponent(Graphics)方法繪制圖像,即繪制tool對象根據leftImage或rightImage文件所創建的Image對象。
2.2.3 Point類
Point創建的對象含有兩個重要int型數據,分別用來表示窗體坐標系中的x軸坐標和y軸坐標值,窗體坐標系的原點是窗體的左上角,向右是x軸的正向,向下是y軸的正向。Point類創建的對象是數組point的單元中的對象。Point型數組point是ChangeAnimalWindow窗口的重要成員之一,其單元中的Point對象用來確定Animal對象和Stone對象在窗體中的位置。標明Point類的主要成員變量和方法以及和ChangeAnimalWindow類之間的組合關系的UML圖,如圖2-2-4所示。
成員變量
x和y是Point對象中的兩個int型數據,分別用來表示窗體坐標系中的x軸和y軸坐標值。
haveAnimal是boolean數據,如果有Animal對象在該Point對象上時,該數據為true;否則為false。
animal是Animal類聲明的對象,用來存放一個Animal對象的引用,標明該Animal對象在當前Point對象上。
2)方法
Point(int x,int y)是構造方法,用來創建Point對象。
Point對象調用isHaveAnimal()方法可以返回一個boolean數據,如果當前Point對象上有Animal對象,isHaveDisc()方法返回true;否則返回false。
Point對象調用setIsHaveAnimal(boolean boo)方法可以根據參數boo的值設置當前Point對象上是否有Animal對象。
Point對象getX()和getY()方法可以返回其中的x軸坐標和y軸坐標。
Point對象調用equals(TowerPoint p)方法可以判斷當前Point對象是否和參數p指定的Point對象相同。
Point對象調用setThisAnimal(Animal animal)方法,指定參數animal在當前Point對象上。
Point對象調用getThisAnimal()方法可以返回當前Point對象上的Animal對象。
Point對象調用setThisStone(Stone stone)方法,指定參數stone在當前Point對象上。
Point對象調用getThisStone()方法可以返回當前Point對象上的Stone對象。
2.2.4 Stone類
Stone類是javax.swing包中JButton按鈕組件的一個子類,創建的對象是數組stone的單元中的對象。Stone型數組stone是ChangeAnimalWindow窗口的重要成員之一。標明Stone類主要成員變量和方法以及和ChangeAnimalWindow類之間的組合關系的UML圖,如圖2-2-5所示。
1)成員變量
point是Point型數組,用來存放ChangeAnimalWindow窗體中point數組的引用。
step是ArrayList<Integer>數組表,用來存放移動“動物”的步驟。
spendTime用來記錄用戶移動“動物”所用時間。
recordTime是計時器。
success是boolean型數據,當該變量的值為true時表示用戶成功地將左右動物換位。
countTime是boolean型數據,當該變量的值為true時,將啟動計時器為用戶計時;否則不為用戶計時。
showTime是JTextField創建的文本框,負責顯示用時。
2)方法
HandleMouse()是構造方法,負責創建HandleMouse對象。
handleMouse對象調用setPoint(Point[ ])方法將ChangeAnimalWindow窗體中的point對象的引用傳遞給該對象中的point,以便handleMouse移動窗體中的Animal對象。
handleMouse對象調用initStep()方法清空step中的數據。
handleMouse對象調用initSpendTime()將spendTime的值設置為0。
handleMouse對象調用setCountTime(boolean)設置是否啟動計時器。
handleMouse對象調用getStep()返回step對象。
mousePressed(MouseEvent)是HandleMouse類實現的MouseListener接口中的方法,當用戶用在ChangeAnimalWindow窗體中的Animal對象上按下鼠標時,將觸發MouseEvent鼠標事件,handleMouse對象將調用執行mousePressed(MouseEvent)方法對事件作出處理,即根據規則移動當前被鼠標單擊的Animal對象。
mouseReleased(MouseEvent)方法是HandleMouse類實現的MouseListener接口中的方法,ChangeAnimalWindow窗體中的Animal對象上釋放鼠標時,將觸發MouseEvent鼠標事件,handleMouse對象將調用執行mouseReleased(MouseEvent)方法對事件作出處理,其主要操作是判斷用戶是否已經成功地將左右動物換位。
actionPerformed(ActionEvent)是HandleMouse類實現的ActionListener接口中的方法。使用Timer類的構造方法:Timer(int a,Object b)創建了計時器:recordTime,其中的參數a的單位是毫秒,確定計時器每隔a毫秒“振鈴”一次,參數b是計時器的監視器。在這里取a=1000,監視器b是當前handleMouse對象。計時器發生的振鈴事件是ActionEvent事件,當振鈴事件發生時,監視器就會監視到這個事件,監視器就會調用actionPerformed(ActionEvent)方法。當振鈴每隔1000毫秒發生一次時,方法actionPerformed(ActionEvent)就被執行一次,所執行的操作就是按著step指定的步驟移動一個Animal對象。
2.2.6 AutoMoveAnimal類
AutoMoveAnimal類是javax.swing包中JDialog的子類,并實現了ActionListener接口,創建的對象autoMoveAnimal是ChangeAnimalWindow的成員之一。標明AutoMoveAnimal類的主要成員變量、方法以及和ChangeAnimalWindow類之間的組合關系的UML圖,如圖2-2-7所示。
1)成員變量
point是Point型數組,用來存放ChangeAnimalWindow窗體中point數組的引用。
step是ArrayList<Integer>型對象,用來存放移動“動物”的步驟。
bStart,bStop,bContinue,bClose是JButton按鈕,當用戶單擊bStart按鈕時,程序將按著step中的步驟開始移動動物;單擊按鈕bStop時,暫停移動動物;單擊bContinue按鈕時,恢復移動動物;單擊bClose按鈕時,關閉當前對話框,并停止移動動物。
time是javax.swing包中Timer類創建的計時器。使用Timer類的構造方法:Timer(int a,Object b)創建一個計時器,其中的參數a的單位是毫秒,確定計時器每隔a毫秒“振鈴”一次,參數b是計時器的監視器,在這里我們取a=1000,監視器b是當前對話框。計時器發生的振鈴事件是ActionEvent類型事件,當振鈴事件發生時,監視器就會監視到這個事件,監視器就回調ActionListener接口中的actionPerformed方法。當振鈴每隔1000毫秒發生一次時,方法actionPerformed就被執行一次,并按著step指定的步驟移動一個動物。
2)方法
AutoMoveAnimal()是構造方法,用來創建對象autoMoveAnimal。
autoMoveAnimal對象調用setPoint(Point[ ])方法將ChangeAnimalWindow窗體中point數組的引用傳遞給對象,以便autoMoveAnimal對象移動ChangeAnimalWindow窗體中的動物。
actionPerformed(ActionEvent)是接口ActionListener中的方法。當用戶單擊bStart、bStop、bContinue或bClose當中任何一個按鈕時,autoMoveDisc對象將調用執行actionPerformed(ActionEvent)方法,該方法的操作是,如果用戶單擊了bStart按鈕,就按著moveStep中的步驟開始移動盤子;如果單擊了bStop按鈕,就暫停移動盤子;如果單擊了bContinue按鈕,就恢復移動盤子;如果單擊了bClose按鈕,就關閉當前對話框,并停止移動盤子。
autoMoveAnimal對象調用setStep()方法設置step對象中的數據。step是ArrayList<Integer>,存放著移動“動物”的步驟,這些步驟是setStep()用算法生成了整數序列,例如,當step中存放的整數序列是“4,3,2,4”時,那么該序列表示了兩個連續的移動步驟:“將point[4]上的動物移動到point[3]上”和“將point[2]上的動物移動到point[4]上”。
2.2.7 ShowRecordDialog類
ShowRecordDialog類是javax.swing包中JDialog的子類,并實現了ActionListener接口,該類創建的對象showDialog是ChangeAnimalWindow窗口的成員之一。當用戶選擇窗口上的“英雄榜”菜單中的選項,該對話框可見,并顯示相應級別文件中存儲的成績。標明ShowRecordDialog類的主要成員變量、方法以及和ChangeAnimalWindow類之間組合關系的UML圖,如圖2-2-8所示。
1)成員變量
gradeFile是對話框要讀取的文件,該文件存儲成績。
clear是注冊了ActionEvent事件的按鈕。
showArea文本區顯示對話框從gradeFile文件中讀出的成績。
treeSet負責將成績按高低排序。
2)方法
ShowRecordDialog()是構造方法,負責創建showDialog對象。
setGradeFile(File)方法。ShowRecordDialog類創建的ShowRecordDialog對話框是主類ChangeAnimalWindow窗口中的一個成員。當用戶選擇窗口上的“英雄榜”菜單中的菜單項時,ShowRecordDialog對話框調用setGradeFile(File)方法將相應的級別文件傳遞給gradeFile。
showRecord()方法。ShowRecordDialog對話框調用showRecord()方法讀取gradeFile文件中的成績,為了將成績按高低順序顯示在showArea文本區中,showRecord()方法根據讀取的名字和該名字的對應成績,創建一個People對象,并將該People對象存放在treeSet樹集中。
actionPerformed(ActionEvent)是ActionListener接口中的方法,clear注冊了ActionEvent事件,當用戶單擊clear按鈕時,actionPerformed(ActionEvent)方法被調用執行,清除gradeFile文件中的內容。
2.2.8 People類
People對象中的數據由ShowRecordDialog對話框從gradeFile文件中讀取的用戶姓名和成績所構成。ShowRecordDialog對話框將People對象作為其treeSet樹集上的節點,以便按著成績高低排列People對象。標明People的主要成員變量、方法以及和ShowRecordDialog類之間關系的UML圖,如圖2-2-9所示。
以下是UML圖中有關數據和方法的詳細說明。
1)成員變量
name是用戶的名字。
time是用戶的用時。
2)方法
getTime()方法返回time。
getName()方法返回name。
compareTo(Object)是comparable接口中的方法,其操作是確定People對象的大小關系。
2.2.9 Record類
Record是javax.swing包中JDialog的子類,并實現了ActionListener接口,該類創建的對象record是HandleMouse類的成員之一。當用戶成功完成游戲時,程序彈出Record對話框,用戶使用該對話框提供的界面將成績保存到相應的文件中。標明Record類的主要成員變量、方法以及和HandleMouse類之間關系的UML圖,如圖2-2-10所示。
1)成員變量
time是用戶的用時。
yourName是用戶用來輸入名字的文本框。
enter、cancel是按鈕對象,用戶單擊enter按鈕可保存成績,單擊cancel按鈕可放棄保存成績。
gradeFile是級別文件。
2)方法
Record()是構造方法,負責創建record對象。
setGradeFile(File)方法。Record類創建的Record對話框是測試區HandleMouse中的一個成員。當用戶成功完成游戲時測試區彈出Record對話框,Record對話框將調用setGradeFile(File)方法將測試區中的級別文件傳遞給Record對話框gradeFile。
setTime(int)方法。當用戶成功完成游戲后,測試區彈出Record對話框,Record對話框將調用setTime(int)方法將測試區記錄的用戶用時傳遞給Record對話框中的time。
actionPerformed(ActionEvent)是ActionListener接口中的方法,enter和cancel按鈕注冊了ActionEvent事件,當用戶單擊enter時,actionPerformed(ActionEvent)方法被調用執行,其操作是將用戶在文本框yourName中輸入的名字以及time的值保存到gradeFile文件中,然后關閉當前對話框;當用戶單擊cancel按鈕時,actionPerformed(ActionEvent)方法將被調用執行,其操作是關閉當前對話框。
2.2.10 Customdlg類
Customdlg是javax.swing包中JDialog的子類,并實現了ActionListener接口,該類創建的對象record是ChangeAnimalWindow類的成員之一。當用戶單擊菜單中“自定義”級別按鈕設置時,程序彈出Customdlg對話框,用戶使用該對話框可以設置游戲的動物數量。標明Customdlg類的主要成員變量、方法以及和ChangeAnimalWindow類之間關系的UML圖,如圖2-2-11所示。















針對本設計由于時間和技術有限,我覺得還有如下需要改進的地方:
對“自定義”級別動物數量設置中,數量輸入時不能太大,否則在主窗口顯示的動物圖像會非常窄小。建議應設定一個上限,當達到上限時彈出提示信息,提醒用戶“您輸入的數量太大”。對“我超時了嗎”,如果超時,則彈出提示消息后,左右兩邊圖像被其他圖像代替。但是如果在沒有關閉游戲時,重新開始再玩一盤,如果再超時,同樣彈出提示信息,但圖像不會再調換。因此,建議能在此改進,使得能不停調換。對“英雄榜”中記錄用戶玩游戲時的成績,但不能在當玩家成績在排行榜中排進前三彈出提示信息。在此希望在以后的學習中繼續改進。
在設計的過程中了解到自己的知識還是比較有限,更肯定了自己在以后學習編程的道路.上堅定不移的但由于只學習了一個學期的JAVA語言,自己水平有限,使得程序還有不是很完善。回 顧起此次java,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整兩個星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西
以上的Word格式文檔51黑下載地址(不含程序):
艾克拜爾·伊波拉音.doc
(1.33 MB, 下載次數: 9)
| 歡迎光臨 (http://m.izizhuan.cn/bbs/) | Powered by Discuz! X3.1 |