基于Java的動(dòng)物換位游戲軟件課程設(shè)計(jì)報(bào)告_第1頁(yè)
基于Java的動(dòng)物換位游戲軟件課程設(shè)計(jì)報(bào)告_第2頁(yè)
基于Java的動(dòng)物換位游戲軟件課程設(shè)計(jì)報(bào)告_第3頁(yè)
基于Java的動(dòng)物換位游戲軟件課程設(shè)計(jì)報(bào)告_第4頁(yè)
基于Java的動(dòng)物換位游戲軟件課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 PAGE37 / NUMPAGES40 課程設(shè)計(jì)任務(wù)書學(xué) 院信息學(xué)院專 業(yè)電子信息工程學(xué)生班級(jí)學(xué)號(hào)課程設(shè)計(jì)題目基于Java的動(dòng)物換位游戲軟件設(shè)計(jì)實(shí)踐教學(xué)要求與任務(wù):采用java技術(shù)設(shè)計(jì)動(dòng)物換位游戲軟件,設(shè)計(jì)要求如下:程序分為3個(gè)級(jí)別,用戶可以通過(guò)界面上提供的菜單來(lái)選擇“初級(jí)”、“中級(jí)”和“高級(jí)”這三個(gè)級(jí)別。對(duì)于“初級(jí)”級(jí)別,在水平排列的7塊石頭上的左右各有3個(gè)類型一樣的動(dòng)物,中間的石頭上沒(méi)有動(dòng)物;對(duì)于“中級(jí)”級(jí)別,在水平排列的9塊石頭上的左右各有4個(gè)類型一樣的動(dòng)物,中間的石頭上沒(méi)有動(dòng)物;對(duì)于“高級(jí)”級(jí)別,在水平排列的11塊石頭上的左右各有5個(gè)類型一樣的動(dòng)物,中間的石頭上沒(méi)有動(dòng)物。用鼠標(biāo)單擊一

2、個(gè)動(dòng)物,如果該動(dòng)物的前方的石頭上沒(méi)有動(dòng)物,該動(dòng)物就跳躍到該石頭上,如果該動(dòng)物前方的石頭上有其他的動(dòng)物,但隔位上的石頭沒(méi)有動(dòng)物,該動(dòng)物就越過(guò)自己前面的動(dòng)物跳躍到石頭上,其他情形時(shí),該動(dòng)物不跳躍(跳躍時(shí)不能超過(guò)2塊石頭)。左面的動(dòng)物只能向右方跳躍,右面的動(dòng)物只能向左方跳躍。用戶可以通過(guò)單擊界面上提供的按鈕,讓程序自動(dòng)完成動(dòng)物換位??梢噪S時(shí)單擊界面上提供的按鈕,重新開始當(dāng)前的級(jí)別。用戶通過(guò)菜單選項(xiàng),可以選擇左、右動(dòng)物的圖像。工作計(jì)劃與進(jìn)度安排: 第18周:布置課程設(shè)計(jì)任務(wù),查閱資料,分組設(shè)計(jì),程序調(diào)試。 第19周:程序調(diào)試,編寫課程設(shè)計(jì)報(bào)告,驗(yàn)收,答辯。指導(dǎo)教師:2013年 6月20日專業(yè)負(fù)責(zé)人:2

3、013年 6月20日學(xué)院教學(xué)副院長(zhǎng):2013年 6月20日成績(jī)?cè)u(píng)定表學(xué)生班級(jí)學(xué)號(hào)專 業(yè)電子信息工程課程設(shè)計(jì)題目基于Java的動(dòng)物換位游戲軟件設(shè)計(jì)評(píng)語(yǔ)組長(zhǎng)簽字:成績(jī)?nèi)掌?2013 年 月 日目 錄1 課設(shè)軟件主要功能12 類總體設(shè)計(jì)22.1 類組合關(guān)系圖22.2 主類22.3 其他類23 類詳細(xì)設(shè)計(jì)33.1 CHANGEANIMALWINDOW類33.2 ANIMAL類53.3 POINT類73.4 STONE類83.5 HANDLEMOUSE類93.6 AUTOMOVEANIMAL類104 關(guān)鍵類成員函數(shù)流程圖與代碼135 軟件運(yùn)行結(jié)果35結(jié)論37參考文獻(xiàn)37動(dòng)物換位系統(tǒng)的設(shè)計(jì)1 課設(shè)軟件主要

