版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設(shè)計任務(wù)書課程設(shè)計任務(wù)書 學 院信息學院專 業(yè)電子信息工程 學生姓名班級學號 課程設(shè)計題目 基于 java 的動物換位游戲軟件設(shè)計 實踐教學要求與任務(wù)實踐教學要求與任務(wù): : 采用 java 技術(shù)設(shè)計動物換位游戲軟件,設(shè)計要求如下: (1)程序分為 3 個級別,用戶可以通過界面上提供的菜單來選擇“初級” 、 “中級”和“高級” 這三個級別。對于“初級”級別,在水平排列的 7 塊石頭上的左右各有 3 個類型相同的 動物,中間的石頭上沒有動物;對于“中級”級別,在水平排列的 9 塊石頭上的左右各 有 4 個類型相同的動物,中間的石頭上沒有動物;對于“高級”級別,在水平排列的 11 塊石頭上的左
2、右各有 5 個類型相同的動物,中間的石頭上沒有動物。 (2)用鼠標單擊一個動物,如果該動物的前方的石頭上沒有動物,該動物就跳躍到該石頭上, 如果該動物前方的石頭上有其他的動物,但隔位上的石頭沒有動物,該動物就越過自己 前面的動物跳躍到石頭上,其他情形時,該動物不跳躍(跳躍時不能超過 2 塊石頭) 。 (3)左面的動物只能向右方跳躍,右面的動物只能向左方跳躍。 (4)用戶可以通過單擊界面上提供的按鈕,讓程序自動完成動物換位。 (5)可以隨時單擊界面上提供的按鈕,重新開始當前的級別。 (6)用戶通過菜單選項,可以選擇左、右動物的圖像。 工作計劃與進度安排工作計劃與進度安排: : 第 18 周:布置
3、課程設(shè)計任務(wù),查閱資料,分組設(shè)計,程序調(diào)試。 第 19 周:程序調(diào)試,編寫課程設(shè)計報告,驗收,答辯。 指導(dǎo)教師: 2013 年 6 月 20 日 專業(yè)負責人: 2013 年 6 月 20 日 學院教學副院長: 2013 年 6 月 20 日 成績評定表成績評定表 學生姓名班級學號 專 業(yè)電子信息工 程 課程設(shè)計題目基于 java 的動物換 位游戲軟件設(shè)計 評 語 組長簽字: 成績 日期 2013 年 月 日 目目 錄錄 1 1 課設(shè)軟件主要功能課設(shè)軟件主要功能 .1 2 2 類總體設(shè)計類總體設(shè)計 .2 2.12.1 類組合關(guān)系圖類組合關(guān)系圖.2 2.22.2 主類主類.2 2.32.3 其他類
4、其他類.2 3 3 類詳細設(shè)計類詳細設(shè)計 .3 3.13.1 changeanimalwindowchangeanimalwindow 類類 .3 3.23.2 animalanimal 類類 .5 3.33.3 pointpoint 類類 .7 3.43.4 stonestone 類類 .8 3.53.5 handlemousehandlemouse 類類 .9 3.63.6 automoveanimalautomoveanimal 類類 .10 4 4 關(guān)鍵類成員函數(shù)流程圖及代碼關(guān)鍵類成員函數(shù)流程圖及代碼.13 5 5 軟件運行結(jié)果軟件運行結(jié)果.35 結(jié)論結(jié)論.37 參考文獻參考文獻.37
5、 動物換位系統(tǒng)的設(shè)計動物換位系統(tǒng)的設(shè)計 1 1 課設(shè)軟件主要功能課設(shè)軟件主要功能 程序分為不同的級別,左右各有動物,中間石頭沒有動物,將左右動物交換,不可后退。用鼠 標單擊一個動物,如果該動物前方的石頭上沒有動物,該動物就跳躍到該石頭上,如果該動物前方 的石頭上有動物,但隔位上的石頭沒有動物,該動物就越過自己前面的動物躍到石頭上,其他情形 時,該動物不能跳躍。不能持續(xù)玩的可以點自動演示,將自動完成游戲,可以幫助游戲者更好的了 解系統(tǒng)的主體功能。 設(shè)計 gui 界面的動物換位游戲,游戲的結(jié)果是讓左右兩組動物交換位置。具體內(nèi)容如下: 1) 程序分為 4 個級別,用戶可以通過界面上提供的菜單選擇“初
6、級” 、 “中級” 、 “高級” 、 “自定義” 這 4 個級別。對于“初級”級別,在水平排列的 7 塊石頭上的左右各有 3 個類型相同的動物, 中間的石頭上沒有動物;對于“中級”級別,在水平排列的 9 塊石頭上的左右各有 4 個類型相 同的動物,中間的石頭上沒有動物;對于“高級”級別,在水平排列的 11 塊石頭上的左右各 有 5 個類型相同的動物,中間的石頭上沒有動物;對于“自定義”級別,用戶可以輸入自己想 設(shè)置的一個動物數(shù)量(輸入的數(shù)必須是偶數(shù)) ,在水平排列的 n 塊石頭上的左右各有(n-1)/2 個類型相同的動物,中間的石頭上沒有動物。 2) 用鼠標單擊一個的動物,如果該動物前方的石頭
7、上沒有動物,該動物就跳躍到該石頭上,如果 該動物前方的石頭上有動物,但隔位上的石頭沒有動物,該動物就越過自己前面的動物躍到石 頭上,其他情形時,該動物不能跳躍(跳躍時不能超過 2 塊石頭) 。 3) 左面的動物只能向右方跳躍,右面的動物只能向左方跳躍。 4) 用戶可以通過單擊界面上提供的按鈕,讓程序自動完成動物換位。 5) 可以隨時單擊界面上提供的按鈕,重新開始當前的級別。 6) 用戶可以通過菜單選項,可以選擇左、右動物的圖像。 2 2 類總體設(shè)計類總體設(shè)計 2.12.1 類組合關(guān)系圖類組合關(guān)系圖 2.22.2 主類主類 changeanimalwindow.java(主類) changean
8、imalwindow 類負責創(chuàng)建動物換位的主窗口,該類含有 main 方法,程序從該類開始執(zhí) 行。 2.32.3 其他類其他類 2.3.12.3.1 animalanimal animal 類是 jpanel 的一個子類,創(chuàng)建的對象是 changeanimalwindow 類的重要成員之一,用 來表示“動物” 。 2.3.22.3.2 pointpoint point 類負責創(chuàng)建確定位置的對象,使用 point 對象,可以確定 animal 以及 stone 對象在窗 體中的位置。 changeanimalwindow animal handlemouse automoveanimal jbu
9、tton jmenuiteem customdlg file showrecorddialog point stone 2.3.32.3.3 stonestone stone 類是 jbutton 的一個子類,創(chuàng)建的對象表示“石頭” 。 2.3.42.3.4 handlemousehandlemouse handlemouse 類所創(chuàng)建的對象負責處理鼠標事件。 2.3.52.3.5 automoveanimalautomoveanimal automoveanimal 類所創(chuàng)建的對象使用算法完成動物的自動換位。 3 3 類詳細設(shè)計類詳細設(shè)計 3.13.1 changeanimalwindowc
10、hangeanimalwindow 類類 1.效果圖 changeanimalwindow 創(chuàng)建的窗口效果如圖所示: 圖 3-1-1 動物換位的主窗口 2.uml 圖 changeanimalwindow 類是 javax.swing 包中的 jframe 的一個子類,并實現(xiàn)了 actionlistener 接口,標明該類的主要成員變量和方法的 uml 圖如圖所示。 以下是 uml 圖中有關(guān)數(shù)據(jù)和方法的詳細說明。 圖 3-1-2 changeanimalwindow 類的 uml 圖 3.以下是 uml 圖中有關(guān)數(shù)據(jù)和方法的詳細說明 1)成員變量 amoutofanimal 是 int 型數(shù)據(jù)
11、,默認值是 6。amoutofanimal 的值用來確定 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ù)組,其長度為 amoutofan
12、imal+1。 handlemouse 是 handlemouse 類創(chuàng)建的鼠標事件監(jiān)視器,用來監(jiān)視 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 被
13、添加到菜單條 bar 中。 onegradeitem、twogradeitem、threegradeitem 是 jmenuitem 創(chuàng)建的菜單項,它們的名 字依次為“初級” 、 “中級” 、 “高級” ,這 3 個菜單項被添加到菜單項 menugrade 中。 leftimage、rightimage 和 defaultimage 也是 jmenuitem 創(chuàng)建的菜單項,其名字依次為“左面 動物的圖像” 、 “右面動物的圖像”和“左右面動物的默認圖像” ,這三個菜單項被添加到菜單 項 menuimage 中。renew、quit 和 autobutton 是 jbutton 創(chuàng)建的按鈕對象,
14、名字依次為“重新 開始” 、 “撤銷”和“自動演示” 。renew、quit 和 autobutton 都將當前窗口注冊為自己的 actionevent 事件監(jiān)視器。 2)方法 changeanimalwindow()是構(gòu)造方法,負責完成窗口的初始化。 init()方法負責完成 animal、stone 和 point 對象的創(chuàng)建。 setamoutofanimal(int)方法負責設(shè)置動物的個數(shù),即 amountofanimal 的值。 removeanimalandstone()方法負責從窗體中移掉動物和石頭,即移掉 animal 對象和 stone 對象。 needdoing()方法負責
15、執(zhí)行一些經(jīng)常需要重復(fù)執(zhí)行的代碼。 actionperformed(actionevent)方法是 changeanimalwindow 類實現(xiàn)的 actionlistener 接口 中的方法。changeanimalwindow 創(chuàng)建的窗口是 onegradeitem、twogradeitem、threegradeitem、custom、leftimage、rightimage、default image 等菜單項和 renew、quit、autobutton 按鈕的 actionevent 事件監(jiān)視器。當用戶選中某 個菜單項或單擊按鈕時,窗口將執(zhí)行 actionperformed(actio
16、nevent)方法進行相應(yīng)的操作。 如果用戶選中 onegradeitem、twogradeitem、threegradeitem 和 custom 四個菜單項的某一項 時,actionperformed(actionevent)方法所執(zhí)行的操作就是改變 amountofanimal 的值,并 執(zhí)行 needdoing()方法,完成必要的初始化。如果用戶選中 leftimage 和 rightimage 菜單 項的某一個時,actionperformed(actionevent)方法所執(zhí)行的操作就是改變 leftimagefile 和 rightimagefile 的引用。當用戶單擊 rene
17、w 按鈕時,actionperformed(actionevent)方 法所進行的操作是保持當前的 amountofanimal 的值,并執(zhí)行 needdoing()方法,完成必要 的初始化,當用戶單擊 quit 按鈕時,actionperformed(actionevent)方法所進行的操作是 撤銷當前“動物”的前一次跳躍。當用戶單擊 autobutton 按鈕時, actionperformed(actionevent)方法所進行的操作是彈出 automoveanimal 對話框,用戶可 以通過該對話框讓程序顯示動物換位過程。 main(string)方法是程序運行的入口方法。 3.23.
18、2 animalanimal 類類 1.效果圖 animal 創(chuàng)建的對象效果圖如圖所示: 圖 3-2-1 動物的效果圖 2.uml 圖 animal 類是 javax.swing 包中 jpanel 容器的一個子類,創(chuàng)建的對象是數(shù)組 animal 的單元中 的對象。animal 型數(shù)組 animal 是 changeanimalwindow 窗口的重要成員之一。標明 animal 類的主 要成員變量和方法以及和 changeanimalwindow 類之間組合關(guān)系的 uml 圖,如圖所示。 圖 3-2-2 animal 類的 uml 圖 以下是 uml 圖中有關(guān)數(shù)據(jù)和方法的詳細說明。 1) 成
19、員變量 point 是 point 型對象,用來確定 animal 對象在窗口中的位置。 isleft 是 boolean 型數(shù)據(jù),用來確定 animal 對象是否為“左” 。 tool 是 toolkit 對象,用來獲得 image 對象。 leftimage 和 rightimage 是 file 類型的對象,用來確定 animal 對象上繪制的圖像文件。 2) 方法 animal()是構(gòu)造方法,負責完成 animal 對象的初始化。 animal 對象調(diào)用 setleftimage(file)方法可以設(shè)置 leftimage 文件對象。 animal 對象調(diào)用 setrightimage
20、(file)方法可以設(shè)置 rightimage 文件對象。 animal 對象調(diào)用 setisleft(boolean)設(shè)置自己是否為“左”的動物,即設(shè)置 isleft 屬性的 值。 animal 對象調(diào)用 getisleft()方法判斷自己是否為“左”的動物,即返回 isleft 屬性的值。 animal 對象調(diào)用 setatpoint(point)方法設(shè)置自己所在的“點” ,即設(shè)置屬性 point 的對象 引用。 animal 對象調(diào)用 getatpoint()返回自己所在的“點” ,即返回 point 對象的引用。 animal 對象調(diào)用 paintcomponent(graphics)
21、方法繪制圖像,即繪制 tool 對象根據(jù) leftimage 或 rightimage 文件所創(chuàng)建的 image 對象。 3.33.3 pointpoint 類類 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 是 changeanim
22、alwindow 窗口的重要成 員之一,其單元中的 point 對象用來確定 animal 對象和 stone 對象在窗體中的位置。標明 point 類的主要成員變量和方法以及和 changeanimalwindow 類之間的組合關(guān)系的 uml 圖,如圖所示。 圖 3-3-2 point 類的 uml 圖 以下是 uml 圖中有關(guān)數(shù)據(jù)和方法的詳細說明。 1) 成員變量 x 和 y 是 point 對象中的兩個 int 型數(shù)據(jù),分別用來表示窗體坐標系中的 x 軸和 y 軸坐標值。 haveanimal 是 boolean 數(shù)據(jù),如果有 animal 對象在該 point 對象上時,該數(shù)據(jù)為 tr
23、ue;否則 為 false。 animal 是 animal 類聲明的對象,用來存放一個 animal 對象的引用,標明該 animal 對象在當 前 point 對象上。 2) 方法 point(int x,int y)是構(gòu)造方法,用來創(chuàng)建 point 對象。 point 對象調(diào)用 ishaveanimal()方法可以返回一個 boolean 數(shù)據(jù),如果當前 point 對象上有 animal 對象,ishavedisc()方法返回 true;否則返回 false。 point 對象調(diào)用 setishaveanimal(boolean boo)方法可以根據(jù)參數(shù) boo 的值設(shè)置當前 poin
24、t 對象上是否有 animal 對象。 point 對象 getx()和 gety()方法可以返回其中的 x 軸坐標和 y 軸坐標。 point 對象調(diào)用 equals(towerpoint p)方法可以判斷當前 point 對象是否和參數(shù) p 指定的 point 對象相同。 point 對象調(diào)用 setthisanimal(animal animal)方法,指定參數(shù) animal 在當前 point 對象 上。 point 對象調(diào)用 getthisanimal()方法可以返回當前 point 對象上的 animal 對象。 point 對象調(diào)用 setthisstone(stone ston
25、e)方法,指定參數(shù) stone 在當前 point 對象上。 point 對象調(diào)用 getthisstone()方法可以返回當前 point 對象上的 stone 對象。 3.43.4 stonestone 類類 1.效果圖 stone 創(chuàng)建的對象效果如圖所示: 圖 3-4-1 stone 類的效果圖 2.uml 圖 stone 類是 javax.swing 包中 jbutton 按鈕組件的一個子類,創(chuàng)建的對象是數(shù)組 stone 的單元 中的對象。stone 型數(shù)組 stone 是 changeanimalwindow 窗口的重要成員之一。標明 stone 類主要 成員變量和方法以及和 cha
26、ngeanimalwindow 類之間的組合關(guān)系的 uml 圖,如圖所示: 圖 3-4-2 stone 類的 uml 圖 以下是 uml 圖中有關(guān)數(shù)據(jù)和方法的詳細說明。 1)成員變量 iconstone 用來確定 stone 對象上的圖標。 2)方法 stone()是構(gòu)造方法,用來創(chuàng)建 stone 對象。 3.53.5 handlemousehandlemouse 類類 1.效果圖 handlemouse 創(chuàng)建的對象效果如圖所示: 圖 3-5-1 handlemouse 創(chuàng)建的對象 2.uml 圖 handlemouse 類是 javax.swing 包中 jpanel 容器的一個子類,同時實
27、現(xiàn)了 mouselistener 和 actionlistener 接口,創(chuàng)建的對象 handlemouse 是 changeanimalwindow 類的成員之一,負責監(jiān)視 animal 數(shù)組中的 animal 對象上的鼠標事件。當用戶用鼠標單擊 animal 對象時,handlemouse 對象 負責給出移動 animal 對象的有關(guān)算法。標明 handlemouse 類的主要成員變量、方法以及和 changeanimalwindow 類之間組合關(guān)系的 uml 圖,如圖所示。 圖 3-5-2handlemouse 類的 uml 圖 以下是 uml 圖中有關(guān)數(shù)據(jù)和方法的詳細說明。 1)成員變
28、量 point 是 point 型數(shù)組,用來存放 changeanimalwindow 窗體中 point 數(shù)組的引用。 step 是 arraylist數(shù)組表,用來存放移動“動物”的步驟。 spendtime 用來記錄用戶移動“動物”所用時間。 recordtime 是計時器。 success 是 boolean 型數(shù)據(jù),當該變量的值為 true 時表示用戶成功地將左右動物換位。 counttime 是 boolean 型數(shù)據(jù),當該變量的值為 true 時,將啟動計時器為用戶計時;否則不 為用戶計時。 showtime 是 jtextfield 創(chuàng)建的文本框,負責顯示用時。 2)方法 han
29、dlemouse()是構(gòu)造方法,負責創(chuàng)建 handlemouse 對象。 handlemouse 對象調(diào)用 setpoint(point )方法將 changeanimalwindow 窗體中的 point 對 象的引用傳遞給該對象中的 point,以便 handlemouse 移動窗體中的 animal 對象。 handlemouse 對象調(diào)用 initstep()方法清空 step 中的數(shù)據(jù)。 handlemouse 對象調(diào)用 initspendtime()將 spendtime 的值設(shè)置為 0。 handlemouse 對象調(diào)用 setcounttime(boolean)設(shè)置是否啟動計時
30、器。 handlemouse 對象調(diào)用 getstep()返回 step 對象。 mousepressed(mouseevent)是 handlemouse 類實現(xiàn)的 mouselistener 接口中的方法,當用戶 用在 changeanimalwindow 窗體中的 animal 對象上按下鼠標時,將觸發(fā) mouseevent 鼠標事件, handlemouse 對象將調(diào)用執(zhí)行 mousepressed(mouseevent)方法對事件作出處理,即根據(jù)規(guī)則 移動當前被鼠標單擊的 animal 對象。 mousereleased(mouseevent)方法是 handlemouse 類實現(xiàn)的
31、 mouselistener 接口中的方法, changeanimalwindow 窗體中的 animal 對象上釋放鼠標時,將觸發(fā) mouseevent 鼠標事件, handlemouse 對象將調(diào)用執(zhí)行 mousereleased(mouseevent)方法對事件作出處理,其主要操 作是判斷用戶是否已經(jīng)成功地將左右動物換位。 actionperformed(actionevent)是 handlemouse 類實現(xiàn)的 actionlistener 接口中的方法。 使用 timer 類的構(gòu)造方法:timer(int a,object b)創(chuàng)建了計時器:recordtime,其中的參 數(shù) a
32、的單位是毫秒,確定計時器每隔 a 毫秒“振鈴”一次,參數(shù) b 是計時器的監(jiān)視器。在這里 取 a=1000,監(jiān)視器 b 是當前 handlemouse 對象。計時器發(fā)生的振鈴事件是 actionevent 事件, 當振鈴事件發(fā)生時,監(jiān)視器就會監(jiān)視到這個事件,監(jiān)視器就會調(diào)用 actionperformed(actionevent)方法。當振鈴每隔 1000 毫秒發(fā)生一次時,方法 actionperformed(actionevent)就被執(zhí)行一次,所執(zhí)行的操作就是按著 step 指定的步驟移 動一個 animal 對象。 3.63.6 automoveanimalautomoveanimal 類類
33、 1.效果圖 automoveanimal 類創(chuàng)建的對話框的效果如圖 1 所示。單價對話框上的“演示”按鈕, changeanimalwindow 窗體將演示左右動物換位的步驟,如圖 2 所示。步驟間隔時間是 1 秒,單擊 “暫?!卑粹o暫停演示,單擊“繼續(xù)”按鈕恢復(fù)演示。 圖 3-6-1 演示動物換位 圖 3-6-2 按著算法進行換位 2.uml 圖 automoveanimal 類是 javax.swing 包中 jdialog 的子類,并實現(xiàn)了 actionlistener 接口,創(chuàng) 建的對象 automoveanimal 是 changeanimalwindow 的成員之一。標明 aut
34、omoveanimal 類的主要成 員變量、方法以及和 changeanimalwindow 類之間的組合關(guān)系的 uml 圖,如圖所示。 圖 3-6-3automoveanimal 類的 uml 圖 以下是 uml 圖中有關(guān)數(shù)據(jù)和方法的詳細說明。 1)成員變量 point 是 point 型數(shù)組,用來存放 changeanimalwindow 窗體中 point 數(shù)組的引用。 step 是 arraylist型對象,用來存放移動“動物”的步驟。 bstart,bstop,bcontinue,bclose 是 jbutton 按鈕,當用戶單擊 bstart 按鈕時,程序?qū)?著 step 中的步
35、驟開始移動動物;單擊按鈕 bstop 時,暫停移動動物;單擊 bcontinue 按鈕時, 恢復(fù)移動動物;單擊 bclose 按鈕時,關(guān)閉當前對話框,并停止移動動物。 time 是 javax.swing 包中 timer 類創(chuàng)建的計時器。使用 timer 類的構(gòu)造方法:timer(int a,object b)創(chuàng)建一個計時器,其中的參數(shù) a 的單位是毫秒,確定計時器每隔 a 毫秒“振鈴” 一次,參數(shù) b 是計時器的監(jiān)視器,在這里我們?nèi)?a=1000,監(jiān)視器 b 是當前對話框。計時器發(fā)生 的振鈴事件是 actionevent 類型事件,當振鈴事件發(fā)生時,監(jiān)視器就會監(jiān)視到這個事件,監(jiān)視 器就回調(diào)
36、 actionlistener 接口中的 actionperformed 方法。當振鈴每隔 1000 毫秒發(fā)生一次時, 方法 actionperformed 就被執(zhí)行一次,并按著 step 指定的步驟移動一個動物。 2)方法 automoveanimal()是構(gòu)造方法,用來創(chuàng)建對象 automoveanimal。 automoveanimal 對象調(diào)用 setpoint(point )方法將 changeanimalwindow 窗體中 point 數(shù) 組的引用傳遞給對象,以便 automoveanimal 對象移動 changeanimalwindow 窗體中的動物。 actionperfo
37、rmed(actionevent)是接口 actionlistener 中的方法。當用戶單擊 bstart、bstop、bcontinue 或 bclose 當中任何一個按鈕時,automovedisc 對象將調(diào)用執(zhí)行 actionperformed(actionevent)方法,該方法的操作是,如果用戶單擊了 bstart 按鈕,就 按著 movestep 中的步驟開始移動盤子;如果單擊了 bstop 按鈕,就暫停移動盤子;如果單擊 了 bcontinue 按鈕,就恢復(fù)移動盤子;如果單擊了 bclose 按鈕,就關(guān)閉當前對話框,并停止 移動盤子。 automoveanimal 對象調(diào)用 se
38、tstep()方法設(shè)置 step 對象中的數(shù)據(jù)。step 是 arraylist,存放著移動“動物”的步驟,這些步驟是 setstep()用算法生成了整 數(shù)序列,例如,當 step 中存放的整數(shù)序列是“4,3,2,4”時,那么該序列表示了兩個連續(xù)的移 動步驟:“將 point4上的動物移動到 point3上”和“將 point2上的動物移動到 point4上” 。 4 4 關(guān)鍵類成員函數(shù)流程圖及代碼關(guān)鍵類成員函數(shù)流程圖及代碼 4.14.1 系統(tǒng)流程圖系統(tǒng)流程圖 圖 4-1 系統(tǒng)總體流程圖 開始 進入游戲界面 是否選擇級別 進入所選級別等 級 是否選擇動物圖 像 進入選擇動 物圖像界面 游戲開始
39、 是否相鄰兩個 圖片相同 游戲終 止 自動演示游戲結(jié) 果 是否要 重新開 始 是否要自 動演示 是否達到英 雄榜記錄 撤銷游 戲 輸入游戲者信 息 是否游戲成 功 繼續(xù)游 戲 游戲結(jié)束 是 否 是 否 是否 否 否 否 是 是 是 是 否 4.24.2 源程序源程序代碼代碼 1.changeanimalwindow.java1.changeanimalwindow.java import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.arraylist; import java.io.*;
40、 import javax.swing.filechooser.*; public class changeanimalwindow extends jframe implements actionlistener int amountofanimal=6; int distance=80; animal animal; point point; stone stone; handlemouse handlemouse; automoveanimal automoveanimal; file leftimagefile,rightimagefile; file fileonegrade,fil
41、etwograde,filethreegrade,filecustomgrade; jbutton renew,quit,autobutton=null; jmenubar bar; jmenu menugrade,menuimage,menuhelp,menuhero; jmenuitem onegraderesult,twograderesult,threegraderesult,customgraderesult; jmenuitem onegradeitem,twogradeitem,threegradeitem,limittime; jmenuitem custom; jmenuit
42、em helpcontent,aboutus; jmenuitem leftiamge,rightiamge,defaultimage; jpanel pcenter; showrecorddialog showdiolag=null; changeanimalwindow() pcenter=new jpanel(); pcenter.setbackground(color.pink); pcenter.setlayout(null); handlemouse=new handlemouse(); automoveanimal=new automoveanimal(); leftimagef
43、ile=new file(dog.jpg); rightimagefile=new file(cat.jpg); init(); bar=new jmenubar(); menugrade=new jmenu(選擇級別); onegradeitem=new jmenuitem(初 級); twogradeitem=new jmenuitem(中 級); threegradeitem=new jmenuitem(高 級); custom=new jmenuitem(自定義); leftiamge=new jmenuitem(左面動物的圖像); rightiamge=new jmenuitem(右
44、面動物的圖像); defaultimage=new jmenuitem(左右面動物的默認圖像); limittime=new jmenuitem(我超時了嗎); menugrade.add(onegradeitem); menugrade.add(twogradeitem); menugrade.add(threegradeitem); menugrade.add(custom); menuimage.add(leftiamge); menuimage.add(rightiamge); menuimage.add(defaultimage); menuhero.add(onegraderesu
45、lt); menuhero.add(twograderesult); menuhero.add(threegraderesult); menuhero.add(customgraderesult); menuhero.add(limittime); menuhelp.add(helpcontent); menuhelp.add(aboutus); bar.add(menugrade); bar.add(menuimage); bar.add(menuhero); bar.add(menuhelp); setjmenubar(bar); onegradeitem.addactionlistene
46、r(this); twogradeitem.addactionlistener(this); threegradeitem.addactionlistener(this); custom.addactionlistener(this); leftiamge.addactionlistener(this); rightiamge.addactionlistener(this); defaultimage.addactionlistener(this); onegraderesult.addactionlistener(this); twograderesult.addactionlistener
47、(this); threegraderesult.addactionlistener(this); customgraderesult.addactionlistener(this); limittime.addactionlistener(this); helpcontent.addactionlistener(this); aboutus.addactionlistener(this); renew=new jbutton(重新開始); renew.addactionlistener(this); autobutton=new jbutton(自動演示); autobutton.addac
48、tionlistener(this); quit=new jbutton(撤消); quit.addactionlistener(this); jpanel north=new jpanel(); north.add(renew); north.add(quit); north.add(autobutton); string mess=互換左右動物位置; jlabel hintmess=new jlabel(mess,jlabel.center); north.add(hintmess); add(north,borderlayout.north); add(pcenter,borderlay
49、out.center); jpanel south=new jpanel(); south.add(handlemouse); add(south,borderlayout.south); setvisible(true); setbounds(60,60,710,300); validate(); setdefaultcloseoperation(jframe.exit_on_close); if(!fileonegrade.exists() try fileonegrade.createnewfile(); catch(ioexception exp) if(!filetwograde.e
50、xists() try filetwograde.createnewfile(); catch(ioexception exp) if(!filethreegrade.exists() try filethreegrade.createnewfile(); catch(ioexception exp) if(!filecustomgrade.exists() try filecustomgrade.createnewfile(); catch(ioexception exp) handlemouse.gradefile=fileonegrade; showdiolag=new showreco
51、rddialog(); public void init() animal=new animalamountofanimal; point=new pointamountofanimal+1; stone=new stoneamountofanimal+1; int space=distance; for(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.addmouse
52、listener(handlemouse); if(ianimal.length/2) animali.setisleft(false); /else if(i=animal.length/2+1) / /if(animali.equals(animali) /animali.setisleft(true); /else / animali.setisleft(false); / for(int i=0;istone.length;i+) stonei=new stone(); pcenter.add(stonei); stonei.setsize(distance*8/9,18); int
53、w=stonei.getbounds().width; int h=stonei.getbounds().height; stonei.setlocation(pointi.getx()-w/2,pointi.gety(); pointi.setthisstone(stonei); for(int i=0;ianimal.length;i+) animali.setsize(distance*6/7,distance*3/4); int w=animali.getbounds().width; int h=animali.getbounds().height; pcenter.add(anim
54、ali); if(i=2 public void removeanimalandstone() for(int i=0;ipoint.length;i+) if(pointi.getthisanimal()!=null) pcenter.remove(pointi.getthisanimal(); for(int i=0;istone.length;i+) if(pointi.getthisstone()!=null) pcenter.remove(pointi.getthisstone(); pcenter.validate(); pcenter.repaint(); public void
55、 needdoing() init(); handlemouse.initstep(); handlemouse.initspendtime(); handlemouse.setcounttime(true); automoveanimal.setpoint(point); public void actionperformed(actionevent e) if(e.getsource()=onegradeitem) handlemouse.gradefile=fileonegrade; distance=80; removeanimalandstone(); setamountofanim
56、al(6); needdoing(); else if(e.getsource()=twogradeitem) handlemouse.gradefile=filetwograde; distance=70; removeanimalandstone(); setamountofanimal(8); needdoing(); else if(e.getsource()=threegradeitem) handlemouse.gradefile=filethreegrade; distance=60; removeanimalandstone(); setamountofanimal(10);
57、needdoing(); else if(e.getsource()=custom) handlemouse.gradefile=filecustomgrade; customdlg dialog=new customdlg(this,自定義,true); dialog.setvisible(true); amountofanimal=dialog.getamountofanimal(); distance=560/amountofanimal; removeanimalandstone(); setamountofanimal(amountofanimal); needdoing(); el
58、se if(e.getsource()=helpcontent) joptionpane pane=new joptionpane(string.format 1,左右邊的動物分別移動到另一邊, 2,左只能向右方跳,右只能向左跳, 3,跳躍最多不能越過2塊石頭); jbutton btnok; btnok=new jbutton(確定); pane.setoptions(new jbuttonbtnok); btnok.addactionlistener(new actionlistener() public void actionperformed(actionevent e) dlghel
59、plist.dispose(); ); dlghelplist.setvisible(true); else if(e.getsource()=renew) removeanimalandstone(); needdoing(); else if(e.getsource()=autobutton) removeanimalandstone(); needdoing(); handlemouse.setcounttime(false); automoveanimal.setstep(); int x=this.getbounds().x+this.getbounds().width/2; int
60、 y=this.getbounds().y+this.getbounds().height; automoveanimal.setlocation(x,y); automoveanimal.setsize(this.getbounds().width/2,120); 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.g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ?一年級小學生讀的童話故事十篇
- 小學二年級公園游記作文(20篇)
- Tesmilifene-d4-生命科學試劑-MCE
- 《身體的“聯(lián)絡(luò)員”》(教案)五年級上冊科學教科版
- 2024-2025學年新教材高中地理第二單元生態(tài)環(huán)境與國家安全第二節(jié)自然保護區(qū)與生態(tài)安全課后習題含解析魯教版選擇性必修3
- 江蘇專用2025版高考地理一輪復(fù)習課后限時集訓5地球的公轉(zhuǎn)及其地理意義含解析
- 2024年直升機及其動力裝置翻修項目建議書
- 2023屆新高考新教材化學人教版一輪訓練-專項提能特訓(4) 疫情防控中的含氯消毒劑
- 2023屆新高考新教材化學人教版一輪學案-第六章第1講 化學能與熱能
- 鹽城師范學院《中國文化史專題》2021-2022學年第一學期期末試卷
- 生物柴油生產(chǎn)工藝
- 新能源汽車充電樁專屬安裝竣工驗收單模板
- ISO全套制度及業(yè)務(wù)流程之銷售過程管理程序
- 鄧彤小說閱讀和小說教學專題培訓課件
- 區(qū)塊鏈技術(shù)及應(yīng)用PPT完整全套教學課件
- 2022-2023學年甘肅省白銀市統(tǒng)招專升本計算機歷年真題匯總及答案
- 3dmin軟件3dmine教程基礎(chǔ)知識
- 部編道德與法治三年級下冊第8課大家的朋友說課課件
- 保健院關(guān)于成立實驗室生物安全管理委員會通知
- 巖石力學與工程課后習題與思考解答
- 動物局部解剖學后肢演示文稿
評論
0/150
提交評論