超級(jí)瑪麗--Java課程設(shè)計(jì)_第1頁
超級(jí)瑪麗--Java課程設(shè)計(jì)_第2頁
超級(jí)瑪麗--Java課程設(shè)計(jì)_第3頁
超級(jí)瑪麗--Java課程設(shè)計(jì)_第4頁
超級(jí)瑪麗--Java課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 面向?qū)ο蟪绦蛟O(shè)計(jì)專業(yè)教育教學(xué)文*#檔課程設(shè)計(jì)報(bào)告專業(yè)教%育&教學(xué)*文檔題 目: 超級(jí)瑪麗軟件的設(shè)計(jì)與實(shí)現(xiàn) 院 (系): 信息科學(xué)與工程學(xué)院 專業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)1201班 學(xué)生姓名: 程偉 學(xué) 號(hào): 20211183011 專*業(yè)教育教#學(xué)文檔指導(dǎo)教師: 吳奕 專業(yè)&教育教*#%學(xué)文檔20 14 年 12 月 29 日至20 15 年 1 月 9 日專業(yè)教育教學(xué)文#*&檔專*業(yè)教育%#教學(xué)文檔華中科技大學(xué)武昌分校制 面向?qū)ο蟪绦蛟O(shè)計(jì) 課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)(調(diào)查報(bào)告/論文)題目超級(jí)瑪麗軟件的設(shè)計(jì)與實(shí)現(xiàn)二、設(shè)計(jì)(調(diào)查報(bào)告/論文)主要內(nèi)容內(nèi)容:開發(fā)超級(jí)瑪麗能夠在場(chǎng)

2、景中完成各種動(dòng)作,并且有場(chǎng)景的切換功能。設(shè)計(jì)一個(gè)Mario類、一個(gè)場(chǎng)景類、以及敵人類、障礙物類。實(shí)現(xiàn)有一定的挑戰(zhàn)的休閑單機(jī)小游戲。 基本功能與要求:設(shè)計(jì)一個(gè)超級(jí)瑪麗游戲?qū)崿F(xiàn)以下功能:1、 點(diǎn)擊“空格”可以使游戲人物進(jìn)行跳躍。2、 點(diǎn)擊方向鍵左右可以使游戲人物前進(jìn)或者后退。3、 設(shè)計(jì)障礙物,增加游戲的難度。4、 設(shè)計(jì)敵人類,增加游戲難度。5、 設(shè)計(jì)跳躍踩死敵人或者跳躍越過障礙物,保證可以正常前進(jìn)。6、 保證通過所有障礙后可以通關(guān)。三、原始資料1.面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)指導(dǎo)書2. 耿祥義JAVA大學(xué)實(shí)用教程北京:清華大學(xué)出版社,2022四、要求的設(shè)計(jì)(調(diào)查/論文)成果1.課程設(shè)計(jì)報(bào)告2.課程設(shè)計(jì)

3、軟件五、進(jìn)程安排布置任務(wù),查找資料、需求分析1天總體設(shè)計(jì)1天詳細(xì)設(shè)計(jì)1.5天編制源程序?qū)崿F(xiàn)3.5天測(cè)試與修改1天撰寫課設(shè)報(bào)告2天六、主要參考資料1 張廣彬. Java課程設(shè)計(jì)案例精編(第二版).北京:清華大學(xué)出版社, 2022. 2 耿祥義. Java課程設(shè)計(jì)(第二版).北京:清華大學(xué)出版社, 2022.3 耿祥義JAVA大學(xué)實(shí)用教程北京:清華大學(xué)出版社,20224 鄒林達(dá)陳國(guó)君 Java2程序設(shè)計(jì)基礎(chǔ)北京:清華大學(xué)出版社,20215 鄒林達(dá)Java2程序設(shè)計(jì)基礎(chǔ)實(shí)驗(yàn)指導(dǎo)北京:清華大學(xué),2021指導(dǎo)教師(簽名): 20 年 月 日目錄專%業(yè)教*育教學(xué)文#檔1需求與總體設(shè)計(jì)5專業(yè)教&育教

