




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 PAGE37 / NUMPAGES40 課程設計任務書學 院信息學院專 業(yè)電子信息工程學生班級學號課程設計題目基于Java的動物換位游戲軟件設計實踐教學要求與任務:采用java技術設計動物換位游戲軟件,設計要求如下:程序分為3個級別,用戶可以通過界面上提供的菜單來選擇“初級”、“中級”和“高級”這三個級別。對于“初級”級別,在水平排列的7塊石頭上的左右各有3個類型一樣的動物,中間的石頭上沒有動物;對于“中級”級別,在水平排列的9塊石頭上的左右各有4個類型一樣的動物,中間的石頭上沒有動物;對于“高級”級別,在水平排列的11塊石頭上的左右各有5個類型一樣的動物,中間的石頭上沒有動物。用鼠標單擊一
2、個動物,如果該動物的前方的石頭上沒有動物,該動物就跳躍到該石頭上,如果該動物前方的石頭上有其他的動物,但隔位上的石頭沒有動物,該動物就越過自己前面的動物跳躍到石頭上,其他情形時,該動物不跳躍(跳躍時不能超過2塊石頭)。左面的動物只能向右方跳躍,右面的動物只能向左方跳躍。用戶可以通過單擊界面上提供的按鈕,讓程序自動完成動物換位??梢噪S時單擊界面上提供的按鈕,重新開始當前的級別。用戶通過菜單選項,可以選擇左、右動物的圖像。工作計劃與進度安排: 第18周:布置課程設計任務,查閱資料,分組設計,程序調試。 第19周:程序調試,編寫課程設計報告,驗收,答辯。指導教師:2013年 6月20日專業(yè)負責人:2
3、013年 6月20日學院教學副院長:2013年 6月20日成績評定表學生班級學號專 業(yè)電子信息工程課程設計題目基于Java的動物換位游戲軟件設計評語組長簽字:成績日期 2013 年 月 日目 錄1 課設軟件主要功能12 類總體設計22.1 類組合關系圖22.2 主類22.3 其他類23 類詳細設計33.1 CHANGEANIMALWINDOW類33.2 ANIMAL類53.3 POINT類73.4 STONE類83.5 HANDLEMOUSE類93.6 AUTOMOVEANIMAL類104 關鍵類成員函數(shù)流程圖與代碼135 軟件運行結果35結論37參考文獻37動物換位系統(tǒng)的設計1 課設軟件主要
4、功能程序分為不同的級別,左右各有動物,中間石頭沒有動物,將左右動物交換,不可后退。用鼠標單擊一個動物,如果該動物前方的石頭上沒有動物,該動物就跳躍到該石頭上,如果該動物前方的石頭上有動物,但隔位上的石頭沒有動物,該動物就越過自己前面的動物躍到石頭上,其他情形時,該動物不能跳躍。不能持續(xù)玩的可以點自動演示,將自動完成游戲,可以幫助游戲者更好的了解系統(tǒng)的主體功能。設計GUI界面的動物換位游戲,游戲的結果是讓左右兩組動物交換位置。具體容如下:1) 程序分為4個級別,用戶可以通過界面上提供的菜單選擇“初級”、“中級”、“高級”、“自定義”這4個級別。對于“初級”級別,在水平排列的7塊石頭上的左右各有3
5、個類型一樣的動物,中間的石頭上沒有動物;對于“中級”級別,在水平排列的9塊石頭上的左右各有4個類型一樣的動物,中間的石頭上沒有動物;對于“高級”級別,在水平排列的11塊石頭上的左右各有5個類型一樣的動物,中間的石頭上沒有動物;對于“自定義”級別,用戶可以輸入自己想設置的一個動物數(shù)量(輸入的數(shù)必須是偶數(shù)),在水平排列的N塊石頭上的左右各有(N-1)/2個類型一樣的動物,中間的石頭上沒有動物。2) 用鼠標單擊一個的動物,如果該動物前方的石頭上沒有動物,該動物就跳躍到該石頭上,如果該動物前方的石頭上有動物,但隔位上的石頭沒有動物,該動物就越過自己前面的動物躍到石頭上,其他情形時,該動物不能跳躍(跳躍
6、時不能超過2塊石頭)。3) 左面的動物只能向右方跳躍,右面的動物只能向左方跳躍。4) 用戶可以通過單擊界面上提供的按鈕,讓程序自動完成動物換位。5) 可以隨時單擊界面上提供的按鈕,重新開始當前的級別。6) 用戶可以通過菜單選項,可以選擇左、右動物的圖像。2 類總體設計2.1類組合關系圖ChangeAnimalWindowAnimalHandleMouseAutoMoveAnimaluttonJmenuIteemCustomdlgFileShowRecordDialogPointStone2.2主類ChangeAnimalWindow.java(主類)ChangeAnimalWindow類負責創(chuàng)
7、建動物換位的主窗口,該類含有main方法,程序從該類開始執(zhí)行。2.3其他類2.3.1 AnimalAnimal類是JPanel的一個子類,創(chuàng)建的對象是ChangeAnimalWindow類的重要成員之一,用來表示“動物”。2.3.2 PointPoint類負責創(chuàng)建確定位置的對象,使用Point對象,可以確定Animal以與Stone對象在窗體中的位置。2.3.3 StoneStone類是utton的一個子類,創(chuàng)建的對象表示“石頭”。2.3.4 HandleMouseHandleMouse類所創(chuàng)建的對象負責處理鼠標事件。2.3.5 AutoMoveAnimalAutoMoveAnimal類所創(chuàng)建
8、的對象使用算法完成動物的自動換位。3類詳細設計3.1ChangeAnimalWindow類1.效果圖ChangeAnimalWindow創(chuàng)建的窗口效果如圖所示:圖3-1-1動物換位的主窗口2.UML圖ChangeAnimalWindow類是javax.swing包中的JFrame的一個子類,并實現(xiàn)了ActionListener接口,標明該類的主要成員變量和方法的UML圖如圖所示。以下是UML圖中有關數(shù)據(jù)和方法的詳細說明。圖3-1-2 ChangeAnimalWindow類的UML圖3.以下是UML圖中有關數(shù)據(jù)和方法的詳細說明1)成員變量amoutOfAnimal是int型數(shù)據(jù),默認值是6。am
9、outOfAnimal的值用來確定ChangeAnimalWindow窗體中“動物”的數(shù)目,即Animal對象的數(shù)目。distance是int型數(shù)據(jù),默認值是80。distance的值用來確定Point對象之間的距離,進而可以確定Animal之間,Stone之間的距離以與Animal和Stone對象外觀的大小。animal是Animal型數(shù)組,其長度為amoutOfAnimal。point是Point型數(shù)組,其長度為amoutOfAnimal+1。stone是Stone型數(shù)組,其長度為amoutOfAnimal+1。handleMouse是HandleMouse類創(chuàng)建的鼠標事件監(jiān)視器,用來監(jiān)視
10、animal數(shù)組中Animal對象觸發(fā)的鼠標事件。autoMoveAnimal是AutoMoveAnimal類創(chuàng)建的對話框。通過該對話框可以實現(xiàn)程序自動將左右動物交換位置。bar是JMenuBar創(chuàng)建的菜單條,用來添加菜單。bar被放置在窗口的頂部。menuGrade是JMenu創(chuàng)建的菜單,其名字為“選擇級別”。menuImage也是JMenu創(chuàng)建的菜單,其名字為“選擇動物圖像(JPG,GIF)”。menuGrade和menuImage被添加到菜單條bar中。oneGradeItem、twoGradeItem、threeGradeItem是JMenuItem創(chuàng)建的菜單項,它們的名字依次為“初級
11、”、“中級”、“高級”,這3個菜單項被添加到菜單項menuGrade中。leftImage、rightImage和defaultImage也是JMenuItem創(chuàng)建的菜單項,其名字依次為“左面動物的圖像”、“右面動物的圖像”和“左右面動物的默認圖像”,這三個菜單項被添加到菜單項menuImage中。renew、quit和autoButton是utton創(chuàng)建的按鈕對象,名字依次為“重新開始”、“撤銷”和“自動演示”。renew、quit和autoButton都將當前窗口注冊為自己的ActionEvent事件監(jiān)視器。2)方法ChangeAnimalWindow()是構造方法,負責完成窗口的初始化。
12、init()方法負責完成Animal、Stone和Point對象的創(chuàng)建。setAmoutOfAnimal(int)方法負責設置動物的個數(shù),即amountOfAnimal的值。removeAnimalAndStone()方法負責從窗體中移掉動物和石頭,即移掉Animal對象和Stone對象。needDoing()方法負責執(zhí)行一些經常需要重復執(zhí)行的代碼。actionPerformed(ActionEvent)方法是ChangeAnimalWindow類實現(xiàn)的ActionListener接口中的方法。ChangeAnimalWindow創(chuàng)建的窗口是oneGradeItem、twoGradeItem、
13、threeGradeItem、custom、leftImage、rightImage、defaultImage等菜單項和renew、quit、autoButton按鈕的ActionEvent事件監(jiān)視器。當用戶選中某個菜單項或單擊按鈕時,窗口將執(zhí)行actionPerformed(ActionEvent)方法進行相應的操作。如果用戶選中oneGradeItem、twoGradeItem、threeGradeItem和custom四個菜單項的某一項時,actionPerformed(ActionEvent)方法所執(zhí)行的操作就是改變amountOfAnimal的值,并執(zhí)行needDoing()方法,完
14、成必要的初始化。如果用戶選中l(wèi)eftImage和rightImage菜單項的某一個時,actionPerformed(ActionEvent)方法所執(zhí)行的操作就是改變leftImageFile和rightImageFile的引用。當用戶單擊renew按鈕時,actionPerformed(ActionEvent)方法所進行的操作是保持當前的amountOfAnimal的值,并執(zhí)行needDoing()方法,完成必要的初始化,當用戶單擊quit按鈕時,actionPerformed(ActionEvent)方法所進行的操作是撤銷當前“動物”的前一次跳躍。當用戶單擊autoButton按鈕時,ac
15、tionPerformed(ActionEvent)方法所進行的操作是彈出autoMoveAnimal對話框,用戶可以通過該對話框讓程序顯示動物換位過程。main(String)方法是程序運行的入口方法。3.2 Animal類1.效果圖Animal創(chuàng)建的對象效果圖如圖所示:圖3-2-1動物的效果圖2.UML圖Animal類是javax.swing包中JPanel容器的一個子類,創(chuàng)建的對象是數(shù)組animal的單元中的對象。Animal型數(shù)組animal是ChangeAnimalWindow窗口的重要成員之一。標明Animal類的主要成員變量和方法以與和ChangeAnimalWindow類之間組
16、合關系的UML圖,如圖所示。圖 3-2-2 Animal類的UML圖以下是UML圖中有關數(shù)據(jù)和方法的詳細說明。成員變量point是Point型對象,用來確定Animal對象在窗口中的位置。isLeft是boolean型數(shù)據(jù),用來確定Animal對象是否為“左”。tool是Toolkit對象,用來獲得Image對象。leftImage和rightImage是File類型的對象,用來確定Animal對象上繪制的圖像文件。方法Animal()是構造方法,負責完成Animal對象的初始化。Animal對象調用setLeftImage(File)方法可以設置leftImage文件對象。Animal對象調
17、用setRightImage(File)方法可以設置rightImage文件對象。Animal對象調用setIsLeft(boolean)設置自己是否為“左”的動物,即設置isLeft屬性的值。Animal對象調用getIsLeft()方法判斷自己是否為“左”的動物,即返回isLeft屬性的值。Animal對象調用setAtPoint(Point)方法設置自己所在的“點”,即設置屬性point的對象引用。Animal對象調用getAtPoint()返回自己所在的“點”,即返回point對象的引用。Animal對象調用paintComponent(Graphics)方法繪制圖像,即繪制tool對
18、象根據(jù)leftImage或rightImage文件所創(chuàng)建的Image對象。3.3 Point類1.效果圖Point創(chuàng)建的對象,負責刻畫Animal對象和Stone對象所在的位置,無可顯示的效果圖。2.UML圖Point創(chuàng)建的對象含有兩個重要int型數(shù)據(jù),分別用來表示窗體坐標系中的x軸坐標和y軸坐標值,窗體坐標系的原點是窗體的左上角,向右是x軸的正向,向下是y軸的正向。Point類創(chuàng)建的對象是數(shù)組point的單元中的對象。Point型數(shù)組point是ChangeAnimalWindow窗口的重要成員之一,其單元中的Point對象用來確定Animal對象和Stone對象在窗體中的位置。標明Poin
19、t類的主要成員變量和方法以與和ChangeAnimalWindow類之間的組合關系的UML圖,如圖所示。圖 3-3-2 Point類的UML圖以下是UML圖中有關數(shù)據(jù)和方法的詳細說明。1) 成員變量x和y是Point對象中的兩個int型數(shù)據(jù),分別用來表示窗體坐標系中的x軸和y軸坐標值。haveAnimal是boolean數(shù)據(jù),如果有Animal對象在該Point對象上時,該數(shù)據(jù)為true;否則為false。animal是Animal類聲明的對象,用來存放一個Animal對象的引用,標明該Animal對象在當前Point對象上。2) 方法Point(int x,int y)是構造方法,用來創(chuàng)建P
20、oint對象。Point對象調用isHaveAnimal()方法可以返回一個boolean數(shù)據(jù),如果當前Point對象上有Animal對象,isHaveDisc()方法返回true;否則返回false。Point對象調用setIsHaveAnimal(boolean boo)方法可以根據(jù)參數(shù)boo的值設置當前Point對象上是否有Animal對象。Point對象getX()和getY()方法可以返回其中的x軸坐標和y軸坐標。Point對象調用equals(TowerPoint p)方法可以判斷當前Point對象是否和參數(shù)p指定的Point對象一樣。Point對象調用setThisAnimal(
21、Animal animal)方法,指定參數(shù)animal在當前Point對象上。Point對象調用getThisAnimal()方法可以返回當前Point對象上的Animal對象。Point對象調用setThisStone(Stone stone)方法,指定參數(shù)stone在當前Point對象上。Point對象調用getThisStone()方法可以返回當前Point對象上的Stone對象。3.4 Stone類1.效果圖Stone創(chuàng)建的對象效果如圖所示:圖3-4-1 Stone類的效果圖2.UML圖Stone類是javax.swing包中utton按鈕組件的一個子類,創(chuàng)建的對象是數(shù)組stone的單
22、元中的對象。Stone型數(shù)組stone是ChangeAnimalWindow窗口的重要成員之一。標明Stone類主要成員變量和方法以與和ChangeAnimalWindow類之間的組合關系的UML圖,如圖所示:圖3-4-2 Stone類的UML圖以下是UML圖中有關數(shù)據(jù)和方法的詳細說明。1)成員變量iconStone用來確定Stone對象上的圖標。2)方法Stone()是構造方法,用來創(chuàng)建Stone對象。3.5 HandleMouse類1.效果圖HandleMouse創(chuàng)建的對象效果如圖所示:圖3-5-1 HandleMouse創(chuàng)建的對象2.UML圖HandleMouse類是javax.swin
23、g包中JPanel容器的一個子類,同時實現(xiàn)了MouseListener和ActionListener接口,創(chuàng)建的對象handleMouse是ChangeAnimalWindow類的成員之一,負責監(jiān)視animal數(shù)組中的Animal對象上的鼠標事件。當用戶用鼠標單擊Animal對象時,handleMouse對象負責給出移動Animal對象的有關算法。標明HandleMouse類的主要成員變量、方法以與和ChangeAnimalWindow類之間組合關系的UML圖,如圖所示。圖3-5-2HandleMouse類的UML圖以下是UML圖中有關數(shù)據(jù)和方法的詳細說明。1)成員變量point是Point型
24、數(shù)組,用來存放ChangeAnimalWindow窗體中point數(shù)組的引用。step是ArrayList數(shù)組表,用來存放移動“動物”的步驟。spendTime用來記錄用戶移動“動物”所用時間。recordTime是計時器。success是boolean型數(shù)據(jù),當該變量的值為true時表示用戶成功地將左右動物換位。countTime是boolean型數(shù)據(jù),當該變量的值為true時,將啟動計時器為用戶計時;否則不為用戶計時。showTime是JTextField創(chuàng)建的文本框,負責顯示用時。2)方法HandleMouse()是構造方法,負責創(chuàng)建HandleMouse對象。handleMouse對象
25、調用setPoint(Point )方法將ChangeAnimalWindow窗體中的point對象的引用傳遞給該對象中的point,以便handleMouse移動窗體中的Animal對象。handleMouse對象調用initStep()方法清空step中的數(shù)據(jù)。handleMouse對象調用initSpendTime()將spendTime的值設置為0。handleMouse對象調用setCountTime(boolean)設置是否啟動計時器。handleMouse對象調用getStep()返回step對象。mousePressed(MouseEvent)是HandleMouse類實現(xiàn)的M
26、ouseListener接口中的方法,當用戶用在ChangeAnimalWindow窗體中的Animal對象上按下鼠標時,將觸發(fā)MouseEvent鼠標事件,handleMouse對象將調用執(zhí)行mousePressed(MouseEvent)方法對事件作出處理,即根據(jù)規(guī)則移動當前被鼠標單擊的Animal對象。mouseReleased(MouseEvent)方法是HandleMouse類實現(xiàn)的MouseListener接口中的方法,ChangeAnimalWindow窗體中的Animal對象上釋放鼠標時,將觸發(fā)MouseEvent鼠標事件,handleMouse對象將調用執(zhí)行mouseRele
27、ased(MouseEvent)方法對事件作出處理,其主要操作是判斷用戶是否已經成功地將左右動物換位。actionPerformed(ActionEvent)是HandleMouse類實現(xiàn)的ActionListener接口中的方法。使用Timer類的構造方法:Timer(int a,Object b)創(chuàng)建了計時器:recordTime,其中的參數(shù)a的單位是毫秒,確定計時器每隔a毫秒“振鈴”一次,參數(shù)b是計時器的監(jiān)視器。在這里取a=1000,監(jiān)視器b是當前handleMouse對象。計時器發(fā)生的振鈴事件是ActionEvent事件,當振鈴事件發(fā)生時,監(jiān)視器就會監(jiān)視到這個事件,監(jiān)視器就會調用act
28、ionPerformed(ActionEvent)方法。當振鈴每隔1000毫秒發(fā)生一次時,方法actionPerformed(ActionEvent)就被執(zhí)行一次,所執(zhí)行的操作就是按著step指定的步驟移動一個Animal對象。3.6 AutoMoveAnimal類1.效果圖AutoMoveAnimal類創(chuàng)建的對話框的效果如圖1所示。單價對話框上的“演示”按鈕,ChangeAnimalWindow窗體將演示左右動物換位的步驟,如圖2所示。步驟間隔時間是1秒,單擊“暫停”按鈕暫停演示,單擊“繼續(xù)”按鈕恢復演示。圖3-6-1 演示動物換位 圖 3-6-2 按著算法進行換位2.UML圖AutoMov
29、eAnimal類是javax.swing包中JDialog的子類,并實現(xiàn)了ActionListener接口,創(chuàng)建的對象autoMoveAnimal是ChangeAnimalWindow的成員之一。標明AutoMoveAnimal類的主要成員變量、方法以與和ChangeAnimalWindow類之間的組合關系的UML圖,如圖所示。圖3-6-3AutoMoveAnimal類的UML圖以下是UML圖中有關數(shù)據(jù)和方法的詳細說明。1)成員變量point是Point型數(shù)組,用來存放ChangeAnimalWindow窗體中point數(shù)組的引用。step是ArrayList型對象,用來存放移動“動物”的步驟
30、。bStart,bStop,bContinue,bClose是utton按鈕,當用戶單擊bStart按鈕時,程序將按著step中的步驟開始移動動物;單擊按鈕bStop時,暫停移動動物;單擊bContinue按鈕時,恢復移動動物;單擊bClose按鈕時,關閉當前對話框,并停止移動動物。time是javax.swing包中Timer類創(chuàng)建的計時器。使用Timer類的構造方法:Timer(int a,Object b)創(chuàng)建一個計時器,其中的參數(shù)a的單位是毫秒,確定計時器每隔a毫秒“振鈴”一次,參數(shù)b是計時器的監(jiān)視器,在這里我們取a=1000,監(jiān)視器b是當前對話框。計時器發(fā)生的振鈴事件是ActionE
31、vent類型事件,當振鈴事件發(fā)生時,監(jiān)視器就會監(jiān)視到這個事件,監(jiān)視器就回調ActionListener接口中的actionPerformed方法。當振鈴每隔1000毫秒發(fā)生一次時,方法actionPerformed就被執(zhí)行一次,并按著step指定的步驟移動一個動物。2)方法AutoMoveAnimal()是構造方法,用來創(chuàng)建對象autoMoveAnimal。autoMoveAnimal對象調用setPoint(Point )方法將ChangeAnimalWindow窗體中point數(shù)組的引用傳遞給對象,以便autoMoveAnimal對象移動ChangeAnimalWindow窗體中的動物。a
32、ctionPerformed(ActionEvent)是接口ActionListener中的方法。當用戶單擊bStart、bStop、bContinue或bClose當中任何一個按鈕時,autoMoveDisc對象將調用執(zhí)行actionPerformed(ActionEvent)方法,該方法的操作是,如果用戶單擊了bStart按鈕,就按著moveStep中的步驟開始移動盤子;如果單擊了bStop按鈕,就暫停移動盤子;如果單擊了bContinue按鈕,就恢復移動盤子;如果單擊了bClose按鈕,就關閉當前對話框,并停止移動盤子。autoMoveAnimal對象調用setStep()方法設置ste
33、p對象中的數(shù)據(jù)。step是ArrayList,存放著移動“動物”的步驟,這些步驟是setStep()用算法生成了整數(shù)序列,例如,當step中存放的整數(shù)序列是“4,3,2,4”時,那么該序列表示了兩個連續(xù)的移動步驟:“將point4上的動物移動到point3上”和“將point2上的動物移動到point4上”。開始進入游戲界面是否選擇級別進入所選級別等級是否選擇動物圖像進入選擇動物圖像界面游戲開始是否相鄰兩個圖片一樣游戲終止自動演示游戲結果是否要重新開始是否要自動演示是否達到英雄榜記錄撤銷游戲輸入游戲者信息是否游戲成功繼續(xù)游戲游戲結束是否是否是否否否否是是是是否4關鍵類成員函數(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(選擇級別); oneGradeItem=new JMenuItem(初 級); t
38、woGradeItem=new JMenuItem(中 級); threeGradeItem=new JMenuItem(高 級); custom=new JMenuItem(自定義); leftIamge=new JMenuItem(左面動物的圖像); rightIamge=new JMenuItem(右面動物的圖像); defaultImage=new JMenuItem(左右面動物的默認圖像); limitTime=new JMenuItem(我超時了嗎); 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(自動演示); 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=互換左右動物位置; 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,左右邊的動物分別移動到另一邊, 2,左只能向右方跳,右只能向左跳, 3,跳躍最多不能越過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里你還沒完成!rn+你太慢了!好遜?。?; leftImageFile=new File(pigone.jpg); rightImageFile=new File(pigtwo.jpg); for(int i=0;ianimal.length;i+) if(animali.getIsLeft()=tr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海綿城市建設-洞察及研究
- 桂林山水職業(yè)學院《科學社會主義專題》2023-2024學年第一學期期末試卷
- 預防兒童超重肥胖實施方案
- 2025年液罐車項目申請報告模板
- 南通大學《化妝品微生物學》2023-2024學年第一學期期末試卷
- 山西水利職業(yè)技術學院《整合營銷傳播》2023-2024學年第一學期期末試卷
- 湖南中醫(yī)藥大學湘杏學院《數(shù)字媒體藝術概論》2023-2024學年第一學期期末試卷
- 南昌大學《基礎藥理學》2023-2024學年第一學期期末試卷
- 靜脈炎護理課件
- 深淺變化美術活動教案
- 2025年廣東省廣州市越秀區(qū)第十六中學中考二模數(shù)學試卷(含部分答案)
- 2025年湖南省中考語文試卷真題及答案詳解(精校打印版)
- 2025年湖北省高考政治試卷真題(含答案解析)
- 供電施工安全培訓課件
- 櫥柜廠規(guī)章管理制度
- 初三中考數(shù)學最后一課-主題班會【課件】
- 2025益陽市赫山區(qū)中小學教師招聘考試試題及答案
- 水利工程施工監(jiān)理規(guī)范(SL288-2014)用表填表說明及示例
- 《在中亞細亞草原上》賞析 課件
- 城市軌道交通供電技術442頁完整版教學課件匯總全書電子教案
- Q/GDW248-2008輸變電工程建設標準強制性條文實施管理規(guī)程第3部分:變電站建筑工程施工教程文件
評論
0/150
提交評論