4、功能程序分為不同的級(jí)別,左右各有動(dòng)物,中間石頭沒(méi)有動(dòng)物,將左右動(dòng)物交換,不可后退。用鼠標(biāo)單擊一個(gè)動(dòng)物,如果該動(dòng)物前方的石頭上沒(méi)有動(dòng)物,該動(dòng)物就跳躍到該石頭上,如果該動(dòng)物前方的石頭上有動(dòng)物,但隔位上的石頭沒(méi)有動(dòng)物,該動(dòng)物就越過(guò)自己前面的動(dòng)物躍到石頭上,其他情形時(shí),該動(dòng)物不能跳躍。不能持續(xù)玩的可以點(diǎn)自動(dòng)演示,將自動(dòng)完成游戲,可以幫助游戲者更好的了解系統(tǒng)的主體功能。設(shè)計(jì)GUI界面的動(dòng)物換位游戲,游戲的結(jié)果是讓左右兩組動(dòng)物交換位置。具體容如下:1) 程序分為4個(gè)級(jí)別,用戶可以通過(guò)界面上提供的菜單選擇“初級(jí)”、“中級(jí)”、“高級(jí)”、“自定義”這4個(gè)級(jí)別。對(duì)于“初級(jí)”級(jí)別,在水平排列的7塊石頭上的左右各有3

5、個(gè)類型一樣的動(dòng)物,中間的石頭上沒(méi)有動(dòng)物;對(duì)于“中級(jí)”級(jí)別,在水平排列的9塊石頭上的左右各有4個(gè)類型一樣的動(dòng)物,中間的石頭上沒(méi)有動(dòng)物;對(duì)于“高級(jí)”級(jí)別,在水平排列的11塊石頭上的左右各有5個(gè)類型一樣的動(dòng)物,中間的石頭上沒(méi)有動(dòng)物;對(duì)于“自定義”級(jí)別,用戶可以輸入自己想設(shè)置的一個(gè)動(dòng)物數(shù)量(輸入的數(shù)必須是偶數(shù)),在水平排列的N塊石頭上的左右各有(N-1)/2個(gè)類型一樣的動(dòng)物,中間的石頭上沒(méi)有動(dòng)物。2) 用鼠標(biāo)單擊一個(gè)的動(dòng)物,如果該動(dòng)物前方的石頭上沒(méi)有動(dòng)物,該動(dòng)物就跳躍到該石頭上,如果該動(dòng)物前方的石頭上有動(dòng)物,但隔位上的石頭沒(méi)有動(dòng)物,該動(dòng)物就越過(guò)自己前面的動(dòng)物躍到石頭上,其他情形時(shí),該動(dòng)物不能跳躍(跳躍

6、時(shí)不能超過(guò)2塊石頭)。3) 左面的動(dòng)物只能向右方跳躍,右面的動(dòng)物只能向左方跳躍。4) 用戶可以通過(guò)單擊界面上提供的按鈕,讓程序自動(dòng)完成動(dòng)物換位。5) 可以隨時(shí)單擊界面上提供的按鈕,重新開始當(dāng)前的級(jí)別。6) 用戶可以通過(guò)菜單選項(xiàng),可以選擇左、右動(dòng)物的圖像。2 類總體設(shè)計(jì)2.1類組合關(guān)系圖ChangeAnimalWindowAnimalHandleMouseAutoMoveAnimaluttonJmenuIteemCustomdlgFileShowRecordDialogPointStone2.2主類ChangeAnimalWindow.java(主類)ChangeAnimalWindow類負(fù)責(zé)創(chuàng)

7、建動(dòng)物換位的主窗口,該類含有main方法,程序從該類開始執(zhí)行。2.3其他類2.3.1 AnimalAnimal類是JPanel的一個(gè)子類,創(chuàng)建的對(duì)象是ChangeAnimalWindow類的重要成員之一,用來(lái)表示“動(dòng)物”。2.3.2 PointPoint類負(fù)責(zé)創(chuàng)建確定位置的對(duì)象,使用Point對(duì)象,可以確定Animal以與Stone對(duì)象在窗體中的位置。2.3.3 StoneStone類是utton的一個(gè)子類,創(chuàng)建的對(duì)象表示“石頭”。2.3.4 HandleMouseHandleMouse類所創(chuàng)建的對(duì)象負(fù)責(zé)處理鼠標(biāo)事件。2.3.5 AutoMoveAnimalAutoMoveAnimal類所創(chuàng)建

