【課程設(shè)計報告】JAVA實(shí)現(xiàn)華容道智力游戲 有源碼(word版)
更多計算機(jī)類課程設(shè)計、畢業(yè)設(shè)計、論文請訪問:課程設(shè)計(論文)任務(wù)書 軟 件 學(xué) 院 學(xué)院 軟件+電子商務(wù) 專業(yè) 2 班 一、課程設(shè)計(論文)題目 華容道一個傳統(tǒng)的智力游戲 二、課程設(shè)計(論文)工作自 2010 年 12 月 20 日起至 2010 年 12 月 24 日止。三、課程設(shè)計(論文) 地點(diǎn): 軟 件 學(xué) 院 實(shí) 訓(xùn) 中 心 四、課程設(shè)計(論文)內(nèi)容要求:1本課程設(shè)計的目的(1)掌握J(rèn)ava語言的程序設(shè)計方法; (2)理論聯(lián)系實(shí)際,進(jìn)一步提高學(xué)生的軟件開發(fā)技術(shù);(3)培養(yǎng)學(xué)生分析、解決問題的能力;(4)提高學(xué)生實(shí)踐論文撰寫能力。2課程設(shè)計的任務(wù)及要求1)課程設(shè)計任務(wù):用java語言編寫一個華容道小游戲2)創(chuàng)新要求:在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計3)課程設(shè)計論文編寫要求(1)課程設(shè)計任務(wù)及要求(2)設(shè)計思路-工作原理、功能規(guī)劃(3)詳細(xì)設(shè)計-數(shù)據(jù)分析、算法思路、類設(shè)計、功能實(shí)現(xiàn)(含程序流程圖、主要代碼及注釋)、界面等。(4)運(yùn)行調(diào)試與分析討論-給出運(yùn)行屏幕截圖,分析運(yùn)行結(jié)果,有何改進(jìn)想法等。(5)設(shè)計體會與小結(jié)-設(shè)計遇到的問題及解決辦法,通過設(shè)計學(xué)到了哪些新知識,鞏固了哪些知識,有哪些提高。(6)參考文獻(xiàn)(必須按標(biāo)準(zhǔn)格式列出,可參考教材后面的參考文獻(xiàn)格式)(7)報告按規(guī)定排版打印,要求裝訂平整,否則要求返工;(8)課設(shè)報告的裝訂順序如下:封面-任務(wù)書-中文摘要-目錄-正文-附錄(代碼及相關(guān)圖片)(9) 嚴(yán)禁抄襲,如有發(fā)現(xiàn),按不及格處理。4)課程設(shè)計評分標(biāo)準(zhǔn): (1)學(xué)習(xí)態(tài)度:10分;(2)系統(tǒng)設(shè)計:20分;(3)編程調(diào)試:20分;(4)回答問題:20分;(5)論文撰寫:30分。5)參考文獻(xiàn):(1)丁振凡. Java語言實(shí)用教程(第2版)M. 北京郵電大學(xué)出版社. 2008.1 (2)丁振凡. Java語言實(shí)用教程實(shí)驗(yàn)指導(dǎo)(第2版)M. 北京郵電大學(xué)出版社. 2008.1(3)楊樹林等. Java語言最新實(shí)用案例教程(第2版)M. 清華大學(xué)出版社. 2010.76)課程設(shè)計進(jìn)度安排1準(zhǔn)備階段(4學(xué)時):選擇設(shè)計題目、了解設(shè)計目的要求、查閱相關(guān)資料2程序模塊設(shè)計分析階段(4學(xué)時):程序總體設(shè)計、詳細(xì)設(shè)計3代碼編寫調(diào)試階段(8學(xué)時):程序模塊代碼編寫、調(diào)試、測試4撰寫論文階段(4學(xué)時):總結(jié)課程設(shè)計任務(wù)和設(shè)計內(nèi)容,撰寫課程設(shè)計論文學(xué)生簽名: 2010 年 12 月 20 日課程設(shè)計(論文)評審意見(1)學(xué)習(xí)態(tài)度(10分):優(yōu)()、良()、中()、一般()、差(); (2)系統(tǒng)設(shè)計(20分):優(yōu)( )、良()、中()、一般()、差(); (3)編程調(diào)試(20分):優(yōu)()、良()、中()、一般()、差();(4)回答問題(20分):優(yōu)()、良()、中()、一般()、差();(5)論文撰寫(30分):優(yōu)()、良()、中()、一般()、差(); 評閱人: 職稱: 講師 2010 年 12 月 25 日中文摘要華容道,古老的中國游戲,以其變化多端、百玩不厭的特點(diǎn)與魔方、獨(dú)立鉆石棋一起被國外智力專家并稱為“智力游戲界的三個不可思議”。游戲就是依照“曹瞞兵敗走華容,正與關(guān)公狹路逢,只為當(dāng)初恩義重,放開金鎖走蛟龍”這一故事情節(jié)設(shè)計,受到很多玩家的喜愛。該程序用Java語言編寫 ,棋盤上有10個不一樣大小的按鈕,分別代表曹操、張飛、趙云、馬超、黃忠和關(guān)羽,還有四個兵。棋盤最下方有兩個空著的小方格,代表曹操逃出的位置,可以實(shí)現(xiàn)通過鼠標(biāo)或者鍵盤移動界面上的按鈕,最終使曹操移動到棋盤最下方,代表曹操逃出華容道。 目錄一、課程設(shè)計任務(wù)及要求1二、需求分析2三、設(shè)計思路3四、詳細(xì)設(shè)計4五、運(yùn)行調(diào)試與分析討論14六、設(shè)計體會與小結(jié)16七、參考文獻(xiàn)17一、課程設(shè)計任務(wù)及要求 1、 本程序主要練習(xí)使用布局管理器設(shè)計一個華容道游戲界面,并練習(xí)使用事件監(jiān)聽器(鼠標(biāo)事件、鍵盤事件和焦點(diǎn)事件)實(shí)現(xiàn)按鈕的移動。 2、編寫一個按鈕的子類,使用該子類創(chuàng)建的對象代表華容道中的人物。通過焦點(diǎn)事件控制人物顏色,當(dāng)人物獲得焦點(diǎn)時顏色為紅色,當(dāng)失去焦點(diǎn)時顏色為黃色。 3、通過鍵盤事件和鼠標(biāo)事件來實(shí)現(xiàn)曹操、關(guān)羽等人物的移動。當(dāng)人物上發(fā)生鼠標(biāo)事件或鍵盤事件時,如果鼠標(biāo)指針的位置是在人物的下方(也就是組件的下半部分)或按下鍵盤的“鍵,該人物向下移動。向左、向右和向上的移動原理類似。 4、點(diǎn)擊“重新開始”可以使各個按鈕復(fù)位,重新開始游戲。二、需求分析要滿足的容道游戲的基本操作:1 各人物按鈕按相應(yīng)的順序和大小排列,按鈕上標(biāo)注人物名字,界面美觀。2 通過焦點(diǎn)事件控制人物按鈕的顏色,得到焦點(diǎn)呈紅色,失去焦點(diǎn)為淡黃色。3 可以通過鍵盤控制各個按鈕的移動:按“”鍵,人物按鈕向下移動其它方向類似。4 可以通過鼠標(biāo)點(diǎn)擊來控制各個人物按鈕的移動:如果點(diǎn)擊的位置在按鈕的上半部分則向上移動,如果點(diǎn)擊按鈕的下半部分則向下,左右原理類似。5 有“重新開始按鈕” 點(diǎn)擊重新開始按鈕各個人物按鈕復(fù)位,能重新開始游戲。6 小程序能夠自由的縮小,放大,關(guān)閉。三、設(shè)計思路 1.首先是界面設(shè)計,該界面主要包括十個人物按鈕(馬、曹操、關(guān)羽等)以及旁邊的四個邊框按鈕和重新開始按鈕。對于人物按鈕,創(chuàng)建Button按鈕的子類,在該類中定義按鈕的一些新的屬性和焦點(diǎn)事件監(jiān)聽器,如:按鈕的標(biāo)簽名、按鈕的顏色、按鈕的排號(如這里有十個人物按鈕,從1排到十,在程序中可以依靠這個屬性區(qū)分人物按鈕)、按鈕顏色、按鈕獲得或失去焦點(diǎn)事件。同時在設(shè)計該界面時要考慮到各個按鈕的位置、大小等情況。 2.對界面上的各人物按鈕添加相應(yīng)的相應(yīng)事件焦點(diǎn)事件:通過焦點(diǎn)事件各個按鈕的是焦點(diǎn)。鼠標(biāo)事件、鍵盤事件:通過這兩種事件去完成界面上各人物按鈕的移動。對重新開始按鈕定義動作事件(ActionEvent)完成界面初始化功能也 就是各人物按鈕重新歸位。四、詳細(xì)設(shè)計1.類的設(shè)計本程序總共有3個類(1)MoveExample 類public class MoveExample public static void main(String args)/定義主方法 new Hua_Rong_Road();/創(chuàng)建一個Hua_Rong_Road對象 (2)Person 類 增加焦點(diǎn)事件監(jiān)視器:addFocusListener(事件監(jiān)聽器)當(dāng)組件具有焦點(diǎn)監(jiān)視器后,如果組件從無輸入焦點(diǎn)變成有輸入焦點(diǎn)或從有輸入焦點(diǎn)到無輸入焦點(diǎn)都會觸發(fā)FocusEvent事件。創(chuàng)建監(jiān)視器的類必須要實(shí)現(xiàn)FocusListener接口,該接口有兩個方法:public void focusGained(final FocusEvent e) /獲得焦點(diǎn)觸發(fā)public void focusLost(final FocusEvent e) /失去焦點(diǎn)觸發(fā)當(dāng)組件從無輸入焦點(diǎn)變成有輸入焦點(diǎn)并觸發(fā)FocusEvent事件時,監(jiān)視器調(diào)用類實(shí)現(xiàn)的接口方法focusGained(FocusEvent e);當(dāng)組件從有輸入焦點(diǎn)變成無輸入焦點(diǎn)并觸發(fā)FocusEvent事件時,監(jiān)視器調(diào)用類實(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 String s) super(s); setBackground(c);/背景色 this.number=number; c=getBackground(); addFocusListener(this);/事件焦點(diǎn)監(jiān)聽 public void focusGained(final FocusEvent e) /獲得焦點(diǎn)觸發(fā) setBackground(Color.red);/獲得焦點(diǎn)的顏色 public void focusLost(final FocusEvent e) /失去焦點(diǎn)觸發(fā) setBackground(c); (3)Hua_Rong_Road 類 游戲界面主要包括十個人物按鈕馬、曹操、關(guān)羽等。對于人物按鈕,在該類中定義按鈕的一些新的屬性和焦點(diǎn)事件監(jiān)聽器,如:按鈕的標(biāo)簽名、按鈕的顏色、按鈕的排號(如這里有十個人物按鈕,從1排到十,在程序中可以依靠這個屬性區(qū)分人物按鈕)、按鈕顏色、按鈕獲得或失去焦點(diǎn)事件。同時在設(shè)計該界面時要考慮到各個按鈕的位置、大小等情況。class Hua_Rong_Road extends Frame implements MouseListener,KeyListener,ActionListener Person person=new Person10; Button left,right,above,below; Button restart=new Button("重新開始");/添加重新開始按鈕 Hua_Rong_Road()方法設(shè)置容器 public Hua_Rong_Road() init();/設(shè)置按鈕 setBounds(100,100,320,360);/組件在容器上的起點(diǎn)和長寬 setVisible(true);/ 像控件中添加元素 validate();/刷新 addWindowListener(new WindowAdapter()/注冊窗口事件監(jiān)聽 public void windowClosing(WindowEvent e)/關(guān)閉 System.exit(0); ); init()方法 設(shè)置10個按鈕 public void init() setLayout(null);/設(shè)置布局默認(rèn) add(restart);/添加重新開始 restart.setBounds(100,320,120,25);/按鈕大小 restart.addActionListener(this);/注冊監(jiān)聽 String name="曹操","關(guān)羽","張飛","劉備","趙云","黃忠","兵 ","兵","兵","兵" for(int k=0;k<name.length;k+) personk=new Person(k,namek);/為每個按鈕加上名字 personk.addMouseListener(this);/每個按鈕都注冊鼠標(biāo)事件監(jiān)聽 /*鼠標(biāo)事件的類型是MouseEvent,即組件觸發(fā)鼠標(biāo)時,MouseEvent類自動創(chuàng)建一個事件對象。Java分別使用MouseListener接口來處理鼠標(biāo)事件。MouseListener接口可以處理5種鼠標(biāo)事件:單擊、按下、釋放、進(jìn)入和退出。*/personk.addKeyListener(this);/注冊鍵盤事件監(jiān)聽/*當(dāng)按下、釋放或敲擊鍵盤上一個鍵時就發(fā)生了鍵盤事件,如:當(dāng)一個組件處于激活狀態(tài)時(獲得焦點(diǎn)),敲擊鍵盤上一個鍵就導(dǎo)致了這個組件發(fā)生了鍵盤事件。事件源使用addKeyListener方法獲得監(jiān)視器。*/*KeyEvent類的public int getKeycode()方法和public char getKeychar()判斷哪個鍵被按下、敲擊或釋放。*/ add(personk);/加上人物按鈕 /為每一個人物按鈕設(shè)置位置和大小 person0.setBounds(104,54,100,100); person1.setBounds(104,154,100,50); person2.setBounds(54,154,50,100); person3.setBounds(204,154,50,100); person4.setBounds(54,54,50,100); person5.setBounds(204,54,50,100); person6.setBounds(54,254,50,50); person7.setBounds(204,254,50,50); person8.setBounds(104,204,50,50); person9.setBounds(154,204,50,50); person9.requestFocus();/把焦點(diǎn)先設(shè)置在這個按鈕上 /*其次來畫出游戲界面的邊框,用定義的left,right,above,below,來控制大小*/ left=new Button(); 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)過以上操作就完成了界面的布局得到的界面如圖一所示: 圖一:界面布局 接下來就要為各個按鈕注冊事件監(jiān)聽 :鼠標(biāo)事件和鍵盤事件 鍵盤事件:KeyEvent為鍵盤事件的類型,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(KeyEvent e) public void KeyReleased(KeyEvent e) 因?yàn)橐獙?shí)現(xiàn)人機(jī)交互的效果,所以要響應(yīng)鍵盤事件,這一操作是在函數(shù)public void keyPressed(KeyEvent e)中完成的:首先通過語句Person man=(Person)e.getSource()獲取事件源,然后通過語句if(e.getKeyCode()=KeyEvent.VK_DOWN)響應(yīng)用戶按向下光標(biāo)的操作,通過語句if(e.getKeyCode()=KeyEvent.VK_LEFT)響應(yīng)用戶按向左光標(biāo)的操作,通過語句if(e.getKeyCode()=KeyEvent. VK_RIGHT)響應(yīng)用戶按向右光標(biāo)的操作,通過語句if(e.getKeyCode()=KeyEvent. VK_UP)響應(yīng)用戶按向上光標(biāo)的操作。*/ public void KeyPressed(KeyEvent e) Person man=(Person)e.getSource();/返回事件源/*用KeyEvent類的getKeycode()方法和getKeychar()判斷哪個鍵被按下、敲擊或釋放。*/ if(e.getKeyCode()=KeyEvent.VK_DOWN) 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) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) /響應(yīng)鼠標(biāo)事件, 通過鼠標(biāo)點(diǎn)擊的位置判斷是像那個方向移動 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().width; int h=man.getBounds().height; if(y>h/2) go(man,below); if(y<h/2) go(man,above); if(x<w/2) go(man,left); if(x>w/2) go(man,right); 用 go方法控制人物按鈕上下左右移動:鼠標(biāo)點(diǎn)擊想要移動的人物,使用鍵盤上,下,左,右來控制人物的移動。(需要鼠標(biāo)以及鍵盤的響應(yīng))。通過向上的響應(yīng)來使得人物向上走,并判斷是否與其他人物重疊,若重疊則返回上單元,若不重疊的繼續(xù)。通過向上的響應(yīng)來使得人物向下走,并判斷是否與其他人物重疊,若重疊則返回上單元,若不重疊的繼續(xù)。通過向上的響應(yīng)來使得人物向左走,并判斷是否與其他人物重疊,若重疊則返回上單元,若不重疊的繼續(xù)。當(dāng)前人物向上與其他人物不重疊,則向上前進(jìn)五十單元。當(dāng)前人物向下與其他人物不重疊,則向下前進(jìn)五十單元。當(dāng)前人物向左與其他人物不重疊,則向左前進(jìn)五十單元。通過向上的響應(yīng)來使得人物向右走,并判斷是否與其他人物重疊,若重疊則返回上單元,若不重疊的繼續(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)/向各個方向上的移動 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;k<10;k+) Rectangle personRect=personk.getBounds();if(manRect.intersects(personRect)&&(man.number!=k)/如果覆蓋就不移動 move=false; if(manRect.intersects(directionRect) move=false; if(move=true) /移動到新的位置 man.setLocation(x,y); 發(fā)生操作時調(diào)用: public void actionPerformed(ActionEvent 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)或者鍵盤移動人物按鈕如圖五: 圖五4. 點(diǎn)擊重新開始按鈕后如圖六所示: 圖六 第 16 頁 6、 設(shè)計體會與小結(jié) 通過本程序,我練習(xí)使用布局管理器設(shè)計了一個華容道游戲界面,并且練習(xí)使用事件監(jiān)聽器監(jiān)聽焦點(diǎn)的得失,首先增加焦點(diǎn)事件監(jiān)視器:addFocusListener(事件監(jiān)聽器),當(dāng)組件具有焦點(diǎn)監(jiān)視器后,如果組件從無輸入焦點(diǎn)變成有輸入焦點(diǎn)或從有輸入焦點(diǎn)到無輸入焦點(diǎn)都會觸發(fā)FocusEvent事件。創(chuàng)建監(jiān)視器的類必須要實(shí)現(xiàn)FocusListener接口,該接口有兩個方法:public void focusGained(FocusEvent e) /獲得焦點(diǎn)觸發(fā)public void focusLost(FocusEvent e) /失去焦點(diǎn)觸發(fā) 練習(xí)了通過鼠標(biāo)事件實(shí)現(xiàn)按鈕的移動,鼠標(biāo)事件的類型是MouseEvent,即組件觸發(fā)鼠標(biāo)時,MouseEvent類自動創(chuàng)建一個事件對象。Java分別使用MouseListener接口與MouseMotionListener接口來處理鼠標(biāo)事件。MouseListener接口可以處理5種鼠標(biāo)事件:單擊、按下、釋放、進(jìn)入和退出。MouseMotionListener接口可以處理2種鼠標(biāo)事件:拖動、移動。 練習(xí)了通過鍵盤事件實(shí)現(xiàn)按鈕的移動,當(dāng)按下、釋放或敲擊鍵盤上一個鍵時就發(fā)生了鍵盤事件,當(dāng)一個組件處于激活狀態(tài)時(獲得焦點(diǎn)),敲擊鍵盤上一個鍵就導(dǎo)致了這個組件發(fā)生了鍵盤事件。事件源使用addKeyListener方法獲得監(jiān)視器。KeyEvent為鍵盤事件的類型,KeyListener是事件監(jiān)視器實(shí)現(xiàn)的接口,其中有三種相應(yīng)事件:按鍵、釋放鍵、按下和釋放的組合事件。Public void KeyPressed(KeyEvent e)Public void KeyTyped(KeyEvent e)Public void KeyReleased(KeyEvent e) 用KeyEvent類的public int getKeycode()方法和public char getKeychar()判斷哪個鍵被按下、敲擊或釋放。七、參考文獻(xiàn)1 作者:丁振凡 . 參考書籍名稱M:java語言實(shí)用教程. 出版地: 北京郵電大學(xué)出版社.出版年限:2007.2 作者:耿祥義 . 參考書籍名稱M: Java基礎(chǔ)教程 . 出版地: 清華大學(xué)出版社.出版年限:2009. 附錄(源碼清單)import 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); 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 extends Frame implements MouseListener,KeyListener,ActionListener Person person = new Person10; Button left,right,above,below; Button restart = new Button("重新開始"); public Hua_Rong_Road() init(); setBounds(100,100,320,360); setVisible(true); validate(); addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); 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<name.length;k+) personk = new Person(k,namek); personk.addMouseListener(this); personk.addKeyListener(this); add(personk); person0.setBounds(104,54,100,100); person1.setBounds(104,154,100,50); person2.setBounds(54,154,50,100); person3.setBounds(204,154,50,100); person4.setBounds(54,54,50,100); person5.setBounds(204,54,50,100); person6.setBounds(54,254,50,50); person7.setBounds(204,254,50,50); person8.setBounds(104,204,50,50); person9.setBounds(154,204,50,50); person9.requestFocus(); left = new Button(); 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(); public void keyTyped(KeyEvent 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.getKeyCode()=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().width; int h = man.getBounds().height; if(y>h/2) go(man,below); if(y<h/2) go(man,above); if(x<w/2) go(man,left); if(x>w/2) go(man,right); public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public 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; if(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;k<10;k+) Rectangle personRect = personk.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(); 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第 24 頁