4、%學(xué)文*檔1.1需求分析51.2程序功能圖5專業(yè)教育教學(xué)&#文檔1.3程序類圖62詳細(xì)設(shè)計(jì)72.1 MyFrame實(shí)現(xiàn)7窗體對(duì)象的序列圖7詳細(xì)類圖82.2 Mario實(shí)現(xiàn)8對(duì)象的序列圖8類圖92.3 Enemy類的實(shí)現(xiàn)102.4 Obstruction類的實(shí)現(xiàn)11專業(yè)教#育教學(xué)%文檔&2.5 BackGround類實(shí)現(xiàn)113編碼實(shí)現(xiàn)123.1 MyFrame類的詳細(xì)代碼123.2 BackGround類的詳細(xì)代碼133.3 Mario類的詳細(xì)代碼163.4 Enemy類的詳細(xì)代碼243.5 Obstruction類的詳細(xì)代碼314系統(tǒng)測(cè)試33專*業(yè)教&育教學(xué)文#檔4.1

5、 游戲開始界面的測(cè)試33專%業(yè)#*教育教學(xué)文檔&4.2 游戲運(yùn)行的測(cè)試334.3 排除錯(cuò)誤的處理36總 結(jié)37 1需求與總體設(shè)計(jì)1.1需求分析提供一個(gè)友好的用戶交互界面,簡(jiǎn)單明了容易操作。并且游戲有一定的難度和娛樂性。開發(fā)一個(gè)Mario類。一個(gè)場(chǎng)景類,以及敵人類,障礙物類。讓超級(jí)瑪麗能夠在場(chǎng)景中完成各種動(dòng)作。并且有場(chǎng)景的切換等等功能。游戲中設(shè)計(jì)了一些很有意思的陷阱,玩家一步小心掉入陷阱,超級(jí)瑪麗就會(huì)死亡。這樣會(huì)給人意想不到的驚奇,達(dá)到娛樂大眾,增加游戲難度的效果。游戲的設(shè)計(jì)匠心獨(dú)具,并且都經(jīng)過了各種測(cè)試,除了為玩家增加一些意想不到的游戲陷阱以外,還必須保證玩家能夠通關(guān)。專業(yè)教育教%*學(xué)

6、文&檔1.2程序功能圖專業(yè)教育%*教學(xué)&文檔如圖1所示:專業(yè)教#育教學(xué)%&文檔圖11.3程序類圖專業(yè)&教育%教#學(xué)文檔系統(tǒng)的整體類圖的框架如圖2所示。首先是窗體類。他需要調(diào)用到Mario和BackGround類中的方法。以便動(dòng)態(tài)的顯示Mario類和BackGround。而BackGround里面又包含了Enemy和Obstruction。Enemy,Obstruction和Mario類又調(diào)用靜態(tài)類StaticValue的方法,用以顯示真實(shí)的圖片。而StaticValue則是一個(gè)靜態(tài)類,將存儲(chǔ)在硬盤的圖片資源加載進(jìn)入內(nèi)存以便其他模塊調(diào)用。專業(yè)教*育%教學(xué)文檔專#業(yè)

7、教育教學(xué)文*檔%圖2專業(yè)教#育%教學(xué)文檔*2詳細(xì)設(shè)計(jì)2.1 MyFrame實(shí)現(xiàn)窗體對(duì)象的序列圖窗體對(duì)象繼承了JFrame類并且實(shí)現(xiàn)了Runnable接口。作為窗體對(duì)象,它首先顯示窗體,繪制背景。然后啟動(dòng)線程。在run方法里面動(dòng)態(tài)得繪制窗體中需要顯示的Mario的圖片,障礙物的圖片,敵人的圖片。該窗體的run方法是一個(gè)死循環(huán),每次執(zhí)行一個(gè) 循環(huán)調(diào)用sleep方法睡眠50毫秒。序列圖如圖3所示。專#業(yè)教育教&學(xué)文檔*%圖3private Mario mario;/Mario對(duì)象專&業(yè)教*#育教學(xué)文檔private boolean isStart = false;/標(biāo)識(shí)游戲是否已經(jīng)開

