版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程設(shè)計(jì)(論文)任務(wù)書</p><p> 軟 件 學(xué) 院 學(xué) 院 軟件+電子商務(wù) 專 業(yè) 2 班 </p><p> 一、課程設(shè)計(jì)(論文)題目 華容道——一個(gè)傳統(tǒng)的智力游戲 </p><p> 二、課程設(shè)計(jì)(論文)工作自 2010 年 12 月 20 日起
2、至 2010 年 12 月 24 日止。</p><p> 三、課程設(shè)計(jì)(論文) 地點(diǎn): 軟 件 學(xué) 院 實(shí) 訓(xùn) 中 心 </p><p> 四、課程設(shè)計(jì)(論文)內(nèi)容要求:</p><p> 1.本課程設(shè)計(jì)的目的</p><p> ?。?)掌握J(rèn)ava語(yǔ)言的程序設(shè)計(jì)方法;
3、</p><p> ?。?)理論聯(lián)系實(shí)際,進(jìn)一步提高學(xué)生的軟件開發(fā)技術(shù);</p><p> (3)培養(yǎng)學(xué)生分析、解決問(wèn)題的能力;</p><p> ?。?)提高學(xué)生實(shí)踐論文撰寫能力。</p><p> 2.課程設(shè)計(jì)的任務(wù)及要求</p><p><b> 1)課程設(shè)計(jì)任務(wù):</b></p
4、><p> 用java語(yǔ)言編寫一個(gè)華容道小游戲</p><p><b> 2)創(chuàng)新要求:</b></p><p> 在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì)</p><p> 3)課程設(shè)計(jì)論文編寫要求</p><p> ?。?)課程設(shè)計(jì)任務(wù)及要求</p><p> ?。?)設(shè)計(jì)
5、思路--工作原理、功能規(guī)劃</p><p> ?。?)詳細(xì)設(shè)計(jì)---數(shù)據(jù)分析、算法思路、類設(shè)計(jì)、功能實(shí)現(xiàn)(含程序流程圖、主要代</p><p> 碼及注釋)、界面等。</p><p> ?。?)運(yùn)行調(diào)試與分析討論---給出運(yùn)行屏幕截圖,分析運(yùn)行結(jié)果,有何改進(jìn)想法等。</p><p> (5)設(shè)計(jì)體會(huì)與小結(jié)---設(shè)計(jì)遇到的問(wèn)題及解決辦法,通
6、過(guò)設(shè)計(jì)學(xué)到了哪些新知識(shí),</p><p> 鞏固了哪些知識(shí),有哪些提高。</p><p> ?。?)參考文獻(xiàn)(必須按標(biāo)準(zhǔn)格式列出,可參考教材后面的參考文獻(xiàn)格式)</p><p> ?。?)報(bào)告按規(guī)定排版打印,要求裝訂平整,否則要求返工;</p><p> ?。?)課設(shè)報(bào)告的裝訂順序如下:封面---任務(wù)書---中文摘要---目錄----正文-
7、--附錄</p><p><b> (代碼及相關(guān)圖片)</b></p><p> 嚴(yán)禁抄襲,如有發(fā)現(xiàn),按不及格處理。</p><p> 4)課程設(shè)計(jì)評(píng)分標(biāo)準(zhǔn): </p><p> (1)學(xué)習(xí)態(tài)度:10分;</p><p> (2)系統(tǒng)設(shè)計(jì):20分;</p><p>
8、; ?。?)編程調(diào)試:20分;</p><p> ?。?)回答問(wèn)題:20分;</p><p> ?。?)論文撰寫:30分。</p><p><b> 5)參考文獻(xiàn):</b></p><p> ?。?)丁振凡. Java語(yǔ)言實(shí)用教程(第2版)[M]. 北京郵電大學(xué)出版社. 2008.1 </p><p
9、> (2)丁振凡. Java語(yǔ)言實(shí)用教程實(shí)驗(yàn)指導(dǎo)(第2版)[M]. 北京郵電大學(xué)出版社. 2008.1</p><p> ?。?)楊樹林等. Java語(yǔ)言最新實(shí)用案例教程(第2版)[M]. 清華大學(xué)出版社. 2010.7</p><p> 6)課程設(shè)計(jì)進(jìn)度安排</p><p> 1.準(zhǔn)備階段(4學(xué)時(shí)):選擇設(shè)計(jì)題目、了解設(shè)計(jì)目的要求、查閱相關(guān)資料<
10、/p><p> 2.程序模塊設(shè)計(jì)分析階段(4學(xué)時(shí)):程序總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)</p><p> 3.代碼編寫調(diào)試階段(8學(xué)時(shí)):程序模塊代碼編寫、調(diào)試、測(cè)試</p><p> 4.撰寫論文階段(4學(xué)時(shí)):總結(jié)課程設(shè)計(jì)任務(wù)和設(shè)計(jì)內(nèi)容,撰寫課程設(shè)計(jì)論文</p><p> 學(xué)生簽名: </p><p
11、> 2010 年 12 月 20 日</p><p> 課程設(shè)計(jì)(論文)評(píng)審意見(jiàn)</p><p> ?。?)學(xué)習(xí)態(tài)度(10分):優(yōu)(?。⒘迹ā。?、中(?。?、一般(?。⒉睿ā。?; </p><p> (2)系統(tǒng)設(shè)計(jì)(20分):優(yōu)( )、良( )、中(?。?、一般(?。⒉睿ā。?; </p><p> ?。?)編程調(diào)試(
12、20分):優(yōu)(?。?、良(?。?、中(?。⒁话悖ā。?、差(?。?;</p><p> ?。?)回答問(wèn)題(20分):優(yōu)(?。?、良(?。⒅校ā。⒁话悖ā。?、差( );</p><p> ?。?)論文撰寫(30分):優(yōu)( )、良(?。⒅校ā。?、一般(?。⒉睿ā。?</p><p> 評(píng)閱人: 職稱: 講師 </p>
13、;<p> 2010 年 12 月 25 日</p><p><b> 中文摘要</b></p><p> 華容道,古老的中國(guó)游戲,以其變化多端、百玩不厭的特點(diǎn)與魔方、獨(dú)立鉆石棋一起被國(guó)外智力專家并稱為“智力游戲界的三個(gè)不可思議”。游戲就是依照“曹瞞兵敗走華容,正與關(guān)公狹路逢,只為當(dāng)初恩義重,放開金鎖走蛟龍”這一故事情節(jié)設(shè)計(jì),受到很多玩家的喜愛(ài)
14、。</p><p> 該程序用Java語(yǔ)言編寫 ,棋盤上有10個(gè)不一樣大小的按鈕,分別代表曹操、張飛、趙云、馬超、黃忠和關(guān)羽,還有四個(gè)兵。棋盤最下方有兩個(gè)空著的小方格,代表曹操逃出的位置,可以實(shí)現(xiàn)通過(guò)鼠標(biāo)或者鍵盤移動(dòng)界面上的按鈕,最終使曹操移動(dòng)到棋盤最下方,代表曹操逃出華容道。</p><p><b> 目 錄</b></p><p>
15、一、課程設(shè)計(jì)任務(wù)及要求1</p><p><b> 二、需求分析2</b></p><p><b> 三、設(shè)計(jì)思路3</b></p><p><b> 四、詳細(xì)設(shè)計(jì)4</b></p><p> 五、運(yùn)行調(diào)試與分析討論14</p><p>
16、; 六、設(shè)計(jì)體會(huì)與小結(jié)16</p><p><b> 七、參考文獻(xiàn)17</b></p><p> 一、課程設(shè)計(jì)任務(wù)及要求</p><p> 1、 本程序主要練習(xí)使用布局管理器設(shè)計(jì)一個(gè)華容道游戲界面,并練習(xí)使用事件監(jiān)聽(tīng)器(鼠標(biāo)事件、鍵盤事件和焦點(diǎn)事件)實(shí)現(xiàn)按鈕的移動(dòng)。</p><p> 2、編寫一個(gè)按鈕的子類
17、,使用該子類創(chuàng)建的對(duì)象代表華容道中的人物。通過(guò)焦點(diǎn)事件控制人物顏色,當(dāng)人物獲得焦點(diǎn)時(shí)顏色為紅色,當(dāng)失去焦點(diǎn)時(shí)顏色為黃色。</p><p> 3、通過(guò)鍵盤事件和鼠標(biāo)事件來(lái)實(shí)現(xiàn)曹操、關(guān)羽等人物的移動(dòng)。當(dāng)人物上發(fā)生鼠標(biāo)事件或鍵盤事件時(shí),如果鼠標(biāo)指針的位置是在人物的下方(也就是組件的下半部分)或按下鍵盤的“↓“鍵,該人物向下移動(dòng)。向左、向右和向上的移動(dòng)原理類似。</p><p> 4、點(diǎn)擊“重
18、新開始”可以使各個(gè)按鈕復(fù)位,重新開始游戲。</p><p><b> 二、需求分析</b></p><p> 要滿足的容道游戲的基本操作:</p><p> 各人物按鈕按相應(yīng)的順序和大小排列,按鈕上標(biāo)注人物名字,界面美觀。</p><p> 通過(guò)焦點(diǎn)事件控制人物按鈕的顏色,得到焦點(diǎn)呈紅色,失去焦點(diǎn)為淡黃色。<
19、;/p><p> 可以通過(guò)鍵盤控制各個(gè)按鈕的移動(dòng):按“↓”鍵,人物按鈕向下移動(dòng)其它方向類似。</p><p> 可以通過(guò)鼠標(biāo)點(diǎn)擊來(lái)控制各個(gè)人物按鈕的移動(dòng):如果點(diǎn)擊的位置在按鈕的上半部分則向上移動(dòng),如果點(diǎn)擊按鈕的下半部分則向下,左右原理類似。</p><p> 有“重新開始按鈕” 點(diǎn)擊重新開始按鈕各個(gè)人物按鈕復(fù)位,能重新開始游戲。</p><p&
20、gt; 小程序能夠自由的縮小,放大,關(guān)閉。</p><p><b> 三、設(shè)計(jì)思路</b></p><p> 1.首先是界面設(shè)計(jì),該界面主要包括十個(gè)人物按鈕(馬、曹操、關(guān)羽等)以及旁邊的四個(gè)邊框按鈕和重新開始按鈕。對(duì)于人物按鈕,創(chuàng)建Button按鈕的子類,在該類中定義按鈕的一些新的屬性和焦點(diǎn)事件監(jiān)聽(tīng)器,如:按鈕的標(biāo)簽名、按鈕的顏色、按鈕的排號(hào)(如這里有十個(gè)人物按
21、鈕,從1排到十,在程序中可以依靠這個(gè)屬性區(qū)分人物按鈕)、按鈕顏色、按鈕獲得或失去焦點(diǎn)事件。同時(shí)在設(shè)計(jì)該界面時(shí)要考慮到各個(gè)按鈕的位置、大小等情況。</p><p> 2.對(duì)界面上的各人物按鈕添加相應(yīng)的相應(yīng)事件</p><p> 焦點(diǎn)事件:通過(guò)焦點(diǎn)事件各個(gè)按鈕的是焦點(diǎn)。</p><p> 鼠標(biāo)事件、鍵盤事件:通過(guò)這兩種事件去完成界面上各人物按鈕的移動(dòng)。</p
22、><p> 對(duì)重新開始按鈕定義動(dòng)作事件(ActionEvent)完成界面初始化功能也 就是各人物按鈕重新歸位。</p><p><b> 四、詳細(xì)設(shè)計(jì)</b></p><p><b> 1.類的設(shè)計(jì)</b></p><p><b> 本程序總共有3個(gè)類</b>
23、</p><p> ?。?)MoveExample 類</p><p> public class MoveExample</p><p><b> {</b></p><p> public static void main(String args[])//定義主方法</p><p>&l
24、t;b> {</b></p><p> new Hua_Rong_Road();//創(chuàng)建一個(gè)Hua_Rong_Road對(duì)象</p><p><b> }</b></p><p><b> }</b></p><p> (2)Person 類 </p><
25、;p> 增加焦點(diǎn)事件監(jiān)視器:addFocusListener(事件監(jiān)聽(tīng)器)</p><p> 當(dāng)組件具有焦點(diǎn)監(jiān)視器后,如果組件從無(wú)輸入焦點(diǎn)變成有輸入焦點(diǎn)或從有輸入焦點(diǎn)到無(wú)輸入焦點(diǎn)都會(huì)觸發(fā)FocusEvent事件。創(chuàng)建監(jiān)視器的類必須要實(shí)現(xiàn)FocusListener接口,該接口有兩個(gè)方法:</p><p> public void focusGained(final FocusEv
26、ent e) //獲得焦點(diǎn)觸發(fā)</p><p> public void focusLost(final FocusEvent e) //失去焦點(diǎn)觸發(fā)</p><p> 當(dāng)組件從無(wú)輸入焦點(diǎn)變成有輸入焦點(diǎn)并觸發(fā)FocusEvent事件時(shí),監(jiān)視器調(diào)用類實(shí)現(xiàn)的接口方法focusGained(FocusEvent e);當(dāng)組件從有輸入焦點(diǎn)變成無(wú)輸入焦點(diǎn)并觸發(fā)FocusEvent事件
27、時(shí),監(jiān)視器調(diào)用類實(shí)現(xiàn)方法focusLost(FocusEvent e)。</p><p> class Person extends Button implements FocusListener</p><p><b> {</b></p><p> int number;</p><p> Color c=n
28、ew Color(255,245,170);//設(shè)置顏色</p><p> //preson 方法</p><p> public Person(final int number,final String s) {</p><p><b> super(s);</b></p><p> setBackground
29、(c);//背景色</p><p> this.number=number;</p><p> c=getBackground();</p><p> addFocusListener(this);//事件焦點(diǎn)監(jiān)聽(tīng)</p><p><b> }</b></p><p> public v
30、oid focusGained(final FocusEvent e) //獲得焦點(diǎn)觸發(fā)</p><p><b> {</b></p><p> setBackground(Color.red);//獲得焦點(diǎn)的顏色</p><p><b> }</b></p><p> public voi
31、d focusLost(final FocusEvent e) //失去焦點(diǎn)觸發(fā)</p><p><b> {</b></p><p> setBackground(c);</p><p><b> }</b></p><p><b> }</b></p&g
32、t;<p> (3)Hua_Rong_Road 類</p><p> 游戲界面主要包括十個(gè)人物按鈕馬、曹操、關(guān)羽等。對(duì)于人物按鈕,在該類中定義按鈕的一些新的屬性和焦點(diǎn)事件監(jiān)聽(tīng)器,如:按鈕的標(biāo)簽名、按鈕的顏色、按鈕的排號(hào)(如這里有十個(gè)人物按鈕,從1排到十,在程序中可以依靠這個(gè)屬性區(qū)分人物按鈕)、按鈕顏色、按鈕獲得或失去焦點(diǎn)事件。同時(shí)在設(shè)計(jì)該界面時(shí)要考慮到各個(gè)按鈕的位置、大小等情況。</p&g
33、t;<p> class Hua_Rong_Road extends Frame implements MouseListener,KeyListener,ActionListener</p><p><b> {</b></p><p> Person person[]=new Person[10];</p><p>
34、 Button left,right,above,below;</p><p> Button restart=new Button("重新開始");//添加重新開始按鈕</p><p> Hua_Rong_Road()方法設(shè)置容器</p><p> public Hua_Rong_Road()</p><p>&l
35、t;b> {</b></p><p> init();//設(shè)置按鈕</p><p> setBounds(100,100,320,360);//組件在容器上的起點(diǎn)和長(zhǎng)寬</p><p> setVisible(true);// 像控件中添加元素</p><p> validate();//刷新</p>
36、<p> addWindowListener(new WindowAdapter()//注冊(cè)窗口事件監(jiān)聽(tīng)</p><p> {public void windowClosing(WindowEvent e)//關(guān)閉</p><p><b> {</b></p><p> System.exit(0);</p>
37、<p><b> }});</b></p><p><b> }</b></p><p> init()方法 設(shè)置10個(gè)按鈕</p><p> public void init()</p><p><b> {</b></p><p&g
38、t; setLayout(null);//設(shè)置布局默認(rèn)</p><p> add(restart);//添加重新開始</p><p> restart.setBounds(100,320,120,25);//按鈕大小</p><p> restart.addActionListener(this);//注冊(cè)監(jiān)聽(tīng)</p><p> S
39、tring name[]={"曹操","關(guān)羽","張飛","劉備","趙云","黃忠","兵 ","兵","兵","兵"};</p><p> for(int k=0;k<name.length
40、;k++)</p><p><b> {</b></p><p> person[k]=new Person(k,name[k]);//為每個(gè)按鈕加上名字</p><p> person[k].addMouseListener(this);//每個(gè)按鈕都注冊(cè)鼠標(biāo)事件監(jiān)聽(tīng) </p><p> /*鼠標(biāo)事
41、件的類型是MouseEvent,即組件觸發(fā)鼠標(biāo)時(shí),MouseEvent類自動(dòng)創(chuàng)建一個(gè)事件對(duì)象。Java分別使用MouseListener接口來(lái)處理鼠標(biāo)事件。MouseListener接口可以處理5種鼠標(biāo)事件:?jiǎn)螕?、按下、釋放、進(jìn)入和退出。</p><p><b> */</b></p><p> person[k].addKeyListener(this);//注
42、冊(cè)鍵盤事件監(jiān)聽(tīng)</p><p> /*當(dāng)按下、釋放或敲擊鍵盤上一個(gè)鍵時(shí)就發(fā)生了鍵盤事件,如:當(dāng)一個(gè)組件處于激活狀態(tài)時(shí)(獲得焦點(diǎn)),敲擊鍵盤上一個(gè)鍵就導(dǎo)致了這個(gè)組件發(fā)生了鍵盤事件。事件源使用addKeyListener方法獲得監(jiān)視器。*/</p><p> /*KeyEvent類的public int getKeycode()方法和public char getKeychar()判斷哪個(gè)
43、鍵被按下、敲擊或釋放。*/</p><p> add(person[k]);//加上人物按鈕</p><p><b> }</b></p><p> //為每一個(gè)人物按鈕設(shè)置位置和大小</p><p> person[0].setBounds(104,54,100,100);</p><p&g
44、t; person[1].setBounds(104,154,100,50);</p><p> person[2].setBounds(54,154,50,100);</p><p> person[3].setBounds(204,154,50,100);</p><p> person[4].setBounds(54,54,50,100);</p
45、><p> person[5].setBounds(204,54,50,100);</p><p> person[6].setBounds(54,254,50,50);</p><p> person[7].setBounds(204,254,50,50);</p><p> person[8].setBounds(104,204,50
46、,50);</p><p> person[9].setBounds(154,204,50,50);</p><p> person[9].requestFocus();//把焦點(diǎn)先設(shè)置在這個(gè)按鈕上 </p><p><b> /*</b></p><p> 其次來(lái)畫出游戲界面的邊框,用定義的left,right
47、,above,below,來(lái)控制大小*/</p><p> left=new Button();</p><p> right=new Button();</p><p> above=new Button();</p><p> below=new Button();</p><p> add(left);
48、</p><p> add(right);</p><p> add(above);</p><p> add(below);</p><p> left.setBounds(49,49,5,260);</p><p> right.setBounds(254,49,5,260);</p>&l
49、t;p> above.setBounds(49,49,210,5);</p><p> below.setBounds(49,304,210,5);</p><p> validate();//刷新</p><p><b> }</b></p><p> 經(jīng)過(guò)以上操作就完成了界面的布局得到的界面如圖一所示
50、:</p><p><b> 圖一:界面布局 </b></p><p> 接下來(lái)就要為各個(gè)按鈕注冊(cè)事件監(jiān)聽(tīng) :鼠標(biāo)事件和鍵盤事件</p><p><b> 鍵盤事件:</b></p><p> KeyEvent為鍵盤事件的類型,KeyListener是事件監(jiān)視器實(shí)現(xiàn)的接口,其中有三種相應(yīng)事件
51、:按鍵、釋放鍵、按下和釋放的組合事件。</p><p> Public void KeyPressed(KeyEvent e)</p><p> Public void KeyTyped(KeyEvent e)</p><p> Public void KeyReleased(KeyEvent e)</p><p><b>
52、 如下:</b></p><p> public void keyTyped(KeyEvent e){}</p><p> public void KeyReleased(KeyEvent e){}</p><p> 因?yàn)橐獙?shí)現(xiàn)人機(jī)交互的效果,所以要響應(yīng)鍵盤事件,這一操作是在函數(shù)public void keyPressed(KeyEvent e)中
53、完成的:首先通過(guò)語(yǔ)句Person man=(Person)e.getSource()獲取事件源,然后通過(guò)語(yǔ)句if(e.getKeyCode()==KeyEvent.VK_DOWN)響應(yīng)用戶按向下光標(biāo)的操作,通過(guò)語(yǔ)句if(e.getKeyCode()==KeyEvent.VK_LEFT)響應(yīng)用戶按向左光標(biāo)的操作,通過(guò)語(yǔ)句if(e.getKeyCode()==KeyEvent. VK_RIGHT)響應(yīng)用戶按向右光標(biāo)的操作,通過(guò)語(yǔ)句if(e.
54、getKeyCode()==KeyEvent. VK_UP)響應(yīng)用戶按向上光標(biāo)的操作。*/</p><p> public void KeyPressed(KeyEvent e)</p><p><b> {</b></p><p> Person man=(Person)e.getSource();//返回事件源</p>
55、<p> /*用KeyEvent類的getKeycode()方法和getKeychar()判斷哪個(gè)鍵被按下、敲擊或釋放。*/</p><p> if(e.getKeyCode()==KeyEvent.VK_DOWN)</p><p><b> {</b></p><p> go(man,below);</p>&
56、lt;p><b> }</b></p><p> if(e.getKeyCode()==KeyEvent.VK_UP)</p><p><b> {</b></p><p> go(man,above);</p><p><b> }</b></p>
57、<p> if(e.getKeyCode()==KeyEvent.VK_LEFT)</p><p><b> {</b></p><p> go(man,left);</p><p><b> }</b></p><p> if(e.getKeyCode()==KeyEven
58、t.VK_RIGHT)</p><p><b> {</b></p><p> go(man,right);</p><p><b> }</b></p><p><b> }</b></p><p><b> 鼠標(biāo)事件:</b
59、></p><p> public void mouseReleased(MouseEvent e){}</p><p> public void mouseEntered(MouseEvent e){}</p><p> public void mouseExited(MouseEvent e){}</p><p> publ
60、ic void mouseClicked(MouseEvent e){}</p><p> //響應(yīng)鼠標(biāo)事件, 通過(guò)鼠標(biāo)點(diǎn)擊的位置判斷是像那個(gè)方向移動(dòng)</p><p> public void mousePressed(MouseEvent e)</p><p><b> {</b></p><p> Perso
61、n man=(Person)e.getSource();</p><p> int x=-1,y=-1;</p><p> x=e.getX();</p><p> y=e.getY();</p><p> int w=man.getBounds().width;</p><p> int h=man.get
62、Bounds().height;</p><p><b> if(y>h/2)</b></p><p><b> {</b></p><p> go(man,below);</p><p><b> }</b></p><p><b&
63、gt; if(y<h/2)</b></p><p><b> {</b></p><p> go(man,above);</p><p><b> }</b></p><p><b> if(x<w/2)</b></p><
64、p><b> {</b></p><p> go(man,left);</p><p><b> }</b></p><p><b> if(x>w/2)</b></p><p><b> {</b></p><p
65、> go(man,right);</p><p><b> }</b></p><p><b> }</b></p><p> 用 go方法控制人物按鈕上下左右移動(dòng):</p><p> public void go(Person man,Button direction)</p
66、><p><b> {</b></p><p> boolean move=true;</p><p> Rectangle manRect=man.getBounds();</p><p> int x=man.getBounds().x;</p><p> int y=man.getBo
67、unds().y;</p><p> if(direction==below)//向各個(gè)方向上的移動(dòng)</p><p><b> y=y+50;</b></p><p> else if(direction==above)</p><p><b> y=y-50;</b></p>
68、<p> else if(direction==left)</p><p><b> x=x-50;</b></p><p> else if(direction==right)</p><p><b> x=x+50;</b></p><p> manRect.setLoca
69、tion(x,y);</p><p> Rectangle directionRect=direction.getBounds();</p><p> for(int k=0;k<10;k++)</p><p><b> {</b></p><p> Rectangle personRect=person[
70、k].getBounds();</p><p> if((manRect.intersects(personRect))&&(man.number!=k))</p><p> //如果覆蓋就不移動(dòng)</p><p><b> {</b></p><p> move=false;</p>
71、<p><b> }</b></p><p><b> }</b></p><p> if(manRect.intersects(directionRect))</p><p><b> {</b></p><p> move=false;</p&g
72、t;<p><b> }</b></p><p> if(move==true)</p><p><b> //移動(dòng)到新的位置</b></p><p><b> {</b></p><p> man.setLocation(x,y);</p>
73、<p><b> }</b></p><p><b> }</b></p><p><b> 發(fā)生操作時(shí)調(diào)用:</b></p><p> public void actionPerformed(ActionEvent e) {</p><p> dis
74、pose();</p><p> new Hua_Rong_Road();</p><p><b> }</b></p><p><b> 流程圖如圖二:</b></p><p><b> 圖二:流程圖</b></p><p> 五、運(yùn)行調(diào)試與
75、分析討論</p><p><b> 運(yùn)行結(jié)果</b></p><p> 運(yùn)行小程序如圖3所示:</p><p><b> 圖三</b></p><p> 點(diǎn)擊按鈕使按鈕獲得焦點(diǎn)如圖四所示:</p><p><b> 圖四</b></p&g
76、t;<p> 3.用鼠標(biāo)或者鍵盤移動(dòng)人物按鈕如圖五: </p><p><b> 圖五</b></p><p> 點(diǎn)擊重新開始按鈕后如圖六所示:</p><p><b> 圖六 </b></p><p><b> 設(shè)計(jì)體會(huì)與小結(jié)</
77、b></p><p> 通過(guò)本程序,我練習(xí)使用布局管理器設(shè)計(jì)了一個(gè)華容道游戲界面,并且練習(xí)使用事件監(jiān)聽(tīng)器監(jiān)聽(tīng)焦點(diǎn)的得失,首先增加焦點(diǎn)事件監(jiān)視器:addFocusListener(事件監(jiān)聽(tīng)器),當(dāng)組件具有焦點(diǎn)監(jiān)視器后,如果組件從無(wú)輸入焦點(diǎn)變成有輸入焦點(diǎn)或從有輸入焦點(diǎn)到無(wú)輸入焦點(diǎn)都會(huì)觸發(fā)FocusEvent事件。創(chuàng)建監(jiān)視器的類必須要實(shí)現(xiàn)FocusListener接口,該接口有兩個(gè)方法:public void
78、focusGained(FocusEvent e) //獲得焦點(diǎn)觸發(fā)</p><p> public void focusLost(FocusEvent e) //失去焦點(diǎn)觸發(fā)</p><p> 練習(xí)了通過(guò)鼠標(biāo)事件實(shí)現(xiàn)按鈕的移動(dòng),鼠標(biāo)事件的類型是MouseEvent,即組件觸發(fā)鼠標(biāo)時(shí),MouseEvent類自動(dòng)創(chuàng)建一個(gè)事件對(duì)象。Java分別使用MouseListener接口
79、與MouseMotionListener接口來(lái)處理鼠標(biāo)事件。MouseListener接口可以處理5種鼠標(biāo)事件:?jiǎn)螕?、按下、釋放、進(jìn)入和退出。MouseMotionListener接口可以處理2種鼠標(biāo)事件:拖動(dòng)、移動(dòng)。</p><p> 練習(xí)了通過(guò)鍵盤事件實(shí)現(xiàn)按鈕的移動(dòng),當(dāng)按下、釋放或敲擊鍵盤上一個(gè)鍵時(shí)就發(fā)生了鍵盤事件,當(dāng)一個(gè)組件處于激活狀態(tài)時(shí)(獲得焦點(diǎn)),敲擊鍵盤上一個(gè)鍵就導(dǎo)致了這個(gè)組件發(fā)生了鍵盤事件。事件源
80、使用addKeyListener方法獲得監(jiān)視器。KeyEvent為鍵盤事件的類型,KeyListener是事件監(jiān)視器實(shí)現(xiàn)的接口,其中有三種相應(yīng)事件:按鍵、釋放鍵、按下和釋放的組合事件。</p><p> Public void KeyPressed(KeyEvent e)</p><p> Public void KeyTyped(KeyEvent e)</p><
81、p> Public void KeyReleased(KeyEvent e)</p><p> 用KeyEvent類的public int getKeycode()方法和public char getKeychar()判斷哪個(gè)鍵被按下、敲擊或釋放。</p><p><b> 七、參考文獻(xiàn)</b></p><p> 作者:丁振凡 .
82、 參考書籍名稱[M]:《java語(yǔ)言實(shí)用教程》. 出版地: 北京郵電大學(xué)出版社.出版年限:2007.</p><p> 作者:耿祥義 . 參考書籍名稱[M]:《 Java基礎(chǔ)教程》 . 出版地: 清華大學(xué)出版社.出版年限:2009.</p><p><b> 附錄(源碼清單)</b></p><p> import java.awt.*;
83、</p><p> import java.awt.event.*;</p><p> public class MoveExample</p><p><b> {</b></p><p> public static void main(String args[])</p><p>&
84、lt;b> {</b></p><p> new Hua_Rong_Road();</p><p><b> }</b></p><p><b> }</b></p><p> class Person extends Button implements FocusLis
85、tener</p><p><b> {</b></p><p> int number;</p><p> Color c = new Color(255,245,170);</p><p> Person(int number,String s)</p><p><b>
86、{</b></p><p><b> super(s);</b></p><p> setBackground(c);</p><p> this.number = number;</p><p> c = getBackground();</p><p> addFocus
87、Listener(this);</p><p><b> }</b></p><p> public void focusGained(FocusEvent e)</p><p><b> {</b></p><p> setBackground(Color.red);</p>
88、<p><b> }</b></p><p> public void focusLost(FocusEvent e)</p><p><b> {</b></p><p> setBackground(c);</p><p><b> }</b><
89、/p><p><b> }</b></p><p> class Hua_Rong_Road extends Frame implements MouseListener,KeyListener,ActionListener</p><p><b> {</b></p><p> Person
90、person[] = new Person[10];</p><p> Button left,right,above,below;</p><p> Button restart = new Button("重新開始");</p><p> public Hua_Rong_Road() <
91、/p><p><b> {</b></p><p> init(); </p><p> setBounds(100,100,320,360);</p><p> setVisible(true);</p><p&g
92、t; validate();</p><p> addWindowListener( new WindowAdapter()</p><p><b> {</b></p><p> public void windowClosing(WindowEvent e)</p><p><b> {</
93、b></p><p> System.exit(0);</p><p><b> }</b></p><p><b> }</b></p><p><b> );</b></p><p><b> }</b><
94、/p><p> public void init()</p><p><b> {</b></p><p> setLayout(null);</p><p> add(restart);</p><p> restart.setBounds(100,320,120,25);</p&g
95、t;<p> restart.addActionListener(this);</p><p> String name[] = {"曹操","關(guān)羽","張飛","劉備","趙云","黃忠","兵","兵","兵",&
96、quot;兵"};</p><p> for(int k = 0;k<name.length;k++)</p><p><b> {</b></p><p> person[k] = new Person(k,name[k]);</p><p> person[k].addMouseListene
97、r(this);</p><p> person[k].addKeyListener(this);</p><p> add(person[k]);</p><p><b> }</b></p><p> person[0].setBounds(104,54,100,100);</p><p&
98、gt; person[1].setBounds(104,154,100,50);</p><p> person[2].setBounds(54,154,50,100);</p><p> person[3].setBounds(204,154,50,100);</p><p> person[4].setBounds(54,54,50,100);</
99、p><p> person[5].setBounds(204,54,50,100);</p><p> person[6].setBounds(54,254,50,50);</p><p> person[7].setBounds(204,254,50,50);</p><p> person[8].setBounds(104,204,5
100、0,50);</p><p> person[9].setBounds(154,204,50,50);</p><p> person[9].requestFocus();</p><p> left = new Button();</p><p> right = new Button();</p><p>
101、 above = new Button();</p><p> below = new Button();</p><p> add(left);</p><p> add(right);</p><p> add(above);</p><p> add(below);</p><p&
102、gt; left.setBounds(49,49,5,260);</p><p> right.setBounds(254,49,5,260);</p><p> above.setBounds(49,49,210,5);</p><p> below.setBounds(49,304,210,5);</p><p> valida
103、te();</p><p><b> }</b></p><p> public void keyTyped(KeyEvent e){}</p><p> public void keyReleased(KeyEvent e){}</p><p> public void keyPressed(KeyEvent
104、e)</p><p><b> {</b></p><p> Person man = (Person)e.getSource();</p><p> if(e.getKeyCode()==KeyEvent.VK_DOWN)</p><p><b> {</b></p><
105、;p> go(man,below); </p><p><b> }</b></p><p> if(e.getKeyCode()==KeyEvent.VK_UP)</p><p><b> {</b></p><p> go(man
106、,above);</p><p><b> }</b></p><p> if(e.getKeyCode()==KeyEvent.VK_LEFT)</p><p><b> {</b></p><p> go(man,left);</p><p><b>
107、 }</b></p><p> if(e.getKeyCode()==KeyEvent.VK_RIGHT)</p><p><b> {</b></p><p> go(man,right);</p><p><b> }</b></p><p><
108、b> }</b></p><p> public void mousePressed(MouseEvent e)</p><p><b> {</b></p><p> Person man = (Person)e.getSource();</p><p> int x = -1,y = -1
109、;</p><p> x = e.getX();</p><p> y = e.getY();</p><p> int w = man.getBounds().width;</p><p> int h = man.getBounds().height;</p><p><b> if(y>
110、h/2)</b></p><p><b> {</b></p><p> go(man,below);</p><p><b> }</b></p><p><b> if(y<h/2)</b></p><p><b>
111、; {</b></p><p> go(man,above);</p><p><b> }</b></p><p><b> if(x<w/2)</b></p><p><b> {</b></p><p> go(man
112、,left);</p><p><b> }</b></p><p><b> if(x>w/2)</b></p><p><b> {</b></p><p> go(man,right);</p><p><b> }<
113、;/b></p><p><b> }</b></p><p> public void mouseReleased(MouseEvent e){}</p><p> public void mouseEntered(MouseEvent e){}</p><p> public void mouseExi
114、ted(MouseEvent e){}</p><p> public void mouseClicked(MouseEvent e){}</p><p> public void go(Person man,Button direction)</p><p><b> {</b></p><p> boolea
115、n move = true;</p><p> Rectangle manRect = man.getBounds(); </p><p> int x = man.getBounds().x; </p><p> int y = man.getBounds().y;</p>
116、;<p> if(direction==below)</p><p><b> {</b></p><p><b> y = y+50;</b></p><p><b> }</b></p><p> else if(direction==above)&
117、lt;/p><p><b> {</b></p><p><b> y = y-50;</b></p><p><b> }</b></p><p> else if(direction==left)</p><p><b> {<
118、/b></p><p><b> x = x-50;</b></p><p><b> }</b></p><p> else if(direction==right)</p><p><b> {</b></p><p><b>
119、; x = x+50;</b></p><p><b> }</b></p><p> manRect.setLocation(x,y);</p><p> Rectangle directionRect = direction.getBounds();</p><p> for(int k = 0
120、;k<10;k++)</p><p><b> {</b></p><p> Rectangle personRect = person[k].getBounds();</p><p> if((manRect.intersects(personRect))&&(man.number!=k))</p>
121、<p><b> {</b></p><p> move = false;</p><p><b> }</b></p><p><b> }</b></p><p> if(manRect.intersects(directionRect))</p&
122、gt;<p><b> {</b></p><p> move = false;</p><p><b> }</b></p><p> if(move==true)</p><p><b> {</b></p><p> ma
123、n.setLocation(x,y);</p><p><b> }</b></p><p><b> }</b></p><p> public void actionPerformed(ActionEvent e)</p><p><b> {</b></p&
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)報(bào)告java實(shí)現(xiàn)華容道智力游戲 有源碼
- 華容道活動(dòng)教案
- 華容道(帶圖解)
- 華容道解法附圖
- 華容道玩法詳解
- 華容道活動(dòng)教案
- 畢業(yè)論文---基于j2me手機(jī)華容道游戲的設(shè)計(jì)與實(shí)現(xiàn)
- 課程設(shè)計(jì)報(bào)告----java實(shí)現(xiàn)游戲連連看
- java課程設(shè)計(jì)--掃雷游戲報(bào)告
- java火柴游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)-猜數(shù)游戲課程設(shè)計(jì)報(bào)告
- 華容道24局最佳解法
- java課程設(shè)計(jì)-蜘蛛紙牌游戲設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告--- 蜘蛛紙牌游戲
- java課程設(shè)計(jì)報(bào)告-掃雷小游戲
- java掃雷游戲課程設(shè)計(jì)
- java_課程設(shè)計(jì)報(bào)告_拼圖游戲
- java課程設(shè)計(jì)--手機(jī)游戲
- java課程設(shè)計(jì)-掃雷游戲
- java課程設(shè)計(jì)報(bào)告---java實(shí)現(xiàn)畫筆系統(tǒng)
評(píng)論
0/150
提交評(píng)論