




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1Java畫圖應(yīng)用開發(fā)篇2Java畫圖應(yīng)用開發(fā)篇 在本講中,我們將進行一些有意思的畫圖編程,并將結(jié)合事件機制和線程機制編寫一個簡單的小游戲。 本講概要繪制一輛可以移動的坦克功能介紹編程思路程序代碼運行結(jié)果與總結(jié) 實現(xiàn)坦克的炮彈發(fā)射功能功能介紹編程思路程序代碼運行結(jié)果與總結(jié)繪制一輛可以移動的坦克功能介紹這是一個帶有圖形界面的小游戲,在窗體上使用Java畫圖機制繪制一輛坦克,結(jié)合事件機制使用鍵盤控制坦克的移動,并能夠改變坦克的朝向。坦克的朝向有左、上、右、下四個方向,鍵盤的“a”鍵控制坦克左移,“w”鍵控制坦克上移,“d”鍵控制坦克右移,“s”鍵控制坦克下移。具體游戲界面如圖所示 繪制一輛可以移動
2、的坦克游戲運行界面坦克簡化成一個圓和一條線段構(gòu)成,紅色的線段代表坦克的炮筒,其朝向決定坦克的朝向,坦克的半徑是15 編程思路按照功能要求,本程序帶有圖形用戶界面的小游戲,使用Java畫圖機制繪制坦克,使用事件機制控制坦克的移動。具體功能實現(xiàn)可分成兩大部分:1、坦克的繪制2、坦克移動的控制繪制一輛可以移動的坦克1、坦克的繪制使用Java畫圖機制繪制坦克,坦克是由一個圓和一條線段構(gòu)成,半徑長度是15像素。定義兩個整型變量x和y,表示坦克所在的圓心坐標(biāo),繪制坦克主體的時候可以用fillOval(x-15,y-15,30,30)這個語句進行。定義一個整型變量dir,該變量有四個值,分別是0(左)、1(
3、上)、2(右)、3(下),該變量代表坦克的朝向,使用drawLine()方法繪制坦克的炮筒。定義paint()方法進行坦克的繪制,繪制時根據(jù)dir不同的值繪制不同朝向的坦克炮筒。繪制一輛可以移動的坦克編寫坦克的代碼import java.awt.*;import java.awt.event.*;public class Tank_1 extends Frame /坦克的圓心坐標(biāo) int x=100,y=100; /坦克的朝向 /0:左; 1:上; 2:右; 3:下 int dir=0; public void paint(Graphics g) g.setColor(Color.blue);
4、 g.fillOval(x-15,y-15,30,30); g.setColor(Color.red); switch(dir) case 0:g.drawLine(x,y,x-15,y);break; case 1:g.drawLine(x,y,x,y-15);break; case 2:g.drawLine(x,y,x+15,y);break; case 3:g.drawLine(x,y,x,y+15);break; public static void main(String args) Tank_1 t=new Tank_1(); t.setSize(600,400); t.setVi
5、sible(true); 繪制一輛可以移動的坦克2坦克移動的控制,使用Java事件機制控制坦克的移動具體設(shè)計如下:定義一個鍵盤事件處理的類,類名是KL,實現(xiàn)KeyListener接口,實現(xiàn)其中的keyTyped()方法,在這個方法中進行移動控制。通過改變x和y的值,可以實現(xiàn)坦克位置的變化,每次x和y的值改變之后,都要調(diào)用Frame類的repaint()方法重繪整個窗體,repaint()方法會自定調(diào)用paint()方法。通過改變dir的值,可以實現(xiàn)坦克朝向的變化,每次改變都要調(diào)用repaint()方法重繪窗體。 控制坦克移動的事件處理類/定義鍵盤事件處理類class KL implements
6、 KeyListener public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) if(e.getKeyChar()=a) x=x-2; dir=0; /改變坦克朝向 repaint(); else if(e.getKeyChar()=w) y=y-2; dir=1; repaint(); else if(e.getKeyChar()=d) x=x+2; dir=2; repaint(); else if(e.getKeyChar()=s) y
7、=y+2; dir=3; repaint(); 小結(jié)本游戲的實質(zhì)就是結(jié)合Java畫圖機制和Java事件機制開發(fā)小游戲,畫圖機制繪制坦克,事件機制控制坦克移動。實現(xiàn)坦克的炮彈發(fā)射功能功能介紹本節(jié)將完善上一節(jié)中的坦克游戲,上一節(jié)的坦克游戲僅僅繪制了坦克和實現(xiàn)了坦克的移動,作為坦克游戲中最重要的部分子彈發(fā)射卻沒有涉及。本節(jié)在上一節(jié)的基礎(chǔ)之上,增加子彈發(fā)射功能,按下鍵盤的“j”鍵就能觸發(fā)子彈的發(fā)射。編程思路聯(lián)想上一節(jié)中坦克移動功能的實現(xiàn),坦克的移動是由鍵盤控制的,也即是使用事件機制控制坦克的移動,而子彈的移動是自發(fā)進行的,子彈發(fā)射以后,一步步向前移動,不需要人工干涉。什么機制能夠?qū)崿F(xiàn)子彈的自發(fā)移動?答
8、案只有線程機制,子彈發(fā)射的時候,開啟一個線程,然后由這個線程控制子彈移動,所以應(yīng)該定義一個控制子彈移動的線程類 具體功能實現(xiàn)可分成三大部分實現(xiàn)坦克的炮彈發(fā)射功能1、子彈的繪制使用Java畫圖機制繪制子彈,坦克是一個圓,半徑長度是2像素。定義兩個整型變量bulletX和bulletY,表示子彈的圓心坐標(biāo),繪制子彈的時候可以用fillOval(bulletX-2,bulletY-2,4,4)這個語句進行。定義一個整型變量bulletDir,該變量有四個值,分別是0(左)、1(上)、2(右)、3(下),表示子彈的移動方向。定義paint()方法進行子彈的繪制。 實現(xiàn)坦克的炮彈發(fā)射功能子彈的參數(shù)bul
9、letX子彈圓心的橫坐標(biāo)bulletY子彈圓形的縱坐標(biāo)bulletDir子彈的移動方向?qū)崿F(xiàn)坦克的炮彈發(fā)射功能子彈繪制的代碼public void paint(Graphics g) g.setColor(Color.blue); g.fillOval(x-15,y-15,30,30); g.setColor(Color.red); switch(dir) case 0:g.drawLine(x,y,x-15,y);break; case 1:g.drawLine(x,y,x,y-15);break; case 2:g.drawLine(x,y,x+15,y);break; case 3:g.d
10、rawLine(x,y,x,y+15);break; /繪制子彈 g.fillOval(bulletX-2,bulletY-2,4,4); 實現(xiàn)坦克的炮彈發(fā)射功能2、子彈移動的線程類,使用Java線程機制控制子彈的移動,具體設(shè)計如下:定義一個控制子彈移動的類,類名是BulletMovement,繼承自Thread類,重寫其中的run()方法。在run()方法中編寫一個無限循環(huán),在其中控制bulletX和bulletY的變化,每次變化都調(diào)用repaint()方法重繪窗口。子彈移動線程類class BulletMovement extends Thread public void run() tr
11、y while(true) switch(bulletDir) case 0: /如果子彈未出左邊界,就繼續(xù)移動 if(bulletX0) bulletX=bulletX-2; repaint(); break; case 1: /如果子彈未出上邊界,就繼續(xù)移動 if(bulletY0) bulletY=bulletY-2; repaint(); break; case 2: /如果子彈未出右邊界,就繼續(xù)移動 if(bulletX600) bulletX=bulletX+2; repaint(); break; case 3: /如果子彈未出下邊界,就繼續(xù)移動 if(bulletY400) b
12、ulletY=bulletY+2; repaint(); break; Thread.sleep(10); catch(Exception e) 實現(xiàn)坦克的炮彈發(fā)射功能3、子彈發(fā)射,使用Java事件機制觸發(fā)子彈發(fā)射,具體設(shè)計如下:按下鍵盤“j”鍵的時候,觸發(fā)子彈的發(fā)射。根據(jù)坦克的朝向,決定子彈的移動方向;根據(jù)坦克的位置,決定子彈的初始位置。 發(fā)射子彈的事件處理類class KL implements KeyListener public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) if(e.getKeyChar()=a) x=x-2; dir=0; repaint(); else if(e.getKeyChar()=w) y=y-2; dir=1; repaint(); else if(e.getKeyChar()=d) x=x+2; dir=2; repaint(); else if(e.getKeyChar()=s) y=y+2; dir=3; repaint(); 發(fā)射子彈的事件處理類 else if(e.getKeyChar()=j) /設(shè)置子彈方向和子彈初始位置 bulletDir=dir; switch(bulletDi
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025陜西省安全員《C證》考試題庫及答案
- 宿州學(xué)院《烏克蘭語語法與寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州南方學(xué)院《軍訓(xùn)(含軍事理論教育)》2023-2024學(xué)年第二學(xué)期期末試卷
- 正德職業(yè)技術(shù)學(xué)院《人工智能基礎(chǔ)與應(yīng)用A》2023-2024學(xué)年第二學(xué)期期末試卷
- 青海交通職業(yè)技術(shù)學(xué)院《寫作(二)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年陜西省安康市高新中學(xué)高二上學(xué)期12月月考?xì)v史試卷
- 周口職業(yè)技術(shù)學(xué)院《EDA技術(shù)及應(yīng)用A》2023-2024學(xué)年第二學(xué)期期末試卷
- 延邊大學(xué)《生態(tài)毒理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津商務(wù)職業(yè)學(xué)院《物理有機化學(xué)選論》2023-2024學(xué)年第二學(xué)期期末試卷
- 黃河交通學(xué)院《藥學(xué)分子生物學(xué)實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 《兒童胃食管反流病》課件
- 閱讀理解:如何找文章線索 課件
- 工程分包商履約情況與進度關(guān)聯(lián)分析
- 英語倒裝句課件(全面詳細(xì))
- 培訓(xùn)業(yè)務(wù)的競爭對手分析與對策
- 產(chǎn)品設(shè)計思維 課件 第3-5章 產(chǎn)品設(shè)計的問題思維、產(chǎn)品設(shè)計的功能思維、產(chǎn)品設(shè)計的形式思維
- 餐券模板完整
- 英語48個國際音標(biāo)課件(單詞帶聲、附有聲國際音標(biāo)圖)
- 門機司機室更換施工方案
- 預(yù)制裝配式鋼筋混凝土排水檢查井標(biāo)準(zhǔn)圖集
- 評估胎兒健康的技術(shù)
評論
0/150
提交評論