8、的對(duì)象使用算法完成動(dòng)物的自動(dòng)換位。3類詳細(xì)設(shè)計(jì)3.1ChangeAnimalWindow類1.效果圖ChangeAnimalWindow創(chuàng)建的窗口效果如圖所示:圖3-1-1動(dòng)物換位的主窗口2.UML圖ChangeAnimalWindow類是javax.swing包中的JFrame的一個(gè)子類,并實(shí)現(xiàn)了ActionListener接口,標(biāo)明該類的主要成員變量和方法的UML圖如圖所示。以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。圖3-1-2 ChangeAnimalWindow類的UML圖3.以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明1)成員變量amoutOfAnimal是int型數(shù)據(jù),默認(rèn)值是6。am

9、outOfAnimal的值用來(lái)確定ChangeAnimalWindow窗體中“動(dòng)物”的數(shù)目,即Animal對(duì)象的數(shù)目。distance是int型數(shù)據(jù),默認(rèn)值是80。distance的值用來(lái)確定Point對(duì)象之間的距離,進(jìn)而可以確定Animal之間,Stone之間的距離以與Animal和Stone對(duì)象外觀的大小。animal是Animal型數(shù)組,其長(zhǎng)度為amoutOfAnimal。point是Point型數(shù)組,其長(zhǎng)度為amoutOfAnimal+1。stone是Stone型數(shù)組,其長(zhǎng)度為amoutOfAnimal+1。handleMouse是HandleMouse類創(chuàng)建的鼠標(biāo)事件監(jiān)視器,用來(lái)監(jiān)視

10、animal數(shù)組中Animal對(duì)象觸發(fā)的鼠標(biāo)事件。autoMoveAnimal是AutoMoveAnimal類創(chuàng)建的對(duì)話框。通過(guò)該對(duì)話框可以實(shí)現(xiàn)程序自動(dòng)將左右動(dòng)物交換位置。bar是JMenuBar創(chuàng)建的菜單條,用來(lái)添加菜單。bar被放置在窗口的頂部。menuGrade是JMenu創(chuàng)建的菜單,其名字為“選擇級(jí)別”。menuImage也是JMenu創(chuàng)建的菜單,其名字為“選擇動(dòng)物圖像(JPG,GIF)”。menuGrade和menuImage被添加到菜單條bar中。oneGradeItem、twoGradeItem、threeGradeItem是JMenuItem創(chuàng)建的菜單項(xiàng),它們的名字依次為“初級(jí)

11、”、“中級(jí)”、“高級(jí)”,這3個(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中。renew、quit和autoButton是utton創(chuàng)建的按鈕對(duì)象,名字依次為“重新開始”、“撤銷”和“自動(dòng)演示”。renew、quit和autoButton都將當(dāng)前窗口注冊(cè)為自己的ActionEvent事件監(jiān)視器。2)方法ChangeAnimalWindow()是構(gòu)造方法,負(fù)責(zé)完成窗口的初始化。

12、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、

13、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()方法,完

14、成必要的初始化。如果用戶選中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í),ac

15、tionPerformed(ActionEvent)方法所進(jìn)行的操作是彈出autoMoveAnimal對(duì)話框,用戶可以通過(guò)該對(duì)話框讓程序顯示動(dòng)物換位過(guò)程。main(String)方法是程序運(yùn)行的入口方法。3.2 Animal類1.效果圖Animal創(chuàng)建的對(duì)象效果圖如圖所示:圖3-2-1動(dòng)物的效果圖2.UML圖Animal類是javax.swing包中JPanel容器的一個(gè)子類,創(chuàng)建的對(duì)象是數(shù)組animal的單元中的對(duì)象。Animal型數(shù)組animal是ChangeAnimalWindow窗口的重要成員之一。標(biāo)明Animal類的主要成員變量和方法以與和ChangeAnimalWindow類之間組

