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

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.*;
  14. public class MarioGameManage
  15. implements LPIGameManager
  16. {
  17. //method
  18.   public MarioGameManage(MarioGameCanvas canvas)
  19.   {
  20.     this.canvas = canvas;
  21.     mainSprite = new MarioMainSprite(this,canvas.map);
  22.     int i;
  23.     brokenBrick = new MarioBrokenBrick[16];
  24.     for(i=brokenBrick.length-1;i>=0;--i)
  25.     {
  26.       brokenBrick[i] = new MarioBrokenBrick();
  27.     }
  28.     flowers = new Flower[2];
  29.     for(i=flowers.length-1;i>=0;--i)
  30.     {
  31.       flowers[i] = new Flower();
  32.     }
  33.     mashRooms = new Mashroom[3];
  34.     mashRooms[mashRooms.length-1] = new MashroomPeople(this);
  35.     for(i=mashRooms.length-2;i>=0;--i)
  36.     {
  37.       mashRooms[i] = new Mashroom(this);
  38.     }
  39.     gold = new Gold[4];
  40.     for(i=gold.length-1;i>=0;--i)
  41.     {
  42.       gold[i] = new Gold();
  43.     }
  44.     bullet = new MarioBullet[6];
  45.     for(i=bullet.length-1;i>=0;--i)
  46.     {
  47.       bullet[i] = new MarioBullet(this);
  48.     }
  49.   }
  50.   public void menuBeginNewGame()
  51.   {
  52.     //开始游戏
  53.     gameState = GAMESTATE_GAMELOOP;
  54.     initLevel_1_1();
  55.     mainSprite.allAction=0;
  56.     mainSprite.dy=0;
  57.     mainSprite.judgeMap=canvas.map;
  58.     mapObjectInitOffset(mainSprite.judgeMap.x,mainSprite.judgeMap.y);
  59.   }
  60.   public void menuLoadGame()
  61.   {
  62.     canvas.loadSaveState();
  63.     if(!canvas.isSaveState)
  64.     {
  65.       canvas.addCommand(canvas.mainMenu);
  66.       if(menu.isVolOn)
  67.       {
  68.         bgPlayer.stop();
  69.         bgPlayer.close();
  70.         bgPlayer =null;
  71.         System.gc();
  72.         beatPlayer= new LPAudioPlayer("beat.mmf","application/vnd.smaf");
  73.       }
  74.     }
  75.     else
  76.     {
  77.       canvas.removeCommand(canvas.back);
  78.       canvas.addCommand(canvas.mainMenu);
  79.       canvas.isSaveState=false;
  80.     }
  81.     gameState=GAMESTATE_GAMELOOP;
  82.   }
  83.   public void menuAudio()
  84.   {
  85.     if(!canvas.isSaveState)
  86.     {
  87.       if(menu.isVolOn)
  88.       {
  89.         if(beatPlayer!=null)
  90.         {
  91.           beatPlayer.close();
  92.           beatPlayer=null;
  93.           System.gc();
  94.         }
  95.         bgPlayer = new LPAudioPlayer("bg.mid","audio/midi",true);
  96.         bgPlayer.setLoop();
  97.         bgPlayer.play();
  98.       }
  99.       else
  100.       {
  101.         bgPlayer.stop();
  102.         bgPlayer.close();
  103.         bgPlayer = null;
  104.         System.gc();
  105.       }
  106.     }
  107.         else
  108.     {
  109.       if(menu.isVolOn)
  110.       {
  111.         if(beatPlayer==null)
  112.         {
  113.           beatPlayer = new LPAudioPlayer("beat.mmf","application/vnd.smaf");
  114.         }
  115.       }
  116.     }
  117.   }
  118.   public void menuAbout()
  119.   {
  120.   }
  121.   public void menuExitGame()
  122.   {
  123.     canvas.midlet.exitMIDlet();
  124.   }
  125.   public void reInit()
  126.   {
  127.     int i;
  128.     if(reInitCnt==0)
  129.     {
  130.       for(i=this.brokenBrick.length-1;i>=0;--i)
  131.       {
  132.         brokenBrick[i].isHidden=true;
  133.       }
  134.       for(i=bullet.length-1;i>=0;--i)
  135.       {
  136.         bullet[i].isHidden=true;
  137.       }
  138.       for(i=mashRooms.length-1;i>=0;--i)
  139.       {
  140.         mashRooms[i].isHidden=true;
  141.       }
  142.       for(i=flowers.length-1;i>=0;--i)
  143.       {
  144.         flowers[i].isHidden=true;
  145.       }
  146.       timerCnt=0;
  147.       mainSprite.init();
  148.       canvas.loadGameResource(1);
  149.       mainSprite.judgeMap = canvas.map;
  150.       mainSprite.judgeMap.x=0;
  151.       mainSprite.judgeMap.y=0;
  152.       reInitLevel_1_1();
  153.       mapObjectInitOffset(mainSprite.judgeMap.x,mainSprite.judgeMap.y);
  154.     }
  155.     if(++reInitCnt==10)
  156.     {
  157.       reInitCnt=0;
  158.       gameState=GAMESTATE_GAMELOOP;
  159.     }
  160.   }
  161.   public void mapObjectInitOffset(int offsetX,int offsetY)
  162.   {
  163.     int i;
  164.     for(i=brick.length-1;i>=0;--i)
  165.     {
  166.       brick[i].x -= offsetX;
  167.       brick[i].y -= offsetY;
  168.     }
  169.     for(i=enemy.length-1;i>=0;--i)
  170.     {
  171.       enemy[i].x -= offsetX;
  172.       enemy[i].y -= offsetY;
  173.     }
  174.     for(i=tortoise.length-1;i>=0;--i)
  175.     {
  176.       tortoise[i].x-=offsetX;
  177.       tortoise[i].y-=offsetY;
  178.     }
  179.     for(i=staticGold.length-1;i>=0;--i)
  180.     {
  181.       staticGold[i].x -= offsetX;
  182.       staticGold[i].y -= offsetY;
  183.     }
  184.     for(i=stick.length-1;i>=0;--i)
  185.     {
  186.       stick[i].x -= offsetX;
  187.       stick[i].y -= offsetY;
  188.     }
  189.     for(i=bridge.length-1;i>=0;--i)
  190.     {
  191.       bridge[i].x -= offsetX;
  192.       bridge[i].y -= offsetY;
  193.     }
  194.   }
  195.   public void reInitBgMedia()
  196.   {
  197.     if(menu.isVolOn)
  198.     {
  199.       beatPlayer.close();
  200.       beatPlayer = null;
  201.       System.gc();
  202.       bgPlayer = new LPAudioPlayer("bg.mid","audio/midi",true);
  203.       bgPlayer.setLoop();
  204.       bgPlayer.play();
  205.     }
  206.   }
  207.   private void checkEnemyCollision()
  208.   {
  209.     int i;
  210.     int j;
  211.     rect1.dx = 16;
  212.     rect1.dy = 16;
  213.     rect2.dx = 16;
  214.     rect2.dy = 16;
  215.     for(i=tortoise.length-1;i>=0;--i)
  216.     {
  217.       if(!tortoise[i].isHidden)
  218.       {
  219.         if(tortoise[i].state==2)
  220.         {
  221.           rect1.x=tortoise[i].x;
  222.           rect1.y=tortoise[i].y+8;
  223.           for(j=enemy.length-1;j>=0;--j)
  224.           {
  225.             if(!enemy[j].isHidden)
  226.             {
  227.               if(enemy[j].isCheck)
  228.               {
  229.                 rect2.x=enemy[j].x;
  230.                 rect2.y=enemy[j].y;
  231.                 if(LPRect.IntersectRect(rect1,rect2))
  232.                 {
  233.                   enemy[j].changeDirection();
  234.                 }
  235.               }
  236.             }
  237.           }
  238.           for(j=tortoise.length-1;j>=0;--j)
  239.           {
  240.             if(i!=j)
  241.             {
  242.               if(!tortoise[j].isHidden)
  243.               {
  244.                 if(tortoise[j].isCheck)
  245.                 {
  246.                   rect2.x=tortoise[j].x;
  247.                   rect2.y=tortoise[j].y+8;
  248.                   if(LPRect.IntersectRect(rect1,rect2))
  249.                   {
  250.                     tortoise[j].changeDirection();
  251.                   }
  252.                 }
  253.               }
  254.             }
  255.           }
  256.         }
  257.       }
  258.     }
  259.   }
  260.   public void action()
  261.   {
  262.     int i;
  263.     mainSprite.action();
  264.     objectOffset();
  265.     checkEnemyCollision();
  266.     for(i=brokenBrick.length-1;i>=0;--i)
  267.     {
  268.       brokenBrick[i].action();
  269.     }
  270.     for(i=brick.length-1;i>=0;--i)
  271.     {
  272.       brick[i].action();
  273.     }
  274.     for(i=mashRooms.length-1;i>=0;--i)
  275.     {
  276.       if(!mashRooms[i].isHidden)
  277.       {
  278.         mashRooms[i].action();
  279.       }
  280.     }
  281.     for (i = flowers.length - 1; i >= 0; --i)
  282.     {
  283.       if(!flowers[i].isHidden)
  284.       {
  285.         flowers[i].action();
  286.       }
  287.     }
  288.     for(i=gold.length-1;i>=0;--i)
  289.     {
  290.       if (!gold[i].isHidden)
  291.       {
  292.         gold[i].action();
  293.       }
  294.     }
  295.     for(i=enemy.length-1;i>=0;--i)
  296.     {
  297.       if(!enemy[i].isHidden)
  298.       {
  299.         enemy[i].action();
  300.       }
  301.     }
  302.     for(i=tortoise.length-1;i>=0;--i)
  303.     {
  304.       if(!tortoise[i].isHidden)
  305.       {
  306.         tortoise[i].action();
  307.       }
  308.     }
  309.     for(i=staticGold.length-1;i>=0;--i)
  310.     {
  311.       if(!staticGold[i].isHidden)
  312.       {
  313.         staticGold[i].action();
  314.       }
  315.     }
  316.     for(i=stick.length-1;i>=0;--i)
  317.     {
  318.       if(!stick[i].isHidden)
  319.       {
  320.         stick[i].action();
  321.       }
  322.     }
  323.     for(i=bullet.length-1;i>=0;--i)
  324.     {
  325.       if(!bullet[i].isHidden)
  326.       {
  327.         bullet[i].action();
  328.       }
  329.     }
  330.     for(i=bridge.length-1;i>=0;--i)
  331.     {
  332.       if(!bridge[i].isHidden)
  333.       {
  334.         bridge[i].action();
  335.       }
  336.     }
  337.     if(canvas.isPressStar)
  338.     {
  339.       canvas.saveCurrentState();
  340.       canvas.isPressStar = false;
  341.     }
  342.   }
  343.   public void judgeKeyCode(int keyCode, int gameKeyCode)
  344.   {
  345.     menu.judgeKeyCode(keyCode,gameKeyCode);
  346.     if(gameState==GAMESTATE_GAMELOOP)
  347.     {
  348.       mainSprite.judgeKeyCode(keyCode,gameKeyCode);
  349.     }
  350.   }
  351.   public void freeKey(int keyCode, int gameKeyCode)
  352.   {
  353.     menu.freeKey(keyCode,gameKeyCode);
  354.     if(gameState==GAMESTATE_GAMELOOP)
  355.     {
  356.       mainSprite.freeKey(keyCode,gameKeyCode);
  357.     }
  358.   }
  359.   private void objectOffset()
  360.   {
  361.     int i;
  362.     for(i=brokenBrick.length-1;i>=0;--i)
  363.     {
  364.       if(!brokenBrick[i].isHidden)
  365.       {
  366.         brokenBrick[i].x += mainSprite.bgdx;
  367.         brokenBrick[i].y += mainSprite.bgdy;
  368.       }
  369.     }
  370.     for(i=brick.length-1;i>=0;--i)
  371.     {
  372.       brick[i].x += mainSprite.bgdx;
  373.       brick[i].y += mainSprite.bgdy;
  374.     }
  375.     for(i=flowers.length-1;i>=0;--i)
  376.     {
  377.       if (!flowers[i].isHidden)
  378.       {
  379.         flowers[i].x += mainSprite.bgdx;
  380.         flowers[i].y += mainSprite.bgdy;
  381.       }
  382.     }
  383.     for(i=mashRooms.length-1;i>=0;--i)
  384.     {
  385.       if (!mashRooms[i].isHidden)
  386.       {
  387.         mashRooms[i].x += mainSprite.bgdx;
  388.         mashRooms[i].y += mainSprite.bgdy;
  389.       }
  390.     }
  391.     for(i=gold.length-1;i>=0;--i)
  392.     {
  393.       if (!gold[i].isHidden)
  394.       {
  395.         gold[i].x += mainSprite.bgdx;
  396.         gold[i].y += mainSprite.bgdy;
  397.       }
  398.     }
  399.     for(i=enemy.length-1;i>=0;--i)
  400.     {
  401.       if(!enemy[i].isHidden)
  402.       {
  403.         enemy[i].x+=mainSprite.bgdx;
  404.         enemy[i].y+=mainSprite.bgdy;
  405.       }
  406.     }
  407.     for(i=tortoise.length-1;i>=0;--i)
  408.     {
  409.       if(!tortoise[i].isHidden)
  410.       {
  411.         tortoise[i].x+=mainSprite.bgdx;
  412.         tortoise[i].y+=mainSprite.bgdy;
  413.       }
  414.     }
  415.     for(i=staticGold.length-1;i>=0;--i)
  416.     {
  417.       if(!staticGold[i].isHidden)
  418.       {
  419.         staticGold[i].x += mainSprite.bgdx;
  420.         staticGold[i].y += mainSprite.bgdy;
  421.       }
  422.     }
  423.     for(i=stick.length-1;i>=0;--i)
  424.     {
  425.       stick[i].x += mainSprite.bgdx;
  426.       stick[i].y += mainSprite.bgdy;
  427.     }
  428.     for(i=bullet.length-1;i>=0;--i)
  429.     {
  430.       bullet[i].x += mainSprite.bgdx;
  431.       bullet[i].y += mainSprite.bgdy;
  432.     }
  433.     for(i=bridge.length-1;i>=0;--i)
  434.     {
  435.       if(!bridge[i].isHidden)
  436.       {
  437.         bridge[i].x+=mainSprite.bgdx;
  438.         bridge[i].y+=mainSprite.bgdy;
  439.       }
  440.     }
  441.   }
  442.   public void reInitLevel_1_1()
  443.   {
  444.     int i;
  445.     mainSprite.x=0;
  446.     reInitCreateObject();
  447.     if(mainSprite.mainSpriteState==MarioMainSprite.SMALL_SPRITE)
  448.     {
  449.       mainSprite.y=320-48;
  450.     }
  451.     else
  452.     {
  453.       mainSprite.y=320-64;
  454.     }
  455.     brick[0].reInit(16*17,16*10);
  456.     brick[1].reInit(16*19,16*10);
  457.     brick[2].reInit(16*11,16*10);
  458.     brick[3].reInit(16*18,16*6);
  459.     brick[4].reInit(16*57,16*10);
  460.     brick[5].reInit(16*70,16*10);
  461.     brick[6].reInit(16*83,16*6);
  462.     brick[7].reInit(16*84,16*6);
  463.     brick[8].reInit(16*93,16*10);
  464.     brick[9].reInit(16*96,16*10);
  465.     brick[10].reInit(16*104,16*6);
  466.     tortoise[0].reInit(16*102,16*13-8);
  467.   }
  468.   public void initLevel_1_1()
  469.   {
  470.     int i;
  471.     reInitCreateObject();
  472.     mainSprite.x = 0;
  473.     if(mainSprite.mainSpriteState==MarioMainSprite.SMALL_SPRITE)
  474.     {
  475.       mainSprite.y=320-48;
  476.     }
  477.     else
  478.     {
  479.       mainSprite.y=320-64;
  480.     }
  481.     brick = new MarioBrick[8];
  482.     brick[0]=new MarioBrickGemQuestion(16*12,16*15);
  483.     brick[1]=new MarioBrickGoldQuestion(16*13,16*12);
  484.     brick[2]=new MarioBrickGoldQuestion(16*17,16*12);
  485.     brick[3]=new MarioBrickGold(16*19,16*15);
  486.     brick[4]=new MarioBrickGold(16*28,16*14);
  487.     brick[5]=new MarioBrickGemQuestion(16*29,16*14);
  488.     brick[6]=new MarioBrickGoldQuestion(16*30,16*14);
  489.     brick[7]=new MarioBrickGemHidden(16*22,16*6);
  490.     enemy = new MarioEnemySprite[0];
  491.     tortoise = new EnemyTortoise[1];
  492.     tortoise[0] = new EnemyTortoise(16*26,16*13-8,this);
  493.     staticGold= new StaticGold[0];
  494.     stick = new Stick[0];
  495.     bridge = new FallBridge[0];
  496.   }
  497.   public boolean createGold(int x,int y)
  498.   {
  499.     int i;
  500.     for(i=gold.length-1;i>=0;--i)
  501.     {
  502.       if(gold[i].isHidden)
  503.       {
  504.         gold[i].reInit(x,y);
  505.         return true;
  506.       }
  507.     }
  508.     return false;
  509.   }
  510.   public void createGemPeople(int x,int y)
  511.   {
  512.     mashRooms[mashRooms.length-1].reInit(x,y);
  513.   }
  514.   public void createGem(int x,int y)
  515.   {
  516.     int i;
  517.     switch(mainSprite.mainSpriteState)
  518.     {
  519.       case MarioMainSprite.SMALL_SPRITE:
  520.         for(i=mashRooms.length-2;i>=0;--i)
  521.         {
  522.           if(mashRooms[i].isHidden)
  523.           {
  524.             mashRooms[i].reInit(x,y);
  525.             return;
  526.           }
  527.         }
  528.         break;
  529.       case MarioMainSprite.NORMAL_SPRITE:
  530.       case MarioMainSprite.FIRE_SPRITE:
  531.         for(i=flowers.length-1;i>=0;--i)
  532.         {
  533.           if(flowers[i].isHidden)
  534.           {
  535.             flowers[i].reInit(x,y);
  536.             return;
  537.           }
  538.         }
  539.         break;
  540.     }
  541.   }
  542.   public void initGameState()
  543.   {
  544.     timerCnt = 0;
  545.     goldNum = 0;
  546.     this.mainSprite.init();
  547.   }
  548.   public void createBrokenBrick(int x,int y,int xSpeed,int ySpeed)
  549.   {
  550.     int i;
  551.     for(i=brokenBrick.length-1;i>=0;--i)
  552.     {
  553.       if(brokenBrick[i].isHidden)
  554.       {
  555.         brokenBrick[i].init(x,y,xSpeed,ySpeed);
  556.         return;
  557.       }
  558.     }
  559.   }
  560.   public void reInitCreateObject()
  561.   {
  562.     int i;
  563.     for(i=brokenBrick.length-1;i>=0;--i)
  564.     {
  565.       brokenBrick[i].isHidden = true;
  566.     }
  567.     for(i=bullet.length-1;i>=0;--i)
  568.     {
  569.       bullet[i].isHidden = true;
  570.     }
  571.     for(i=mashRooms.length-1;i>=0;--i)
  572.     {
  573.       mashRooms[i].isHidden = true;
  574.     }
  575.     for(i=this.flowers.length-1;i>=0;--i)
  576.     {
  577.       flowers[i].isHidden = true;
  578.     }
  579.   }
  580.   public void createBullet(int x,int y,int xSpeed,int ySpeed)
  581.   {
  582.     int i;
  583.     for(i=bullet.length-1;i>=0;--i)
  584.     {
  585.       if(bullet[i].isHidden)
  586.       {
  587.         bullet[i].initBullet(x,y,xSpeed,ySpeed);
  588.         return;
  589.       }
  590.     }
  591.   }
  592. //property
  593.   //public game objects
  594.   public MarioBrokenBrick[] brokenBrick;
  595.   public MarioBullet[] bullet;
  596.   public MarioBrick[] brick;
  597.   public Gold[] gold;
  598.   public Mashroom[] mashRooms;
  599.   public Flower[] flowers;
  600.   public MarioEnemySprite[] enemy;
  601.   public EnemyTortoise[] tortoise;
  602.   public StaticGold[] staticGold;
  603.   public Stick[] stick;
  604.   public FallBridge[] bridge;
  605.   public StaticGold[] ugGold;
  606.   public MarioBrick[] ugBrick;
  607.   public LPMenu menu = new LPMenu(this);
  608.   public MarioMainSprite mainSprite;
  609.   public MarioGameCanvas canvas;
  610. // media
  611.   public LPAudioPlayer bgPlayer = new LPAudioPlayer("bg.mid","audio/midi");
  612.   public LPAudioPlayer beatPlayer= new LPAudioPlayer("beat.mmf","application/vnd.smaf");
  613. // game logic control
  614.   public int gameState;
  615.   public int goldNum;
  616.   public int time;
  617.   private int timerCnt;
  618.   private int reInitCnt;
  619.   private LPRect rect1 = new LPRect();
  620.   private LPRect rect2 = new LPRect();
  621. // final
  622.  //game state
  623.   public static final int GAMESTATE_MENU = 1;
  624.   public static final int GAMESTATE_GAMELOOP = 2;
  625.   public static final int GAMESTATE_PAUSE = 3;
  626.   public static final int GAMESTATE_REINIT = 6;
  627. }