java打飛機遊戲完整代碼

技術源於分享,因此今天抽空把本身以前用java作過的小遊戲整理貼出來給你們參考學習。java確實不適合寫桌面應用,這裏只是經過這個遊戲讓你們理解oop面向對象編程的過程,純屬娛樂。代碼寫的很簡單,也很容易理解,而且註釋寫的很清楚了,還有問題,本身私下去知海匠庫補課學習。java

java打飛機遊戲代碼

完整代碼

敵飛機

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import  java.util.Random;
 
 
  敵飛機: 是飛行物,也是敵人
 
public  class  Airplane  extends  FlyingObject  implements  Enemy {
     private  int  speed =  3 ;   //移動步驟
 
     /** 初始化數據 */
     public  Airplane(){
         this .image = ShootGame.airplane;
         width = image.getWidth();
         height = image.getHeight();
         y = -height;         
         Random rand =  new  Random();
         x = rand.nextInt(ShootGame.WIDTH - width);
     }
 
     /** 獲取分數 */
     @Override
     public  int  getScore() { 
         return  5 ;
     }
 
     /** //越界處理 */
     @Override
     public      boolean  outOfBounds() {  
         return  y>ShootGame.HEIGHT;
     }
 
     /** 移動 */
     @Override
     public  void  step() {  
         y += speed;
     }
 
}

分數獎勵

1
2
3
4
5
6
7
8
9
/**
  * 獎勵
  */ 
public  interface  Award { 
     int  DOUBLE_FIRE =  0 ;   //雙倍火力 
     int  LIFE =  1 ;    //1條命 
     /** 得到獎勵類型(上面的0或1) */ 
     int  getType(); 
}

蜜蜂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import  java.util.Random; 
 
/** 蜜蜂 */ 
public  class  Bee  extends  FlyingObject  implements  Award{ 
     private  int  xSpeed =  1 ;    //x座標移動速度 
     private  int  ySpeed =  2 ;    //y座標移動速度 
     private  int  awardType;     //獎勵類型 
 