16、合關(guān)系的UML圖,如圖所示。圖 3-2-2 Animal類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。成員變量point是Point型對(duì)象,用來(lái)確定Animal對(duì)象在窗口中的位置。isLeft是boolean型數(shù)據(jù),用來(lái)確定Animal對(duì)象是否為“左”。tool是Toolkit對(duì)象,用來(lái)獲得Image對(duì)象。leftImage和rightImage是File類型的對(duì)象,用來(lái)確定Animal對(duì)象上繪制的圖像文件。方法Animal()是構(gòu)造方法,負(fù)責(zé)完成Animal對(duì)象的初始化。Animal對(duì)象調(diào)用setLeftImage(File)方法可以設(shè)置leftImage文件對(duì)象。Animal對(duì)象調(diào)

17、用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ì)

18、象根據(jù)leftImage或rightImage文件所創(chuàng)建的Image對(duì)象。3.3 Point類1.效果圖Point創(chuàng)建的對(duì)象,負(fù)責(zé)刻畫Animal對(duì)象和Stone對(duì)象所在的位置,無(wú)可顯示的效果圖。2.UML圖Point創(chuàng)建的對(duì)象含有兩個(gè)重要int型數(shù)據(jù),分別用來(lái)表示窗體坐標(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ì)象用來(lái)確定Animal對(duì)象和Stone對(duì)象在窗體中的位置。標(biāo)明Poin

19、t類的主要成員變量和方法以與和ChangeAnimalWindow類之間的組合關(guān)系的UML圖,如圖所示。圖 3-3-2 Point類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。1) 成員變量x和y是Point對(duì)象中的兩個(gè)int型數(shù)據(jù),分別用來(lái)表示窗體坐標(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ì)象,用來(lái)存放一個(gè)Animal對(duì)象的引用,標(biāo)明該Animal對(duì)象在當(dāng)前Point對(duì)象上。2) 方法Point(int x,int y)是構(gòu)造方法,用來(lái)創(chuàng)建P

20、oint對(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(

21、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ì)象。3.4 Stone類1.效果圖Stone創(chuàng)建的對(duì)象效果如圖所示:圖3-4-1 Stone類的效果圖2.UML圖Stone類是javax.swing包中utton按鈕組件的一個(gè)子類,創(chuàng)建的對(duì)象是數(shù)組stone的單

22、元中的對(duì)象。Stone型數(shù)組stone是ChangeAnimalWindow窗口的重要成員之一。標(biāo)明Stone類主要成員變量和方法以與和ChangeAnimalWindow類之間的組合關(guān)系的UML圖,如圖所示:圖3-4-2 Stone類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。1)成員變量iconStone用來(lái)確定Stone對(duì)象上的圖標(biāo)。2)方法Stone()是構(gòu)造方法,用來(lái)創(chuàng)建Stone對(duì)象。3.5 HandleMouse類1.效果圖HandleMouse創(chuàng)建的對(duì)象效果如圖所示:圖3-5-1 HandleMouse創(chuàng)建的對(duì)象2.UML圖HandleMouse類是javax.swin

23、g包中JPanel容器的一個(gè)子類,同時(shí)實(shí)現(xiàn)了MouseListener和ActionListener接口,創(chuàng)建的對(duì)象handleMouse是ChangeAnimalWindow類的成員之一,負(fù)責(zé)監(jiān)視animal數(shù)組中的Animal對(duì)象上的鼠標(biāo)事件。當(dāng)用戶用鼠標(biāo)單擊Animal對(duì)象時(shí),handleMouse對(duì)象負(fù)責(zé)給出移動(dòng)Animal對(duì)象的有關(guān)算法。標(biāo)明HandleMouse類的主要成員變量、方法以與和ChangeAnimalWindow類之間組合關(guān)系的UML圖,如圖所示。圖3-5-2HandleMouse類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。1)成員變量point是Point型

24、數(shù)組,用來(lái)存放ChangeAnimalWindow窗體中point數(shù)組的引用。step是ArrayList數(shù)組表,用來(lái)存放移動(dòng)“動(dòng)物”的步驟。spendTime用來(lái)記錄用戶移動(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ì)象

25、調(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)的M

26、ouseListener接口中的方法,當(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í)行mouseRele

27、ased(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)用act

