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

J2ME

开发平台:

Java

  1. /**
  2.  * <p>Title: Mario</p>
  3.  * <p>Description:
  4.  * You cannot remove this copyright and notice.
  5.  * You cannot use this file any part without the express permission of the author.
  6.  * All Rights Reserved</p>
  7.  * <p>Copyright: lizhenpeng (c) 2004</p>
  8.  * <p>Company: LP&P</p>
  9.  * @author lizhenpeng
  10.  * @version 1.0.0
  11.  */
  12. package mario;
  13. import lipeng.LPSprite;
  14. import lipeng.LPRect;
  15. import java.io.DataInputStream;
  16. import java.io.DataOutputStream;
  17. import java.io.IOException;
  18. public class MarioBullet
  19.   extends LPSprite
  20. {
  21.   protected MarioGameManage gm;
  22.   private LPRect rect1=new LPRect();
  23.   private LPRect rect2=new LPRect();
  24.   protected int xSpeed;
  25.   protected int ySpeed;
  26.   protected int dy;
  27.   public void writeData(DataOutputStream dos) throws IOException
  28.   {
  29.     super.writeData(dos);
  30.     dos.writeInt(xSpeed);
  31.     dos.writeInt(ySpeed);
  32.     dos.writeInt(dy);
  33.   }
  34.   public void readData(DataInputStream dis) throws IOException
  35.   {
  36.     super.readData(dis);
  37.     xSpeed = dis.readInt();
  38.     ySpeed = dis.readInt();
  39.     dy = dis.readInt();
  40.   }
  41.   public MarioBullet(MarioGameManage gm)
  42.   {
  43.     isHidden=true;
  44.     rect1.dx = 8;
  45.     rect1.dy = 8;
  46.     rect2.dx = 16;
  47.     rect2.dy = 16;
  48.     this.gm = gm;
  49.   }
  50.   public void initBullet(int x,int y,int xSpeed,int ySpeed)
  51.   {
  52.     this.x=x;
  53.     this.y=y;
  54.     this.frameCnt=2;
  55.     this.isHidden=false;
  56.     this.xSpeed=xSpeed;
  57.     this.ySpeed=ySpeed;
  58.   }
  59.   // protected void
  60.   protected boolean checkTileCollisionHorn()
  61.   {
  62.     int i;
  63.     rect1.x=x+gm.mainSprite.judgeMap.x+xSpeed;
  64.     rect1.y=y+gm.mainSprite.judgeMap.y;
  65.     i=(x+gm.mainSprite.judgeMap.x+xSpeed+4)/gm.mainSprite.judgeMap.tileSize;
  66.     if(i<0||i>gm.mainSprite.judgeMap.w-1)
  67.       return false;
  68.     int yTile1=(y+gm.mainSprite.judgeMap.y)/gm.mainSprite.judgeMap.tileSize;
  69.     if(yTile1<0||yTile1>gm.mainSprite.judgeMap.h-1)
  70.       return false;
  71.     if(((gm.mainSprite.judgeMap.mapArray[yTile1][i]>>8)&0x04)==0x04)
  72.     {
  73.       rect2.x=i*16;
  74.       rect2.y=yTile1*16;
  75.       if(LPRect.IntersectRect(rect1,rect2))
  76.       {
  77.         isHidden = true;
  78.         return true;
  79.       }
  80.     }
  81.     return false;
  82.   }
  83.   protected void checkTileCollisionVert()
  84.   {
  85.     if(this.dy>=0)
  86.     {
  87.       for(int i=(y+gm.mainSprite.judgeMap.y)/
  88.           gm.mainSprite.judgeMap.tileSize;
  89.           i<=(y+gm.mainSprite.judgeMap.y+dy)/gm.mainSprite.judgeMap.tileSize;i++)
  90.       {
  91.         if(i<0||i>gm.mainSprite.judgeMap.h-1)
  92.         {
  93.           continue;
  94.         }
  95.         int xTile1=(x+gm.mainSprite.judgeMap.x+4)/
  96.           gm.mainSprite.judgeMap.tileSize;
  97.         if(xTile1>gm.mainSprite.judgeMap.w-1||xTile1<0)
  98.         {
  99.           return;
  100.         }
  101.         if(((gm.mainSprite.judgeMap.mapArray[i][xTile1]>>8)&0x02)==
  102.            0x02)
  103.         {
  104.           dy=-8;
  105.           return;
  106.         }
  107.       }
  108.     }
  109.   }
  110.   protected void checkSpriteCollisionVert()
  111.   {
  112.     if(dy>=0)
  113.     {
  114.       int i;
  115.       switch(gm.gameState)
  116.       {
  117.         case MarioGameManage.GAMESTATE_GAMELOOP:
  118.           for(i=gm.brick.length-1;i>=0;--i)
  119.           {
  120.             if(!gm.brick[i].isHidden)
  121.             {
  122.               if(((y+8)<=gm.brick[i].y)&&
  123.                  ((y+dy+8)>=gm.brick[i].y)
  124.                  &&(x>=gm.brick[i].x-2)&&(x<=gm.brick[i].x+14))
  125.               {
  126.                 //dy=gm.brick[i].y-(y+16);
  127.                 dy = -8;
  128.                 return;
  129.               }
  130.             }
  131.           }
  132.           break;
  133.       }
  134.     }
  135.   }
  136.   public void action()
  137.   {
  138.     if(isHidden)
  139.     {
  140.       return;
  141.     }
  142.     if(x>gm.canvas.width||x<-32
  143.        ||y>gm.canvas.height||y<-32)
  144.     {
  145.       isHidden=true;
  146.       return;
  147.     }
  148.     dy+=4;
  149.     checkSpriteCollisionVert();
  150.     checkTileCollisionVert();
  151.     y+=dy;
  152.     if(!checkTileCollisionHorn())
  153.     {
  154.       x+=xSpeed;
  155.     }
  156.     ++frameCnt;
  157.     if(frameCnt<2||frameCnt>5)
  158.     {
  159.       frameCnt=2;
  160.     }
  161.   }
  162. }