     /** 初始化數據 */ 
     public  Bee(){ 
         this .image = ShootGame.bee; 
         width = image.getWidth(); 
         height = image.getHeight(); 
         y = -height; 
         Random rand =  new  Random(); 
         x = rand.nextInt(ShootGame.WIDTH - width); 
         awardType = rand.nextInt( 2 );    //初始化時給獎勵 
    
 
     /** 得到獎勵類型 */ 
     public  int  getType(){ 
         return  awardType; 
    
 
     /** 越界處理 */ 
     @Override 
     public  boolean  outOfBounds() { 
         return  y>ShootGame.HEIGHT; 
    
 
     /** 移動,可斜着飛 */ 
     @Override 
     public  void  step() {       
         x += xSpeed; 
         y += ySpeed; 
         if (x > ShootGame.WIDTH-width){   
             xSpeed = - 1
        
         if (x <  0 ){ 
             xSpeed =  1
        
    
}

子彈類:是飛行物體

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
  * 子彈類:是飛行物
  */ 
public  class  Bullet  extends  FlyingObject { 
     private  int  speed =  3 ;   //移動的速度 
 
     /** 初始化數據 */ 
     public  Bullet( int  x, int  y){ 
         this .x = x; 
         this .y = y; 
         this .image = ShootGame.bullet; 
    
 
     /** 移動 */ 
     @Override 
     public  void  step(){    
         y-=speed; 
    
 
     /** 越界處理 */ 
     @Override 
     public  boolean  outOfBounds() { 
         return  y<-height; 
    
 
}

敵人的分數

1
2
3
4
5
6
7
/**
  * 敵人,能夠有分數
  */ 
public  interface  Enemy { 
     /** 敵人的分數  */ 
     int  getScore(); 
}

飛行物(敵機,蜜蜂,子彈,英雄機)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import  java.awt.image.BufferedImage; 
 
/**
  * 飛行物(敵機,蜜蜂,子彈,英雄機)
  */ 
public  abstract  class  FlyingObject { 
     protected  int  x;     //x座標 
     protected  int  y;     //y座標 
     protected  int  width;     //寬 
     protected  int  height;    //高 
     protected  BufferedImage image;    //圖片 
 
     public  int  getX() { 
         return  x; 
    
 
     public  void  setX( int  x) { 
         this .x = x; 
    
 
     public  int  getY() { 
         return  y; 
    
 
     public  void  setY( int  y) { 
         this .y = y; 
    
 
     public  int  getWidth() { 
         return  width; 
    
 
     public  void  setWidth( int  width) { 
         this .width = width; 
    
 
     public  int  getHeight() { 
         return  height; 
    
 
     public  void  setHeight( int  height) { 
         this .height = height; 
    
 
     public  BufferedImage getImage() { 
         return  image; 
    
 
     public  void  setImage(BufferedImage image) { 
         this .image = image; 
    
 
     /**
      * 檢查是否出界
      * @return true 出界與否
      */ 
     public  abstract  boolean  outOfBounds(); 
 
     /**
      * 飛行物移動一步
      */ 
     public  abstract  void  step(); 
 
     /**
      * 檢查當前飛行物體是否被子彈(x,y)擊(shoot)中
      * @param Bullet 子彈對象
      * @return true表示被擊中了
      */ 
     public  boolean  shootBy(Bullet bullet){ 
         int  x = bullet.x;   //子彈橫座標 
         int  y = bullet.y;   //子彈縱座標 
         return  this .x<x && x< this .x+width &&  this .y<y && y< this .y+height; 
    
 
}

英雄機

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import  java.awt.image.BufferedImage; 
 
/**
  * 英雄機:是飛行物
  */ 
public  class  Hero  extends  FlyingObject{ 
 
     private  BufferedImage[] images = {};   //英雄機圖片 
     private  int  index =  0 ;                 //英雄機圖片切換索引 
 
     private  int  doubleFire;    //雙倍火力 
     private  int  life;    //命 
 
     /** 初始化數據 */ 
     public  Hero(){ 
         life =  3 ;    //初始3條命 
         doubleFire =  0 ;    //初始火力爲0 
         images =  new  BufferedImage[]{ShootGame.hero0, ShootGame.hero1};  //英雄機圖片數組 
         image = ShootGame.hero0;    //初始爲hero0圖片 
         width = image.getWidth(); 
         height = image.getHeight(); 
         x =  150
         y =  400
    
 
     /** 獲取雙倍火力 */ 
     public  int  isDoubleFire() { 
         return  doubleFire; 
    
 
     /** 設置雙倍火力 */ 
     public  void  setDoubleFire( int  doubleFire) { 
         this .doubleFire = doubleFire; 
    
 
     /** 增長火力 */ 
     public  void  addDoubleFire(){ 
         doubleFire =  40
    
 
     /** 增命 */ 
     public  void  addLife(){   //增命 
         life++; 
    
 
     /** 減命 */ 
     public  void  subtractLife(){    //減命 
         life--; 
    
 
     /** 獲取命 */ 
     public  int  getLife(){ 
         return  life; 
    
 
     /** 當前物體移動了一下,相對距離,x,y鼠標位置  */ 
     public  void  moveTo( int  x, int  y){    
         this .x = x - width/ 2
         this .y = y - height/ 2
    
 
     /** 越界處理 */ 
     @Override 
     public  boolean  outOfBounds() { 
         return  false ;   
    
 
     /** 發射子彈 */ 
     public  Bullet[] shoot(){    
         int  xStep = width/ 4 ;       //4半 
         int  yStep =  20 ;   //步 
         if (doubleFire> 0 ){   //雙倍火力 
             Bullet[] bullets =  new  Bullet[ 2 ]; 
             bullets[ 0 ] =  new  Bullet(x+xStep,y-yStep);   //y-yStep(子彈距飛機的位置) 
             bullets[ 1 ] =  new  Bullet(x+ 3 *xStep,y-yStep); 
             return  bullets; 
         } else {       //單倍火力 
             Bullet[] bullets =  new  Bullet[ 1 ]; 
             bullets[ 0 ] =  new  Bullet(x+ 2 *xStep,y-yStep);   
             return  bullets; 
        
    
 
     /** 移動 */ 
     @Override 
     public  void  step() { 
         if (images.length> 0 ){ 
             image = images[index++/ 10 %images.length];   //切換圖片hero0,hero1 
        
    
 
     /** 碰撞算法 */ 
     public  boolean  hit(FlyingObject other){ 
 
         int  x1 = other.x -  this .width/ 2
相關文章
相關標籤/搜索