28、ionPerformed(ActionEvent)方法。當(dāng)振鈴每隔1000毫秒發(fā)生一次時(shí),方法actionPerformed(ActionEvent)就被執(zhí)行一次,所執(zhí)行的操作就是按著step指定的步驟移動(dòng)一個(gè)Animal對(duì)象。3.6 AutoMoveAnimal類1.效果圖AutoMoveAnimal類創(chuàng)建的對(duì)話框的效果如圖1所示。單價(jià)對(duì)話框上的“演示”按鈕,ChangeAnimalWindow窗體將演示左右動(dòng)物換位的步驟,如圖2所示。步驟間隔時(shí)間是1秒,單擊“暫停”按鈕暫停演示,單擊“繼續(xù)”按鈕恢復(fù)演示。圖3-6-1 演示動(dòng)物換位 圖 3-6-2 按著算法進(jìn)行換位2.UML圖AutoMov

29、eAnimal類是javax.swing包中JDialog的子類,并實(shí)現(xiàn)了ActionListener接口,創(chuàng)建的對(duì)象autoMoveAnimal是ChangeAnimalWindow的成員之一。標(biāo)明AutoMoveAnimal類的主要成員變量、方法以與和ChangeAnimalWindow類之間的組合關(guān)系的UML圖,如圖所示。圖3-6-3AutoMoveAnimal類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。1)成員變量point是Point型數(shù)組,用來(lái)存放ChangeAnimalWindow窗體中point數(shù)組的引用。step是ArrayList型對(duì)象,用來(lái)存放移動(dòng)“動(dòng)物”的步驟

30、。bStart,bStop,bContinue,bClose是utton按鈕,當(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ā)生的振鈴事件是ActionE

31、vent類型事件,當(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)造方法,用來(lái)創(chuàng)建對(duì)象autoMoveAnimal。autoMoveAnimal對(duì)象調(diào)用setPoint(Point )方法將ChangeAnimalWindow窗體中point數(shù)組的引用傳遞給對(duì)象,以便autoMoveAnimal對(duì)象移動(dòng)ChangeAnimalWindow窗體中的動(dòng)物。a

32、ctionPerformed(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è)置ste

33、p對(duì)象中的數(shù)據(jù)。step是ArrayList,存放著移動(dòng)“動(dòng)物”的步驟,這些步驟是setStep()用算法生成了整數(shù)序列,例如,當(dāng)step中存放的整數(shù)序列是“4,3,2,4”時(shí),那么該序列表示了兩個(gè)連續(xù)的移動(dòng)步驟:“將point4上的動(dòng)物移動(dòng)到point3上”和“將point2上的動(dòng)物移動(dòng)到point4上”。開始進(jìn)入游戲界面是否選擇級(jí)別進(jìn)入所選級(jí)別等級(jí)是否選擇動(dòng)物圖像進(jìn)入選擇動(dòng)物圖像界面游戲開始是否相鄰兩個(gè)圖片一樣游戲終止自動(dòng)演示游戲結(jié)果是否要重新開始是否要自動(dòng)演示是否達(dá)到英雄榜記錄撤銷游戲輸入游戲者信息是否游戲成功繼續(xù)游戲游戲結(jié)束是否是否是否否否否是是是是否4關(guān)鍵類成員函數(shù)流程圖與代碼4.1

34、 系統(tǒng)流程圖圖4-1 系統(tǒng)總體流程圖4.2源程序代碼1.ChangeAnimalWindow.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.ArrayList;import java.io.*;import javax.swing.filechooser.*;public class ChangeAnimalWindow extends JFrame implements ActionListener int amountOfAnimal=6; int distance=8

35、0; Animal animal; Point point; Stone stone; HandleMouse handleMouse; AutoMoveAnimal autoMoveAnimal; File leftImageFile,rightImageFile; File fileOneGrade,fileTwoGrade,fileThreeGrade,filecustomGrade; utton renew,quit,autoButton=null; JMenuBar bar; JMenu menuGrade,menuImage,menuHelp,menuHero; JMenuItem

36、 oneGradeResult,twoGradeResult,threeGradeResult,customGradeResult; JMenuItem oneGradeItem,twoGradeItem,threeGradeItem,limitTime; JMenuItem custom; JMenuItem helpcontent,aboutUs; JMenuItem leftIamge,rightIamge,defaultImage; JPanel pCenter; ShowRecordDialog showDiolag=null; ChangeAnimalWindow() pCente