8、始this.paintAllEnemys(g2);/繪制所有的敵人this.paintAllObstruction(g2);/繪制所有障礙物專%業(yè)教育教學(xué)文檔#*&2.2 Mario實(shí)現(xiàn)專*業(yè)&教育教%學(xué)文檔因?yàn)樾枰幸粋€(gè)專門的線程來實(shí)時(shí)監(jiān)測(cè)Mario的移動(dòng)狀況,和障礙物和敵人的碰撞情況。所以讓Mario類繼承了Runnable接口。Mario先啟動(dòng)線程。該線程的run方法也是一個(gè)死循環(huán)。首先根據(jù)Mario的狀態(tài)changeMarioImage方法修改Mario的顯示圖片。再根據(jù)Mario的determinexy方法決定Mario的移動(dòng)。然后通過deterMarioWithOb

9、struction方法檢測(cè)Mario和障礙物之間的碰撞,在根據(jù)marioTouchEnemys方法檢測(cè)Mario和敵人之間的碰撞。然后調(diào)用sleep()方法讓線程休息5毫秒。如此結(jié)束一個(gè)循環(huán)。序列圖如圖4所示。圖4類圖中:private int x;/Mario的x坐標(biāo)專業(yè)#&教育教*學(xué)文檔private int y;/Mario的y坐標(biāo)專業(yè)教育教學(xué)#文%檔private int life;/Mario的生命BackGround bg = null;/Mario所在的背景專業(yè)教育教學(xué)文#&*檔private int uptime;/Mario的上升時(shí)間String status

10、;/Mario的移動(dòng)狀態(tài)int score;/Mario的分?jǐn)?shù)Thread t;/Mario的線程int xmove;/Mario的x移動(dòng)距離int ymove;/Mario的y移動(dòng)距離private boolean isClear = false;/標(biāo)識(shí)用戶是否通關(guān)。isClear為true時(shí)代表用戶通關(guān)了2.3 Enemy類的實(shí)現(xiàn)private int x;/敵人的x坐標(biāo)private int y;/敵人的y坐標(biāo)private int startX;/敵人的初始x坐標(biāo)private int startY;/敵人的初始y坐標(biāo)private boolean startIsLeftOrUp;/敵

11、人初始的移動(dòng)方向private int startImageType;/初始的顯示圖片private int type;/敵人的類型1代表蘑菇,2代表食人花,3代表烏龜private BufferedImage bufferedImage;專業(yè)教育教學(xué)*文檔%&private BackGround bg;/障礙物所在的背景private int imageType;/移動(dòng)的極限范圍專業(yè)教&育%教學(xué)文*檔詳細(xì)類圖如下:2.4 Obstruction類的實(shí)現(xiàn)private int x;/障礙物的x坐標(biāo)private int y;/障礙物的y坐標(biāo)專業(yè)&教%育教學(xué)#文檔priv

12、ate BufferedImage showImage = null;/障礙物的顯示圖片private int type;/障礙物的類型private int startType;/障礙物的初始類型private BackGround bg;/標(biāo)識(shí)該障礙物在哪一個(gè)場(chǎng)景中專#%業(yè)教&育教學(xué)文檔詳細(xì)類圖如下:專業(yè)教育教學(xué)*文#檔&專業(yè)教#育教學(xué)*文&檔2.5 BackGround類實(shí)現(xiàn)專業(yè)教育%教學(xué)文*檔private int sort;/背景的序列號(hào)專#業(yè)教育教&學(xué)文*檔%private boolean flag;/標(biāo)識(shí)是否是最后一張圖片,flag為true時(shí)代表

