【課程設(shè)計(jì)報(bào)告】JAVA實(shí)現(xiàn)華容道智力游戲 有源碼(word版)

上傳人:1888****888 文檔編號(hào):39008313 上傳時(shí)間:2021-11-09 格式:DOC 頁(yè)數(shù):28 大?。?24KB
收藏 版權(quán)申訴 舉報(bào) 下載
【課程設(shè)計(jì)報(bào)告】JAVA實(shí)現(xiàn)華容道智力游戲 有源碼(word版)_第1頁(yè)
第1頁(yè) / 共28頁(yè)
【課程設(shè)計(jì)報(bào)告】JAVA實(shí)現(xiàn)華容道智力游戲 有源碼(word版)_第2頁(yè)
第2頁(yè) / 共28頁(yè)
【課程設(shè)計(jì)報(bào)告】JAVA實(shí)現(xiàn)華容道智力游戲 有源碼(word版)_第3頁(yè)
第3頁(yè) / 共28頁(yè)

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《【課程設(shè)計(jì)報(bào)告】JAVA實(shí)現(xiàn)華容道智力游戲 有源碼(word版)》由會(huì)員分享,可在線閱讀,更多相關(guān)《【課程設(shè)計(jì)報(bào)告】JAVA實(shí)現(xiàn)華容道智力游戲 有源碼(word版)(28頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、更多計(jì)算機(jī)類(lèi)課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)、論文請(qǐng)?jiān)L問(wèn): 課程設(shè)計(jì)(論文)任務(wù)書(shū) 軟 件 學(xué) 院 學(xué)  院   軟件+電子商務(wù) 專(zhuān)  業(yè) 2  班 一、課程設(shè)計(jì)(論文)題目  華容道——一個(gè)傳統(tǒng)的智力游戲 二、課程設(shè)計(jì)(論文)工作自 2010 年 12 月 20 日起至 2010 年 12 月 24 日止。 三、課程設(shè)計(jì)(論文) 地點(diǎn): 軟 件 學(xué) 院 實(shí) 訓(xùn) 中 心 四、課程設(shè)計(jì)(論文)內(nèi)容要求: 1.本課程設(shè)計(jì)的目的 (1)

2、掌握J(rèn)ava語(yǔ)言的程序設(shè)計(jì)方法; (2)理論聯(lián)系實(shí)際,進(jìn)一步提高學(xué)生的軟件開(kāi)發(fā)技術(shù); (3)培養(yǎng)學(xué)生分析、解決問(wèn)題的能力; (4)提高學(xué)生實(shí)踐論文撰寫(xiě)能力。 2.課程設(shè)計(jì)的任務(wù)及要求 1)課程設(shè)計(jì)任務(wù): 用java語(yǔ)言編寫(xiě)一個(gè)華容道小游戲 2)創(chuàng)新要求: 在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì) 3)課程設(shè)計(jì)論文編寫(xiě)要求 (1)課程設(shè)計(jì)任務(wù)及要求 (2)設(shè)計(jì)思路--工作原理、功能規(guī)劃 (3)詳細(xì)設(shè)計(jì)---數(shù)據(jù)分析、算法思路、類(lèi)設(shè)計(jì)、功能實(shí)現(xiàn)(含程序流程圖、主要代 碼及注釋?zhuān)⒔缑娴取? (4)運(yùn)行調(diào)試與分析討論---給出運(yùn)行屏幕截圖,分析運(yùn)行結(jié)果,有何改進(jìn)想法等。

3、 (5)設(shè)計(jì)體會(huì)與小結(jié)---設(shè)計(jì)遇到的問(wèn)題及解決辦法,通過(guò)設(shè)計(jì)學(xué)到了哪些新知識(shí), 鞏固了哪些知識(shí),有哪些提高。 (6)參考文獻(xiàn)(必須按標(biāo)準(zhǔn)格式列出,可參考教材后面的參考文獻(xiàn)格式) (7)報(bào)告按規(guī)定排版打印,要求裝訂平整,否則要求返工; (8)課設(shè)報(bào)告的裝訂順序如下:封面---任務(wù)書(shū)---中文摘要---目錄----正文---附錄 (代碼及相關(guān)圖片) (9) 嚴(yán)禁抄襲,如有發(fā)現(xiàn),按不及格處理。 4)課程設(shè)計(jì)評(píng)分標(biāo)準(zhǔn): (1)學(xué)習(xí)態(tài)度:10分; (2)系統(tǒng)設(shè)計(jì):20分; (3)編程調(diào)試:20分; (4)回答問(wèn)題:20分; (5)論文撰寫(xiě):30分。 5)參考文獻(xiàn):