37、r=new JPanel(); pCenter.setBackground(Color.pink); pCenter.setLayout(null); handleMouse=new HandleMouse(); autoMoveAnimal=new AutoMoveAnimal(); leftImageFile=new File(dog.jpg); rightImageFile=new File(cat.jpg); init(); bar=new JMenuBar(); menuGrade=new JMenu(選擇級(jí)別); oneGradeItem=new JMenuItem(初 級(jí)); t

38、woGradeItem=new JMenuItem(中 級(jí)); threeGradeItem=new JMenuItem(高 級(jí)); custom=new JMenuItem(自定義); leftIamge=new JMenuItem(左面動(dòng)物的圖像); rightIamge=new JMenuItem(右面動(dòng)物的圖像); defaultImage=new JMenuItem(左右面動(dòng)物的默認(rèn)圖像); limitTime=new JMenuItem(我超時(shí)了嗎); menuGrade.add(oneGradeItem); menuGrade.add(twoGradeItem); menuGra

39、de.add(threeGradeItem); menuGrade.add(custom); menuImage.add(leftIamge); menuImage.add(rightIamge); menuImage.add(defaultImage); menuHero.add(oneGradeResult); menuHero.add(twoGradeResult); menuHero.add(threeGradeResult); menuHero.add(customGradeResult); menuHero.add(limitTime); menuHelp.add(helpcont

40、ent); menuHelp.add(aboutUs); bar.add(menuGrade); bar.add(menuImage); bar.add(menuHero); bar.add(menuHelp); setJMenuBar(bar); oneGradeItem.addActionListener(this); twoGradeItem.addActionListener(this); threeGradeItem.addActionListener(this); custom.addActionListener(this); leftIamge.addActionListener

41、(this); rightIamge.addActionListener(this); defaultImage.addActionListener(this); oneGradeResult.addActionListener(this); twoGradeResult.addActionListener(this); threeGradeResult.addActionListener(this); customGradeResult.addActionListener(this); limitTime.addActionListener(this); helpcontent.addAct

42、ionListener(this); aboutUs.addActionListener(this); renew=new utton(重新開始); renew.addActionListener(this); autoButton=new utton(自動(dòng)演示); autoButton.addActionListener(this); quit=new utton(撤消); quit.addActionListener(this); JPanel north=new JPanel(); north.add(renew); north.add(quit); north.add(autoButt

43、on); String mess=互換左右動(dòng)物位置; JLabel hintMess=new JLabel(mess,JLabel.CENTER); north.add(hintMess); add(north,BorderLayout.NORTH); add(pCenter,BorderLayout.CENTER); JPanel south=new JPanel(); south.add(handleMouse); add(south,BorderLayout.SOUTH); setVisible(true); setBounds(60,60,710,300); validate(); s