13、到了最后一張圖片private boolean isOver = false;/標(biāo)識(shí)游戲是否已經(jīng)結(jié)束private boolean isDown = false;/標(biāo)志是否降旗結(jié)束詳細(xì)類圖如下:3編碼實(shí)現(xiàn)源代碼專業(yè)#教%育教&學(xué)文檔專&業(yè)教育教學(xué)文檔*專業(yè)&教#育教學(xué)文%檔public class MyFrame extends JFrame implements KeyListener,Runnable專*業(yè)教育教學(xué)#文檔public static void main(String args)new MyFrame();private List<BackGrou

14、nd> allBg = new ArrayList<BackGround>();專業(yè)教*育教學(xué)&文檔/當(dāng)前背景private BackGround nowBg = null;專業(yè)教*%育教學(xué)#&文檔private Mario mario;/Mario對(duì)象專*&業(yè)教育教學(xué)文檔%private boolean isStart = false;/標(biāo)識(shí)游戲是否已經(jīng)開始專業(yè)教育教學(xué)&文#檔public void setNowBg(BackGround nowBg) this.nowBg = nowBg;專業(yè)教育教學(xué)文#&*檔專業(yè)教育教%&

15、學(xué)*文檔private Thread t;/*專*業(yè)教&育教學(xué)文#檔 */public MyFrame()this.setSize(900,600);this.setTitle("馬里奧游戲");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height;this.setLo

16、cation(width - 900) / 2,(height - 600) / 2);this.addKeyListener(this);StaticValue.init();this.setVisible(true);專業(yè)教育教學(xué)%文檔#/繪制出所有的背景for(int i = 1; i <= 4; i+)專業(yè)教育教學(xué)#文檔&this.mario = new Mario(0, 480);專業(yè)教育教學(xué)文%&#檔專業(yè)教育教學(xué)%#文檔this.setResizable(false);專業(yè)*教育&教學(xué)文檔t = new Thread(this);t.start();O

17、verride專業(yè)教育教&%學(xué)#文*檔public void paint(Graphics g)BufferedImage image = new BufferedImage(900, 600, BufferedImage.TYPE_4BYTE_ABGR);if(isStart)專*#%業(yè)教育教&學(xué)文檔Graphics g2 = image.getGraphics();this.paintAllEnemys(g2);/繪制所有的敵人專業(yè)教育%#教學(xué)*文檔this.paintAllObstruction(g2);/繪制所有障礙物elseGraphics g2 = image.ge

18、tGraphics();g2.drawImage(StaticValue.startImage, 0, 0, this);/繪制游戲開始的圖片g.drawImage(image, 0, 0, this);/* */Overridepublic void keyPressed(KeyEvent e)專業(yè)教育教學(xué)文#*檔專*業(yè)教%育#教學(xué)文檔/int k = e.getKeyCode();專業(yè)#教育%教&學(xué)文檔/獲得鍵盤的ASCII碼/if(this.isStart)if(e.getKeyCode() = 39)if(e.getKeyCode() = 37)專*業(yè)#教育教學(xué)文檔專*業(yè)教育教

19、學(xué)&文#%檔if(e.getKeyCode() = 32)/按下空格鍵,Mario的生命加10if(70 = e.getKeyCode()專業(yè)*教育教學(xué)#文檔elseif(e.getKeyCode() = 32)this.isStart = true;/* */Overridepublic void keyReleased(KeyEvent e)if(e.getKeyCode() = 39)if(e.getKeyCode() = 37)專%業(yè)教育教*學(xué)#&文檔/* */Override專業(yè)&教育*教學(xué)文檔#public void keyTyped(KeyEvent e)

20、/ TODO Auto-generated method stub專%業(yè)教#育教學(xué)*文&檔專業(yè)教育%教學(xué)文*檔Overridepublic void run()while(true)this.repaint();oNewBackGround();/進(jìn)入下一張圖片專業(yè)教育教學(xué)文檔&#*專業(yè)#教%育教學(xué)文檔*JOptionPane.showMessageDialog(this, "恭喜您通關(guān)了,敬請(qǐng)期待新的關(guān)卡");專業(yè)教育%*教學(xué)文檔&#System.exit(0);專業(yè)教*育#教學(xué)文檔this.gameOver();/游戲結(jié)束專業(yè)&a