4、 (1)丁振凡. Java語(yǔ)言實(shí)用教程(第2版)[M]. 北京郵電大學(xué)出版社. 2008.1 (2)丁振凡. Java語(yǔ)言實(shí)用教程實(shí)驗(yàn)指導(dǎo)(第2版)[M]. 北京郵電大學(xué)出版社. 2008.1 (3)楊樹(shù)林等. Java語(yǔ)言最新實(shí)用案例教程(第2版)[M]. 清華大學(xué)出版社. 2010.7 6)課程設(shè)計(jì)進(jìn)度安排 1.準(zhǔn)備階段(4學(xué)時(shí)):選擇設(shè)計(jì)題目、了解設(shè)計(jì)目的要求、查閱相關(guān)資料 2.程序模塊設(shè)計(jì)分析階段(4學(xué)時(shí)):程序總體設(shè)計(jì)、詳細(xì)設(shè)計(jì) 3.代碼編寫(xiě)調(diào)試階段(8學(xué)時(shí)):程序模塊代碼編寫(xiě)、調(diào)試、測(cè)試 4.撰寫(xiě)論文階段(4學(xué)時(shí)):總結(jié)課程設(shè)計(jì)任務(wù)和設(shè)計(jì)內(nèi)容,撰寫(xiě)課程設(shè)計(jì)論文