44、etDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); if(!fileOneGrade.exists() try fileOneGrade.createNewFile(); catch(IOException exp) if(!fileTwoGrade.exists() try fileTwoGrade.createNewFile(); catch(IOException exp) if(!fileThreeGrade.exists() try fileThreeGrade.createNewFile(); catch(IOException exp)

45、if(!filecustomGrade.exists() try filecustomGrade.createNewFile(); catch(IOException exp) handleMouse.gradeFile=fileOneGrade; showDiolag=new ShowRecordDialog(); public void init() animal=new AnimalamountOfAnimal; point=new PointamountOfAnimal+1; stone=new StoneamountOfAnimal+1; int space=distance; fo

46、r(int i=0;ipoint.length;i+) pointi=new Point(space,100); space=space+distance; for(int i=0;ianimal.length;i+) animali=new Animal(); animali.addMouseListener(handleMouse); if(ianimal.length/2) animali.setIsLeft(false); /else if(i=animal.length/2+1) / /if(animali.equals(animali) /animali.setIsLeft(tru

47、e); /else / animali.setIsLeft(false); / for(int i=0;istone.length;i+) stonei=new Stone(); pCenter.add(stonei); stonei.setSize(distance*8/9,18); int w=stonei.getBounds().width; int h=stonei.getBounds().height; stonei.setLocation(pointi.getX()-w/2,pointi.getY(); pointi.setThisStone(stonei); for(int i=

48、0;ianimal.length;i+) animali.setSize(distance*6/7,distance*3/4); int w=animali.getBounds().width; int h=animali.getBounds().height; pCenter.add(animali); if(i=2&m%2=0) amountOfAnimal=m; public void removeAnimalAndStone() for(int i=0;ipoint.length;i+) if(pointi.getThisAnimal()!=null) pCenter.remove(p

49、ointi.getThisAnimal(); for(int i=0;istone.length;i+) if(pointi.getThisStone()!=null) pCenter.remove(pointi.getThisStone(); pCenter.validate(); pCenter.repaint(); public void needDoing() init(); handleMouse.initStep(); handleMouse.initSpendTime(); handleMouse.setCountTime(true); autoMoveAnimal.setPoi

50、nt(point); public void actionPerformed(ActionEvent e) if(e.getSource()=oneGradeItem) handleMouse.gradeFile=fileOneGrade; distance=80; removeAnimalAndStone(); setAmountOfAnimal(6); needDoing(); else if(e.getSource()=twoGradeItem) handleMouse.gradeFile=fileTwoGrade; distance=70; removeAnimalAndStone()

51、; setAmountOfAnimal(8); needDoing(); else if(e.getSource()=threeGradeItem) handleMouse.gradeFile=fileThreeGrade; distance=60; removeAnimalAndStone(); setAmountOfAnimal(10); needDoing(); else if(e.getSource()=custom) handleMouse.gradeFile=filecustomGrade; Customdlg dialog=new Customdlg(this,自定義,true)

52、; dialog.setVisible(true); amountOfAnimal=dialog.getAmountOfAnimal(); distance=560/amountOfAnimal; removeAnimalAndStone(); setAmountOfAnimal(amountOfAnimal); needDoing(); else if(e.getSource()=helpcontent) JOptionPane pane=new JOptionPane(String.format 1,左右邊的動(dòng)物分別移動(dòng)到另一邊, 2,左只能向右方跳,右只能向左跳, 3,跳躍最多不能越過(guò)2

53、塊石頭); utton btnOk; btnOk=new utton(確定); pane.setOptions(new uttonbtnOk); btnOk.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) dlghelpList.dispose(); ); dlghelpList.setVisible(true); else if(e.getSource()=renew) removeAnimalAndStone(); needDoing(); else if(e.getSour

54、ce()=autoButton) removeAnimalAndStone(); needDoing(); handleMouse.setCountTime(false); autoMoveAnimal.setStep(); int x=this.getBounds().x+this.getBounds().width/2; int y=this.getBounds().y+this.getBounds().height; autoMoveAnimal.setLocation(x,y); autoMoveAnimal.setSize(this.getBounds().width/2,120);

55、 autoMoveAnimal.setVisible(true); else if(e.getSource()=quit) ArrayListstep=handleMouse.getStep(); int length=step.size(); int start=-1,end=-1; if(length=2) end=step.get(length-1); start=step.get(length-2); step.remove(length-1); step.remove(length-2); Animal ani=pointend.getThisAnimal(); int w=ani.

56、getBounds().width; int h=ani.getBounds().height; ani.setLocation(pointstart.getX()-w/2,pointstart.getY()-h); ani.setAtPoint(pointstart); pointstart.setThisAnimal(ani); pointstart.setIsHaveAnimal(true); pointend.setIsHaveAnimal(false); else if(e.getSource()=leftIamge) JFileChooser chooser=new JFileCh

57、ooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( JPG & GIF Images, jpg, gif); chooser.setFileFilter(filter); int state=chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) leftImageFile=file; for(int i=0;ianimal.len

58、gth;i+) if(animali.getIsLeft()=true) animali.setLeftImage(leftImageFile); animali.repaint(); else if(e.getSource()=rightIamge) JFileChooser chooser=new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( JPG & GIF Images, jpg, gif); chooser.setFileFilter(filter); int state=

59、chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) rightImageFile=file; for(int i=0;ianimal.length;i+) if(animali.getIsLeft()=false) animali.setRightImage(rightImageFile); animali.repaint(); else if(e.getSource()=defaultImage) leftImag

60、eFile=new File(dog.jpg); rightImageFile=new File(cat.jpg); for(int i=0;i=(5*amountOfAnimal) JOptionPane.showMessageDialog(this,在+(5*amountOfAnimal)+s里你還沒(méi)完成!rn+你太慢了!好遜??!); leftImageFile=new File(pigone.jpg); rightImageFile=new File(pigtwo.jpg); for(int i=0;ianimal.length;i+) if(animali.getIsLeft()=tr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論