21、mp;教育%教#學(xué)文檔this.sleep();專&%業(yè)教育教學(xué)文檔*#/進(jìn)入下一張圖片private void intoNewBackGround()專業(yè)教育教*%學(xué)文檔&#專業(yè)教育教*#學(xué)文&檔/繪制所有的敵人private void paintAllEnemys(Graphics g2)while(iterEnemy.hasNext()專業(yè)教育教學(xué)文%#檔Enemy e = iterEnemy.next();g2.drawImage(e.getBufferedImage(), e.getX(), e.getY(), this);專*業(yè)教%育&教學(xué)文檔/繪制

22、所有障礙物private void paintAllObstruction(Graphics g2)while(iter.hasNext()專業(yè)教*育教學(xué)&文檔Obstruction ob = iter.next();g2.drawImage(ob.getShowImage(), ob.getX(), ob.getY(), this);g2.drawImage(mario.getShowImage(), mario.getX(), mario.getY(), this);private void sleep()專業(yè)教育&教學(xué)文%檔*try專&業(yè)教育教%*學(xué)#文檔Thre

23、ad.sleep(20);catch (InterruptedException e)e.printStackTrace();專業(yè)教#育教學(xué)文&檔/游戲結(jié)束專業(yè)教*育教學(xué)%&文檔private void gameOver()JOptionPane.showMessageDialog(this, "馬里奧死亡");System.exit(0);class BackGroundprivate BufferedImage bgImage = null;private int sort;/背景的序列號(hào)專業(yè)*教育教學(xué)文&#檔private boolean fl

24、ag;/標(biāo)識(shí)是否是最后一張圖片,flag為true時(shí)代表到了最后一張圖片private List<Enemy> allEnemy = new ArrayList<Enemy>();/所有敵人的集合/所有障礙物的集合private List<Obstruction> allObstruction = new ArrayList<Obstruction>();/所有被移除的敵人的集合private List<Enemy> removeEnemy = new ArrayList<Enemy>();/所有被移除的障礙物的集合pri

25、vate List<Obstruction> removeObstruction = new ArrayList<Obstruction>();private boolean isOver = false;/標(biāo)識(shí)游戲是否已經(jīng)結(jié)束private boolean isDown = false;/標(biāo)志是否降旗結(jié)束public boolean isDown() return isDown;public void setDown(boolean isDown) this.isDown = isDown;public boolean isOver() return isOver;p

26、ublic void setOver(boolean isOver) 專業(yè)教育教學(xué)*%文檔this.isOver = isOver;專業(yè)&教育教學(xué)*文檔%public boolean isFlag() 專業(yè)教育教學(xué)*#文檔return flag;專業(yè)教*#育教學(xué)&文檔public void setFlag(boolean flag) this.flag = flag;專業(yè)&教育教%學(xué)*文檔public int getSort() return sort;public void setSort(int sort) 專業(yè)教%&育教學(xué)文檔this.sort = sor

27、t;專業(yè)%*教育教學(xué)文#檔專業(yè)教育#教學(xué)%文檔*public BufferedImage getBgImage()專*業(yè)教&%育教學(xué)文檔return bgImage;public List<Obstruction> getAllObstruction()return allObstruction;public List<Obstruction> getRemoveObstruction() return removeObstruction;專業(yè)教育&教#學(xué)文檔*public List<Enemy> getAllEnemy() return a

28、llEnemy;專業(yè)教育教*學(xué)文#檔%專業(yè)教%育教&學(xué)文檔public List<Enemy> getRemoveEnemy() return removeEnemy;/* * * param sort背景的序列號(hào) * param flag標(biāo)識(shí)是否是最后一張背景專業(yè)教*育教學(xué)&文檔 */public BackGround(int sort, boolean flag)this.sort = sort;this.flag = flag;專業(yè)教&育教學(xué)文%檔#*if(flag)bgImage = StaticValue.endImage;專業(yè)教育教學(xué)*#文檔專#

29、*&業(yè)教育教學(xué)文%檔elsebgImage = StaticValue.bgImage;switch(sort)case 1:this.creat1Map();break;case 2:this.creat2Map();break;專#*&業(yè)教育教學(xué)文檔case 3:this.creat3Map();break;專業(yè)*教%育教學(xué)文檔case 4:專業(yè)教#育%教學(xué)&文檔this.creat4Map();break;專#業(yè)教育&%教學(xué)文檔public void reset()專業(yè)*#教%育教&學(xué)文檔專%&#*業(yè)教育教學(xué)文檔專業(yè)*教&育教學(xué)文#

30、檔%專業(yè)教育&教#%學(xué)文檔專業(yè)#教育&教學(xué)文檔*專業(yè)*教育教學(xué)#文檔public void enemysStartMove()專業(yè)教育%教#學(xué)文檔&*/創(chuàng)建第一張圖private void creat1Map()專%業(yè)教育*教學(xué)#&文檔for(int i = 0; i < 15; i+)/創(chuàng)建出所有地面/創(chuàng)建出所有磚塊,10代表問好,0代表木塊專業(yè)#教&育教學(xué)文檔*專業(yè)教&育教學(xué)文檔*#專業(yè)%教*育教學(xué)#文檔/創(chuàng)建水管專業(yè)教育教學(xué)文#*檔%專業(yè)#教育%教&學(xué)文檔/創(chuàng)建出所有的敵人,1代表三角菇,2代表食人花專業(yè)教育教學(xué)文%&

31、檔專業(yè)*教#%育教學(xué)文檔專業(yè)*教&育教學(xué)文#檔%專業(yè)教育教學(xué)文#*&檔%/創(chuàng)建第二張圖private void creat2Map()for(int i = 0; i < 15; i+)if(i != 10)專業(yè)教*%育教學(xué)#&文檔/創(chuàng)建水管專*#業(yè)教育%教學(xué)文檔專*業(yè)教育教學(xué)文#%檔/創(chuàng)建水管專%業(yè)#&教育教學(xué)文檔專&業(yè)教育教學(xué)*文檔/創(chuàng)建水管專業(yè)教育&教學(xué)文%檔#*/創(chuàng)建磚塊for(int i = 0; i < 6; +i)專業(yè)教#育教學(xué)文%檔/創(chuàng)建敵人專業(yè)教%育&教學(xué)*文檔專業(yè)教#育&教學(xué)文%檔專*業(yè)教育教學(xué)%文

32、檔#/創(chuàng)建第三張圖private void creat3Map()for(int i = 0; i < 15; i+)/創(chuàng)建出所有地面/創(chuàng)建磚塊專業(yè)教育&%*教學(xué)文檔專業(yè)#教&育教學(xué)*文檔/創(chuàng)建敵人專業(yè)*教#%育教學(xué)文檔private void creat4Map()for(int i = 0; i < 15; i+)/創(chuàng)建出所有地面/繪制旗子/繪制旗子下面的磚塊專業(yè)教育%教&學(xué)文檔#專業(yè)教育教學(xué)文%檔#class Enemy implements Runnable 專業(yè)教&育%教學(xué)#文檔private int x;/敵人的x坐標(biāo)private in

33、t y;/敵人的y坐標(biāo)private int startX;/敵人的初始x坐標(biāo)private int startY;/敵人的初始y坐標(biāo)private boolean startIsLeftOrUp;/敵人初始的移動(dòng)方向private int startImageType;/初始的顯示圖片private int type;/敵人的類型1代表蘑菇,2代表食人花,3代表烏龜private BufferedImage bufferedImage;專業(yè)教育教#學(xué)文%檔private BackGround bg;/障礙物所在的背景專業(yè)教&%育教學(xué)文檔*/敵人的顯示圖片,不同的type代表不同的敵人

34、顯示圖片,通過顯示圖片的切換,達(dá)到動(dòng)態(tài)的效果專&業(yè)教育#教學(xué)%文*檔private int imageType;/移動(dòng)的極限范圍private int upMax;private int downMax;private boolean isLeftOrUP;專業(yè)教育%#教學(xué)文&檔*Thread t = new Thread(this);/普通敵人的構(gòu)造方法,加入顯示圖片參數(shù)public Enemy(int x, int y, boolean isLeft, int type, int imageType, BackGround bg)this.x = x;this.y = y;

35、專%#業(yè)教育教學(xué)文檔this.startX = x;this.startY = y;專業(yè)教育教學(xué)文#檔*this.isLeftOrUP = isLeft;this.startIsLeftOrUp = isLeft;this.type = type;this.bg = bg;this.imageType = imageType;this.startImageType = imageType;switch(type)case 1:/蘑菇/取蘑菇的圖片專業(yè)*教&育教學(xué)文#檔break;case 3:/烏龜專業(yè)教育教學(xué)&文#檔*break;專%業(yè)教育教學(xué)文檔*t.start();/啟動(dòng)

36、線程t.suspend();/抑制線程啟動(dòng)專業(yè)教育教學(xué)&文*檔#/普通敵人的構(gòu)造方法public Enemy(int x, int y, boolean isLeft, int type, BackGround bg)專%業(yè)教育教學(xué)文檔*&專%業(yè)*教育教#學(xué)文檔this.x = x;this.y = y;this.startX = x;專業(yè)教育教學(xué)*#文檔this.startY = y;專*業(yè)教育%#教學(xué)文檔this.isLeftOrUP = isLeft;this.startIsLeftOrUp = isLeft;this.type = type;this.bg = bg;s

37、witch(type)專業(yè)#*教%育教&學(xué)文檔case 1:/蘑菇專*業(yè)教育&教學(xué)%文檔/取蘑菇的圖片專業(yè)教育教學(xué)&文#檔break;case 3:/烏龜break;專業(yè)教育#教學(xué)文檔*t.start();/啟動(dòng)線程t.suspend();/抑制線程啟動(dòng)專業(yè)教#育%教學(xué)&文*檔專業(yè)教*&育教%學(xué)文檔/食人花敵人的構(gòu)造方法public Enemy(int x, int y, boolean isUp, int type, int upMax, int downMax, BackGround bg)this.x = x;this.y = y;this.sta

38、rtX = x;this.startY = y;專業(yè)教育#教學(xué)&文檔this.isLeftOrUP = isUp;this.bg = bg;this.type = type;this.upMax = upMax;this.downMax = downMax;if(2 = type)/取食人花圖片專業(yè)教育教%*學(xué)文檔&t.start();/啟動(dòng)線程t.suspend();/抑制線程啟動(dòng)/當(dāng)Mario死亡的時(shí)候重置敵人的方法public void reSet()專業(yè)%教育教*學(xué)文檔this.x = this.startX;this.y = this.startY;this.isLe

39、ftOrUP = this.startIsLeftOrUp;專業(yè)*教育&教%學(xué)文檔#this.imageType = this.startImageType;專業(yè)*教育教學(xué)文&#檔switch(this.type)case 1:break;case 2:專業(yè)教育教學(xué)文%檔*this.isLeftOrUP = true;break;case 3:專業(yè)教#育&教學(xué)文%檔*break;專業(yè)教#育教學(xué)文檔*&/敵人死亡的方法專業(yè)%教#*育教學(xué)文檔public void dead()switch(this.type)case 1:/蘑菇/將顯示圖片改為敵人死亡的圖片專&a

40、mp;業(yè)教育教學(xué)文檔*break;case 3:/烏龜/將顯示圖片改為敵人死亡的圖片this.imageType = 4;break;public void run()while(true)this.sleep();switch(this.type)case 1:/蘑菇this.triangleMove();/蘑菇移動(dòng)break;case 2:/食人花this.flowerMove();/食人花移動(dòng)break;專業(yè)教育&%教學(xué)文檔專業(yè)%*教育教學(xué)文#檔case 3:/烏龜this.turtleMove();/烏龜移動(dòng)break;專&業(yè)教#育教學(xué)文%檔專&業(yè)%教育教學(xué)*文

41、檔public BufferedImage getBufferedImage() return bufferedImage;public int getStartX() return startX;專&業(yè)教育%教學(xué)文檔#public int getStartY() return startY;public int getX() return x;public int getY() return y;public int getType() return type;專業(yè)教#育教%學(xué)文檔專業(yè)教&育教*學(xué)文檔#專*業(yè)#教育教&學(xué)文檔public void starMove()

42、專業(yè)*教育&教%學(xué)文檔/蘑菇移動(dòng)private void triangleMove()if(this.isLeftOrUP)this.x -= 2;elsethis.x += 2;/改變imageType來讓敵人的圖片切換,達(dá)到動(dòng)態(tài)的效果if(0 = this.imageType)專業(yè)教育教學(xué)%文檔*this.imageType = 1;elsethis.imageType = 0;專業(yè)教*育教學(xué)%文#&檔/定義用來標(biāo)記敵人是否可以向左或者向右移動(dòng)的標(biāo)記專%業(yè)*教育教學(xué)文&檔boolean canleft = true;boolean canright = true;b

43、oolean onLand = false;專業(yè)教育教學(xué)*文%檔for(int i = 0; i < bg.getAllObstruction().size(); i+)Obstruction ob = bg.getAllObstruction().get(i);/敵人不能向右移動(dòng)if(this.x = ob.getX() - 50 && (this.y < ob.getY() + 50) && (this.y > ob.getY() - 50)canright = false;/敵人不能向左移動(dòng)if(this.x = ob.getX() +

44、50 && (this.y < ob.getY() + 50) && (this.y > ob.getY() - 50)專*業(yè)教%育#教學(xué)文檔canleft = false;專#業(yè)教%&育教學(xué)文檔if(this.y = ob.getY() - 60) && (this.x < ob.getX() + 50) && (this.x > (ob.getX() - 50)onLand = true;if(!onLand)專%業(yè)教育教學(xué)*文&檔this.down();/如果敵人正在向左移動(dòng),但是又不

45、能向左移動(dòng)了,那么改變敵人的移動(dòng)方向if(this.isLeftOrUP && !canleft) | 0 = this.x)this.isLeftOrUP = false;/如果敵人正在向右移動(dòng),但是又不能向右移動(dòng)了,那么改變敵人的移動(dòng)方向?qū)?*業(yè)教育&教%學(xué)文檔if(!this.isLeftOrUP && !canright) | 840 = this.x)this.isLeftOrUP = true;專業(yè)教育%#&教學(xué)文檔專業(yè)教育教&#學(xué)文檔/通過imageType獲取在內(nèi)存中真正的圖片專業(yè)教&育%教學(xué)文*檔/食人花移動(dòng)專業(yè)

46、教%育教#學(xué)*文檔private void flowerMove()專業(yè)教%育教學(xué)文檔&if(this.isLeftOrUP)this.y -= 2;elsethis.y += 2;專業(yè)#教育教學(xué)文檔&/當(dāng)食人花到達(dá)極限位置的時(shí)候,修改它移動(dòng)的方向if(!this.isLeftOrUP && this.y = this.upMax)this.isLeftOrUP = true;else if(this.isLeftOrUP && this.y = this.downMax)this.isLeftOrUP = false;專*業(yè)教育教學(xué)#文檔/改變imageType來讓敵人的圖片切換,達(dá)到動(dòng)態(tài)的效果if(0 = this.imageType)this.imageType = 1;elsethis.imageType = 0;/通過imageType獲取在內(nèi)存中真正的圖片/烏龜移動(dòng)專業(yè)#教育教學(xué)文*檔%private void turtleMove()if(thi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論