Bullets.java
上传用户:gyyuli
上传日期:2013-07-09
资源大小:3050k
文件大小:4k
源码类别:

J2ME

开发平台:

Java

  1. import javax.microedition.lcdui.game.*;
  2. import javax.microedition.lcdui.*;
  3. import java.util.Random;
  4. public class Bullets extends Sprite {
  5.   private int[][] bullets;
  6.   private int BULLETS_NUM;
  7.   private Random random;
  8.   private int frameWidth,frameHeight;
  9.   public static final int BULLET_TYPE_LEFT=0;
  10.   public static final int BULLET_TYPE_RIGHT=1;
  11.   public static final int BULLET_TYPE_TOP=2;
  12.   public static final int BULLET_TYPE_BOTTOM=3;
  13.   private static final int ALIVE = 1;
  14.   private static final int DEFAULT_SPEED =3;
  15.   private int CanvasWidth,CanvasHeight;
  16.  
  17.   public Bullets(Image image,int frameWidth,int frameHeight) {
  18.     super(image,frameWidth,frameHeight);
  19.     this.frameWidth = frameWidth;
  20.     this.frameHeight = frameHeight;
  21.     random=new Random();
  22.     defineReferencePixel(frameWidth/2 , frameHeight/2 );
  23.   }
  24.   public void setBulletsNum(int BULLETS_NUM){
  25.     this.BULLETS_NUM = BULLETS_NUM;
  26.   }
  27.   public void setCanvasSize(int CanvasWidth,int CanvasHeight){
  28.     this.CanvasWidth = CanvasWidth;
  29.     this.CanvasHeight = CanvasHeight;
  30.   }
  31.   public void initBullets(){
  32.     bullets=new int[BULLETS_NUM][6];
  33.     for (int i = 0; i < bullets.length; i++) {
  34.       initBullet(i);
  35.     }
  36.   }
  37.   private void initBullet(int i) {
  38.     bullets[i][0] = (random.nextInt() & 0x7fffffff) % 4; //type
  39.     bullets[i][5] = ALIVE; //alive
  40.     switch (bullets[i][0]) {
  41.       case BULLET_TYPE_LEFT:
  42.         bullets[i][1] = -frameWidth;
  43.         bullets[i][2] = (random.nextInt() & 0x7fffffff) % CanvasHeight;
  44.         bullets[i][3] = (random.nextInt() & 0x7fffffff) % 3 + 1; //vx
  45.         bullets[i][4] = (random.nextInt()) % 3; //vy
  46.         break;
  47.       case BULLET_TYPE_RIGHT:
  48.         bullets[i][1] = CanvasWidth + frameWidth;
  49.         bullets[i][2] = (random.nextInt() & 0x7fffffff) % CanvasHeight;
  50.         bullets[i][3] = ((random.nextInt() & 0x7fffffff) % 3 + 1) * -1; //vx
  51.         bullets[i][4] = (random.nextInt()) % 3; //vy
  52.         break;
  53.       case BULLET_TYPE_TOP:
  54.         bullets[i][1] = (random.nextInt() & 0x7fffffff) % CanvasWidth;
  55.         bullets[i][2] = -frameHeight;
  56.         bullets[i][3] = (random.nextInt()) % 3; //vx
  57.         bullets[i][4] = (random.nextInt() & 0x7fffffff) % 3 + 1; //vy
  58.         break;
  59.       case BULLET_TYPE_BOTTOM:
  60.         bullets[i][1] = (random.nextInt() & 0x7fffffff) % CanvasWidth;
  61.         bullets[i][2] = CanvasHeight + frameHeight;
  62.         bullets[i][3] = (random.nextInt()) % 3; //vx
  63.         bullets[i][4] = ( (random.nextInt() & 0x7fffffff) % 3 + 1) * -1; //vy
  64.         break;
  65.        
  66.     }
  67.    if(bullets[i][3]==0)
  68.     {
  69.     if(bullets[i][0] == BULLET_TYPE_RIGHT||bullets[i][0] == BULLET_TYPE_BOTTOM)
  70.     bullets[i][3] = -DEFAULT_SPEED;
  71.     else bullets[i][3] = DEFAULT_SPEED;
  72.     }
  73.     if(bullets[i][4]==0)
  74.     {
  75.     if(bullets[i][0] == BULLET_TYPE_RIGHT||bullets[i][0] == BULLET_TYPE_BOTTOM)
  76.     bullets[i][4] = -DEFAULT_SPEED;
  77.     else bullets[i][4] = DEFAULT_SPEED; 
  78.     }
  79.   }
  80.   public void tick(){
  81.     for (int i = 0; i < bullets.length; i++) {
  82.      tick(i);
  83.    }
  84.   }
  85.   private void tick(int i){
  86.     bullets[i][1]+=bullets[i][3];
  87.     bullets[i][2]+=bullets[i][4];
  88.     if(bullets[i][1]<-5 || bullets[i][1]>CanvasWidth+5){
  89.       bullets[i][3]*=-1;
  90.     }
  91.     if(bullets[i][2]<-5 || bullets[i][2]>CanvasHeight+5){
  92.       bullets[i][4]*=-1;
  93.     }
  94.  }
  95.  
  96.   public void draw(Graphics g) {
  97.     for (int i = 0; i < bullets.length; i++) {
  98.       if(bullets[i][5]!= ALIVE){
  99.         continue;
  100.       }
  101.       draw(g,i);
  102.     }
  103.   }
  104.   private void draw(Graphics g,int i){
  105.     setPosition(bullets[i][1],bullets[i][2]);
  106.     paint(g);
  107.   }
  108.   public boolean collidesWith(Sprite s){
  109.      for (int i = 0; i < bullets.length; i++) {
  110.      if(bullets[i][5]!= ALIVE){
  111.        
  112.       continue;
  113.      }
  114.      setPosition(bullets[i][1],bullets[i][2]);
  115.      if(collidesWith(s,true)){
  116.      return true;
  117.      
  118.      }
  119.      } 
  120.      return false;
  121.   }
  122.  
  123. }