第二講Java畫圖應用開發(fā)篇_第1頁
第二講Java畫圖應用開發(fā)篇_第2頁
第二講Java畫圖應用開發(fā)篇_第3頁
第二講Java畫圖應用開發(fā)篇_第4頁
第二講Java畫圖應用開發(fā)篇_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1Java畫圖應用開發(fā)篇2Java畫圖應用開發(fā)篇 在本講中,我們將進行一些有意思的畫圖編程,并將結合事件機制和線程機制編寫一個簡單的小游戲。 本講概要繪制一輛可以移動的坦克功能介紹編程思路程序代碼運行結果與總結 實現坦克的炮彈發(fā)射功能功能介紹編程思路程序代碼運行結果與總結繪制一輛可以移動的坦克功能介紹這是一個帶有圖形界面的小游戲,在窗體上使用Java畫圖機制繪制一輛坦克,結合事件機制使用鍵盤控制坦克的移動,并能夠改變坦克的朝向。坦克的朝向有左、上、右、下四個方向,鍵盤的“a”鍵控制坦克左移,“w”鍵控制坦克上移,“d”鍵控制坦克右移,“s”鍵控制坦克下移。具體游戲界面如圖所示 繪制一輛可以移動

2、的坦克游戲運行界面坦克簡化成一個圓和一條線段構成,紅色的線段代表坦克的炮筒,其朝向決定坦克的朝向,坦克的半徑是15 編程思路按照功能要求,本程序帶有圖形用戶界面的小游戲,使用Java畫圖機制繪制坦克,使用事件機制控制坦克的移動。具體功能實現可分成兩大部分:1、坦克的繪制2、坦克移動的控制繪制一輛可以移動的坦克1、坦克的繪制使用Java畫圖機制繪制坦克,坦克是由一個圓和一條線段構成,半徑長度是15像素。定義兩個整型變量x和y,表示坦克所在的圓心坐標,繪制坦克主體的時候可以用fillOval(x-15,y-15,30,30)這個語句進行。定義一個整型變量dir,該變量有四個值,分別是0(左)、1(

3、上)、2(右)、3(下),該變量代表坦克的朝向,使用drawLine()方法繪制坦克的炮筒。定義paint()方法進行坦克的繪制,繪制時根據dir不同的值繪制不同朝向的坦克炮筒。繪制一輛可以移動的坦克編寫坦克的代碼import java.awt.*;import java.awt.event.*;public class Tank_1 extends Frame /坦克的圓心坐標 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事件機制控制坦克的移動具體設計如下:定義一個鍵盤事件處理的類,類名是KL,實現KeyListener接口,實現其中的keyTyped()方法,在這個方法中進行移動控制。通過改變x和y的值,可以實現坦克位置的變化,每次x和y的值改變之后,都要調用Frame類的repaint()方法重繪整個窗體,repaint()方法會自定調用paint()方法。通過改變dir的值,可以實現坦克朝向的變化,每次改變都要調用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(); 小結本游戲的實質就是結合Java畫圖機制和Java事件機制開發(fā)小游戲,畫圖機制繪制坦克,事件機制控制坦克移動。實現坦克的炮彈發(fā)射功能功能介紹本節(jié)將完善上一節(jié)中的坦克游戲,上一節(jié)的坦克游戲僅僅繪制了坦克和實現了坦克的移動,作為坦克游戲中最重要的部分子彈發(fā)射卻沒有涉及。本節(jié)在上一節(jié)的基礎之上,增加子彈發(fā)射功能,按下鍵盤的“j”鍵就能觸發(fā)子彈的發(fā)射。編程思路聯想上一節(jié)中坦克移動功能的實現,坦克的移動是由鍵盤控制的,也即是使用事件機制控制坦克的移動,而子彈的移動是自發(fā)進行的,子彈發(fā)射以后,一步步向前移動,不需要人工干涉。什么機制能夠實現子彈的自發(fā)移動?答

8、案只有線程機制,子彈發(fā)射的時候,開啟一個線程,然后由這個線程控制子彈移動,所以應該定義一個控制子彈移動的線程類 具體功能實現可分成三大部分實現坦克的炮彈發(fā)射功能1、子彈的繪制使用Java畫圖機制繪制子彈,坦克是一個圓,半徑長度是2像素。定義兩個整型變量bulletX和bulletY,表示子彈的圓心坐標,繪制子彈的時候可以用fillOval(bulletX-2,bulletY-2,4,4)這個語句進行。定義一個整型變量bulletDir,該變量有四個值,分別是0(左)、1(上)、2(右)、3(下),表示子彈的移動方向。定義paint()方法進行子彈的繪制。 實現坦克的炮彈發(fā)射功能子彈的參數bul

9、letX子彈圓心的橫坐標bulletY子彈圓形的縱坐標bulletDir子彈的移動方向實現坦克的炮彈發(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); 實現坦克的炮彈發(fā)射功能2、子彈移動的線程類,使用Java線程機制控制子彈的移動,具體設計如下:定義一個控制子彈移動的類,類名是BulletMovement,繼承自Thread類,重寫其中的run()方法。在run()方法中編寫一個無限循環(huán),在其中控制bulletX和bulletY的變化,每次變化都調用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) 實現坦克的炮彈發(fā)射功能3、子彈發(fā)射,使用Java事件機制觸發(fā)子彈發(fā)射,具體設計如下:按下鍵盤“j”鍵的時候,觸發(fā)子彈的發(fā)射。根據坦克的朝向,決定子彈的移動方向;根據坦克的位置,決定子彈的初始位置。 發(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) /設置子彈方向和子彈初始位置 bulletDir=dir; switch(bulletDi

溫馨提示

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

評論

0/150

提交評論