5、 學(xué)生簽名: 2010 年 12 月 20 日 課程設(shè)計(jì)(論文)評(píng)審意見(jiàn) (1)學(xué)習(xí)態(tài)度(10分):優(yōu)(?。?、良(?。⒅校ā。?、一般(?。?、差(?。?; (2)系統(tǒng)設(shè)計(jì)(20分):優(yōu)( )、良(?。?、中(?。?、一般( )、差( ); (3)編程調(diào)試(20分):優(yōu)(?。?、良( )、中(?。?、一般(?。?、差(?。? (4)回答問(wèn)題(20分):優(yōu)(?。?、良(?。?、中( )、一般(?。⒉睿ā。? (5)論文撰寫(xiě)(30分):優(yōu)(?。⒘迹ā。?、中(?。?、一般(?。?、差(?。?; 評(píng)閱人:     職稱(chēng): 講師

6、 2010 年 12 月 25 日 中文摘要 華容道,古老的中國(guó)游戲,以其變化多端、百玩不厭的特點(diǎn)與魔方、獨(dú)立鉆石棋一起被國(guó)外智力專(zhuān)家并稱(chēng)為“智力游戲界的三個(gè)不可思議”。游戲就是依照“曹瞞兵敗走華容,正與關(guān)公狹路逢,只為當(dāng)初恩義重,放開(kāi)金鎖走蛟龍”這一故事情節(jié)設(shè)計(jì),受到很多玩家的喜愛(ài)。 該程序用Java語(yǔ)言編寫(xiě) ,棋盤(pán)上有10個(gè)不一樣大小的按鈕,分別代表曹操、張飛、趙云、馬超、黃忠和關(guān)羽,還有四個(gè)兵。棋盤(pán)最下方有兩個(gè)空著的小方格,代表曹操逃出的位置,可以實(shí)現(xiàn)通過(guò)鼠標(biāo)或者鍵盤(pán)移動(dòng)界面上的按鈕,最終使曹操移動(dòng)到棋盤(pán)最下方,代表曹操逃出華容道。

7、 目 錄 一、課程設(shè)計(jì)任務(wù)及要求 1 二、需求分析 2 三、設(shè)計(jì)思路 3 四、詳細(xì)設(shè)計(jì) 4 五、運(yùn)行調(diào)試與分析討論 14 六、設(shè)計(jì)體會(huì)與小結(jié) 16 七、參考文獻(xiàn) 17 一、課程設(shè)計(jì)任務(wù)及要求 1、 本程序主要練習(xí)使用布局管理器設(shè)計(jì)一個(gè)華容道游戲界面,并練習(xí)使用事件監(jiān)聽(tīng)器(鼠標(biāo)事件、鍵盤(pán)事件和焦點(diǎn)事件)實(shí)現(xiàn)按鈕的移動(dòng)。 2、編寫(xiě)一個(gè)按鈕的子類(lèi),使用該子類(lèi)創(chuàng)建的對(duì)象代表華容道中的人物。通過(guò)焦點(diǎn)事件控制人物顏色,當(dāng)人物獲得焦點(diǎn)時(shí)顏色為紅色,當(dāng)失去焦點(diǎn)時(shí)顏色為黃色。 3、通過(guò)鍵盤(pán)事件和鼠標(biāo)事件來(lái)實(shí)現(xiàn)曹操、關(guān)羽等人物的移動(dòng)。當(dāng)人

8、物上發(fā)生鼠標(biāo)事件或鍵盤(pán)事件時(shí),如果鼠標(biāo)指針的位置是在人物的下方(也就是組件的下半部分)或按下鍵盤(pán)的“↓“鍵,該人物向下移動(dòng)。向左、向右和向上的移動(dòng)原理類(lèi)似。 4、點(diǎn)擊“重新開(kāi)始”可以使各個(gè)按鈕復(fù)位,重新開(kāi)始游戲。 二、需求分析 要滿(mǎn)足的容道游戲的基本操作: 1. 各人物按鈕按相應(yīng)的順序和大小排列,按鈕上標(biāo)注人物名字,界面美觀。 2. 通過(guò)焦點(diǎn)事件控制人物按鈕的顏色,得到焦點(diǎn)呈紅色,失去焦點(diǎn)為淡黃色。 3. 可以通過(guò)鍵盤(pán)控制各個(gè)按鈕的移動(dòng):按“↓”鍵,人物按鈕向下移動(dòng)其它方向類(lèi)似。 4. 可以通過(guò)鼠標(biāo)點(diǎn)擊來(lái)控制各個(gè)人物按鈕的移動(dòng):如果點(diǎn)擊的位置在按鈕的上半部分則向上

9、移動(dòng),如果點(diǎn)擊按鈕的下半部分則向下,左右原理類(lèi)似。 5. 有“重新開(kāi)始按鈕” 點(diǎn)擊重新開(kāi)始按鈕各個(gè)人物按鈕復(fù)位,能重新開(kāi)始游戲。 6. 小程序能夠自由的縮小,放大,關(guān)閉。 三、設(shè)計(jì)思路 1.首先是界面設(shè)計(jì),該界面主要包括十個(gè)人物按鈕(馬、曹操、關(guān)羽等)以及旁邊的四個(gè)邊框按鈕和重新開(kāi)始按鈕。對(duì)于人物按鈕,創(chuàng)建Button按鈕的子類(lèi),在該類(lèi)中定義按鈕的一些新的屬性和焦點(diǎn)事件監(jiān)聽(tīng)器,如:按鈕的標(biāo)簽名、按鈕的顏色、按鈕的排號(hào)(如這里有十個(gè)人物按鈕,從1排到十,在程序中可以依靠這個(gè)屬性區(qū)分人物按鈕)、按鈕顏色、按鈕獲得或失去焦點(diǎn)事件。同時(shí)在設(shè)計(jì)該界面時(shí)要考慮到各個(gè)按鈕的位置、大小

10、等情況。 2.對(duì)界面上的各人物按鈕添加相應(yīng)的相應(yīng)事件 焦點(diǎn)事件:通過(guò)焦點(diǎn)事件各個(gè)按鈕的是焦點(diǎn)。 鼠標(biāo)事件、鍵盤(pán)事件:通過(guò)這兩種事件去完成界面上各人物按鈕的移動(dòng)。 對(duì)重新開(kāi)始按鈕定義動(dòng)作事件(ActionEvent)完成界面初始化功能也 就是各人物按鈕重新歸位。 四、詳細(xì)設(shè)計(jì) 1.類(lèi)的設(shè)計(jì) 本程序總共有3個(gè)類(lèi) (1)MoveExample 類(lèi) public class MoveExample { public static void main(String args[])//定義主方法 { new Hua_Rong_Road();//創(chuàng)建

11、一個(gè)Hua_Rong_Road對(duì)象 } } (2)Person 類(lèi) 增加焦點(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)視器的類(lèi)必須要實(shí)現(xiàn)FocusListener接口,該接口有兩個(gè)方法: public void focusGained(final FocusEvent e) //獲得焦點(diǎn)觸發(fā) public void focusLost(final FocusEvent e) //失去焦點(diǎn)觸發(fā) 當(dāng)組件從無(wú)輸入焦點(diǎn)變成有輸

12、入焦點(diǎn)并觸發(fā)FocusEvent事件時(shí),監(jiān)視器調(diào)用類(lèi)實(shí)現(xiàn)的接口方法focusGained(FocusEvent e);當(dāng)組件從有輸入焦點(diǎn)變成無(wú)輸入焦點(diǎn)并觸發(fā)FocusEvent事件時(shí),監(jiān)視器調(diào)用類(lèi)實(shí)現(xiàn)方法focusLost(FocusEvent e)。 class Person extends Button implements FocusListener { int number; Color c=new Color(255,245,170);//設(shè)置顏色 //preson 方法 public Person(final int number,final Stri

13、ng s) { super(s); setBackground(c);//背景色 this.number=number; c=getBackground(); addFocusListener(this);//事件焦點(diǎn)監(jiān)聽(tīng) } public void focusGained(final FocusEvent e) //獲得焦點(diǎn)觸發(fā) { setBackground(Color.red);//獲得焦點(diǎn)的顏色 } public void focusLost(final FocusEvent e) //失去焦點(diǎn)觸發(fā) { setBa

14、ckground(c); } } (3)Hua_Rong_Road 類(lèi) 游戲界面主要包括十個(gè)人物按鈕馬、曹操、關(guān)羽等。對(duì)于人物按鈕,在該類(lèi)中定義按鈕的一些新的屬性和焦點(diǎn)事件監(jiān)聽(tīng)器,如:按鈕的標(biāo)簽名、按鈕的顏色、按鈕的排號(hào)(如這里有十個(gè)人物按鈕,從1排到十,在程序中可以依靠這個(gè)屬性區(qū)分人物按鈕)、按鈕顏色、按鈕獲得或失去焦點(diǎn)事件。同時(shí)在設(shè)計(jì)該界面時(shí)要考慮到各個(gè)按鈕的位置、大小等情況。 class Hua_Rong_Road extends Frame implements MouseListener,KeyListener,ActionListener {

15、 Person person[]=new Person[10]; Button left,right,above,below; Button restart=new Button("重新開(kāi)始");//添加重新開(kāi)始按鈕 Hua_Rong_Road()方法設(shè)置容器 public Hua_Rong_Road() { init();//設(shè)置按鈕 setBounds(100,100,320,360);//組件在容器上的起點(diǎn)和長(zhǎng)寬 setVisible(true);// 像控件中添加元素 validate();//刷新

16、 addWindowListener(new WindowAdapter()//注冊(cè)窗口事件監(jiān)聽(tīng) {public void windowClosing(WindowEvent e)//關(guān)閉 { System.exit(0); }}); } init()方法 設(shè)置10個(gè)按鈕 public void init() { setLayout(null);//設(shè)置布局默認(rèn) add(restart);//添加重新開(kāi)始 restart.setBounds(100,320,120,25);//按鈕大小 res

17、tart.addActionListener(this);//注冊(cè)監(jiān)聽(tīng) String name[]={"曹操","關(guān)羽","張飛","劉備","趙云","黃忠","兵 ","兵","兵","兵"}; for(int k=0;k

18、nt類(lèi)自動(dòng)創(chuàng)建一個(gè)事件對(duì)象。Java分別使用MouseListener接口來(lái)處理鼠標(biāo)事件。MouseListener接口可以處理5種鼠標(biāo)事件:?jiǎn)螕?、按下、釋放、進(jìn)入和退出。 */ person[k].addKeyListener(this);//注冊(cè)鍵盤(pán)事件監(jiān)聽(tīng) /*當(dāng)按下、釋放或敲擊鍵盤(pán)上一個(gè)鍵時(shí)就發(fā)生了鍵盤(pán)事件,如:當(dāng)一個(gè)組件處于激活狀態(tài)時(shí)(獲得焦點(diǎn)),敲擊鍵盤(pán)上一個(gè)鍵就導(dǎo)致了這個(gè)組件發(fā)生了鍵盤(pán)事件。事件源使用addKeyListener方法獲得監(jiān)視器。*/ /*KeyEvent類(lèi)的public int getKeycode()方法和public char getKeychar()

19、判斷哪個(gè)鍵被按下、敲擊或釋放。*/ add(person[k]);//加上人物按鈕 } //為每一個(gè)人物按鈕設(shè)置位置和大小 person[0].setBounds(104,54,100,100); person[1].setBounds(104,154,100,50); person[2].setBounds(54,154,50,100); person[3].setBounds(204,154,50,100); person[4].setBounds(54,54,50,100); person[5].setBounds(

20、204,54,50,100); person[6].setBounds(54,254,50,50); person[7].setBounds(204,254,50,50); person[8].setBounds(104,204,50,50); person[9].setBounds(154,204,50,50); person[9].requestFocus();//把焦點(diǎn)先設(shè)置在這個(gè)按鈕上 /* 其次來(lái)畫(huà)出游戲界面的邊框,用定義的left,right,above,below,來(lái)控制大小*/ left=new Button();

21、 right=new Button(); above=new Button(); below=new Button(); add(left); add(right); add(above); add(below); left.setBounds(49,49,5,260); right.setBounds(254,49,5,260); above.setBounds(49,49,210,5); below.setBounds(49,304,210,5); validate();//刷新 } 經(jīng)過(guò)以上

22、操作就完成了界面的布局得到的界面如圖一所示: 圖一:界面布局 接下來(lái)就要為各個(gè)按鈕注冊(cè)事件監(jiān)聽(tīng) :鼠標(biāo)事件和鍵盤(pán)事件 鍵盤(pán)事件: KeyEvent為鍵盤(pán)事件的類(lèi)型,KeyListener是事件監(jiān)視器實(shí)現(xiàn)的接口,其中有三種相應(yīng)事件:按鍵、釋放鍵、按下和釋放的組合事件。 Public void KeyPressed(KeyEvent e) Public void KeyTyped(KeyEvent e) Public void KeyReleased(KeyEvent e) 如下: public void keyTyped(K

23、eyEvent e){} public void KeyReleased(KeyEvent e){} 因?yàn)橐獙?shí)現(xiàn)人機(jī)交互的效果,所以要響應(yīng)鍵盤(pán)事件,這一操作是在函數(shù)public void keyPressed(KeyEvent e)中完成的:首先通過(guò)語(yǔ)句Person man=(Person)e.getSource()獲取事件源,然后通過(guò)語(yǔ)句if(e.getKeyCode()==KeyEvent.VK_DOWN)響應(yīng)用戶(hù)按向下光標(biāo)的操作,通過(guò)語(yǔ)句if(e.getKeyCode()==KeyEvent.VK_LEFT)響應(yīng)用戶(hù)按向左光標(biāo)的操作,通過(guò)語(yǔ)句if(e.getKey

24、Code()==KeyEvent. VK_RIGHT)響應(yīng)用戶(hù)按向右光標(biāo)的操作,通過(guò)語(yǔ)句if(e.getKeyCode()==KeyEvent. VK_UP)響應(yīng)用戶(hù)按向上光標(biāo)的操作。*/ public void KeyPressed(KeyEvent e) { Person man=(Person)e.getSource();//返回事件源 /*用KeyEvent類(lèi)的getKeycode()方法和getKeychar()判斷哪個(gè)鍵被按下、敲擊或釋放。*/ if(e.getKeyCode()==KeyEvent.VK_DOWN) {

25、go(man,below); } if(e.getKeyCode()==KeyEvent.VK_UP) { go(man,above); } if(e.getKeyCode()==KeyEvent.VK_LEFT) { go(man,left); } if(e.getKeyCode()==KeyEvent.VK_RIGHT) { go(man,right); } } 鼠標(biāo)事件: public void mouseReleased(MouseEvent e)

26、{} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){} //響應(yīng)鼠標(biāo)事件, 通過(guò)鼠標(biāo)點(diǎn)擊的位置判斷是像那個(gè)方向移動(dòng) public void mousePressed(MouseEvent e) { Person man=(Person)e.getSource(); int x=-1,y=-1; x=e.getX(); y=e.g

27、etY(); int w=man.getBounds().width; int h=man.getBounds().height; if(y>h/2) { go(man,below); } if(yw/2) { go(man,right); } } 用 g

28、o方法控制人物按鈕上下左右移動(dòng):鼠標(biāo)點(diǎn)擊想要移動(dòng)的人物,使用鍵盤(pán)上,下,左,右來(lái)控制人物的移動(dòng)。(需要鼠標(biāo)以及鍵盤(pán)的響應(yīng))。 通過(guò)向上的響應(yīng)來(lái)使得人物向上走,并判斷是否與其他人物重疊,若重疊則返回上單元,若不重疊的繼續(xù)。 通過(guò)向上的響應(yīng)來(lái)使得人物向下走,并判斷是否與其他人物重疊,若重疊則返回上單元,若不重疊的繼續(xù)。 通過(guò)向上的響應(yīng)來(lái)使得人物向左走,并判斷是否與其他人物重疊,若重疊則返回上單元,若不重疊的繼續(xù)。 當(dāng)前人物向上與其他人物不重疊,則向上前進(jìn)五十單元。 當(dāng)前人物向下與其他人物不重疊,則向下前進(jìn)五十單元。 當(dāng)前人物向左與其他人物不重疊,則向左前進(jìn)五十單元。

29、通過(guò)向上的響應(yīng)來(lái)使得人物向右走,并判斷是否與其他人物重疊,若重疊則返回上單元,若不重疊的繼續(xù)。 當(dāng)前人物向右與其他人物不重疊,則向右前進(jìn)五十單元。 public void go(Person man,Button direction) { boolean move=true; Rectangle manRect=man.getBounds(); int x=man.getBounds().x; int y=man.getBounds().y; if(direction==below)//向各個(gè)方向上的移動(dòng) y=y+50

30、; else if(direction==above) y=y-50; else if(direction==left) x=x-50; else if(direction==right) x=x+50; manRect.setLocation(x,y); Rectangle directionRect=direction.getBounds(); for(int k=0;k<10;k++) { Rectangle personRect=person[k].getBounds(); if((man

31、Rect.intersects(personRect))&&(man.number!=k)) //如果覆蓋就不移動(dòng) { move=false; } } if(manRect.intersects(directionRect)) { move=false; } if(move==true) //移動(dòng)到新的位置 { man.setLocation(x,y); } } 發(fā)生操作時(shí)調(diào)用: public void actionPerformed(Ac

32、tionEvent e) { dispose(); new Hua_Rong_Road(); } 2. 流程圖如圖二: 圖二:流程圖 五、運(yùn)行調(diào)試與分析討論 運(yùn)行結(jié)果 1. 運(yùn)行小程序如圖3所示: 圖三 2. 點(diǎn)擊按鈕使按鈕獲得焦點(diǎn)如圖四所示: 圖四 3.用鼠標(biāo)或者鍵盤(pán)移動(dòng)人物按鈕如圖五: 圖五

33、 4. 點(diǎn)擊重新開(kāi)始按鈕后如圖六所示: 圖六 第 16 頁(yè) 6、 設(shè)計(jì)體會(huì)與小結(jié) 通過(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)視器的類(lèi)必須要實(shí)現(xiàn)FocusListener接口,該接口

34、有兩個(gè)方法:public void focusGained(FocusEvent e) //獲得焦點(diǎn)觸發(fā) public void focusLost(FocusEvent e) //失去焦點(diǎn)觸發(fā) 練習(xí)了通過(guò)鼠標(biāo)事件實(shí)現(xiàn)按鈕的移動(dòng),鼠標(biāo)事件的類(lèi)型是MouseEvent,即組件觸發(fā)鼠標(biāo)時(shí),MouseEvent類(lèi)自動(dòng)創(chuàng)建一個(gè)事件對(duì)象。Java分別使用MouseListener接口與MouseMotionListener接口來(lái)處理鼠標(biāo)事件。MouseListener接口可以處理5種鼠標(biāo)事件:?jiǎn)螕?、按下、釋放、進(jìn)入和退出。MouseMotionListener接口可以處理2種鼠標(biāo)

35、事件:拖動(dòng)、移動(dòng)。 練習(xí)了通過(guò)鍵盤(pán)事件實(shí)現(xiàn)按鈕的移動(dòng),當(dāng)按下、釋放或敲擊鍵盤(pán)上一個(gè)鍵時(shí)就發(fā)生了鍵盤(pán)事件,當(dāng)一個(gè)組件處于激活狀態(tài)時(shí)(獲得焦點(diǎn)),敲擊鍵盤(pán)上一個(gè)鍵就導(dǎo)致了這個(gè)組件發(fā)生了鍵盤(pán)事件。事件源使用addKeyListener方法獲得監(jiān)視器。KeyEvent為鍵盤(pán)事件的類(lèi)型,KeyListener是事件監(jiān)視器實(shí)現(xiàn)的接口,其中有三種相應(yīng)事件:按鍵、釋放鍵、按下和釋放的組合事件。 Public void KeyPressed(KeyEvent e) Public void KeyTyped(KeyEvent e) Public void KeyReleased(KeyEvent

36、e) 用KeyEvent類(lèi)的public int getKeycode()方法和public char getKeychar()判斷哪個(gè)鍵被按下、敲擊或釋放。 七、參考文獻(xiàn) [1] 作者:丁振凡 . 參考書(shū)籍名稱(chēng)[M]:《java語(yǔ)言實(shí)用教程》. 出版地: 北京郵電大學(xué)出版社.出版年限:2007. [2] 作者:耿祥義 . 參考書(shū)籍名稱(chēng)[M]:《 Java基礎(chǔ)教程》 . 出版地: 清華大學(xué)出版社.出版年限:2009. 附錄(源碼清單) im

37、port java.awt.*; import java.awt.event.*; public class MoveExample { public static void main(String args[]) { new Hua_Rong_Road(); } } class Person extends Button implements FocusListener { int number; Color c = new Color(255,245,170); Person(int number,String s) { super(s)

38、; setBackground(c); this.number = number; c = getBackground(); addFocusListener(this); } public void focusGained(FocusEvent e) { setBackground(Color.red); } public void focusLost(FocusEvent e) { setBackground(c); } } class Hua_Rong_Road ext

39、ends Frame implements MouseListener,KeyListener,ActionListener { Person person[] = new Person[10]; Button left,right,above,below; Button restart = new Button("重新開(kāi)始"); public Hua_Rong_Road() { init(); setBounds(100,100,

40、320,360); setVisible(true); validate(); addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); }

41、 } ); } public void init() { setLayout(null); add(restart); restart.setBounds(100,320,120,25); restart.addActionListener(this); String name[] = {"曹操","關(guān)羽","張飛","劉備","趙云","黃忠","兵","兵","兵","兵"}; for(int k = 0;k

42、 person[k] = new Person(k,name[k]); person[k].addMouseListener(this); person[k].addKeyListener(this); add(person[k]); } person[0].setBounds(104,54,100,100); person[1].setBounds(104,154,100,50); person[2].setBounds(54,154,50,100); person[3].setBounds(204,154,50,100);

43、 person[4].setBounds(54,54,50,100); person[5].setBounds(204,54,50,100); person[6].setBounds(54,254,50,50); person[7].setBounds(204,254,50,50); person[8].setBounds(104,204,50,50); person[9].setBounds(154,204,50,50); person[9].requestFocus(); left = new Button(); right = new Bu

44、tton(); above = new Button(); below = new Button(); add(left); add(right); add(above); add(below); left.setBounds(49,49,5,260); right.setBounds(254,49,5,260); above.setBounds(49,49,210,5); below.setBounds(49,304,210,5); validate(); } public void keyTyped(KeyEvent

45、 e){} public void keyReleased(KeyEvent e){} public void keyPressed(KeyEvent e) { Person man = (Person)e.getSource(); if(e.getKeyCode()==KeyEvent.VK_DOWN) { go(man,below); } if(e.getKeyCode()==KeyEvent.VK_UP) { go(man,above); } if(e.getK

46、eyCode()==KeyEvent.VK_LEFT) { go(man,left); } if(e.getKeyCode()==KeyEvent.VK_RIGHT) { go(man,right); } } public void mousePressed(MouseEvent e) { Person man = (Person)e.getSource(); int x = -1,y = -1; x = e.getX(); y = e.getY(); int w = man.getBounds().wid

47、th; int h = man.getBounds().height; if(y>h/2) { go(man,below); } if(yw/2) { go(man,right); } } public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} p

48、ublic void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void go(Person man,Button direction) { boolean move = true; Rectangle manRect = man.getBounds(); int x = man.getBounds().x; int y = man.getBounds().y; i

49、f(direction==below) { y = y+50; } else if(direction==above) { y = y-50; } else if(direction==left) { x = x-50; } else if(direction==right) { x = x+50; } manRect.setLocation(x,y); Rectangle directionRect = direction.getBounds(); for(int k = 0;

50、k<10;k++) { Rectangle personRect = person[k].getBounds(); if((manRect.intersects(personRect))&&(man.number!=k)) { move = false; } } if(manRect.intersects(directionRect)) { move = false; } if(move==true) { man.setLocation(x,y); } } public void actionPerformed(ActionEvent e) { dispose(); new Hua_Rong_Road(); } } 第 24 頁(yè)

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!