⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mariogamecanvas.java

📁 一个很好的j2ms的元代码不是很专业的很适合初学者的哦
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 * <p>Title: Mario</p>
 * <p>Description:
 * You cannot remove this copyright and notice.
 * You cannot use this file any part without the express permission of the author.
 * All Rights Reserved</p>
 * <p>Copyright: lizhenpeng (c) 2004</p>
 * <p>Company: LP&P</p>
 * @author lizhenpeng
 * @version 1.0.0
 */

package mario;

import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;
import lipeng.*;

public class MarioGameCanvas
  extends Canvas
  implements Runnable,CommandListener,LPIGameStart
{
  // method
  public MarioGameCanvas(MarioMIDlet midlet)
  {
    this.setFullScreenMode(true);
    this.midlet=midlet;
    this.width=this.getWidth();
    this.height=this.getHeight();
    setCommandListener(this);
    this.addCommand(mainMenu);
    dm=new LPDrawManage(width,height);
    if(record.IsEmpty())
    {
      try
      {
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        DataOutputStream dos=new DataOutputStream(baos);
        dos.writeInt(1);
        this.record.addRecord(baos.toByteArray());
        dos.close();
        baos.close();
      }
      catch(Exception e)
      {
        System.out.println("byte write error");
      }
    }
    loadGameResource(0);
    imMainSmall16=new LPImageManage("small16.png");
    imMainNormal32=new LPImageManage("normal32.png");
    imMainFire32=new LPImageManage("fire32.png");
    imSprite8=new LPImageManage("sprite8.png");
    imSprite16=new LPImageManage("sprite16.png");
    imEnemy24=new LPImageManage("enemy24.png");
    imSprite48=new LPImageManage("sprite48.png");

    gm=new MarioGameManage(this);
    gm.gameState=MarioGameManage.GAMESTATE_MENU;
  }

  private void loadMap(String fileName,char MapArray[][],int width,int height)
  {
    InputStream inStream=getClass().getResourceAsStream("/"+fileName);
    DataInputStream in=new DataInputStream(inStream);
    int i;
    try
    {
      for(i=0;i<height;i++)
      {
        for(int j=0;j<width;j++)
        {
          MapArray[i][j]=in.readChar();
        }
      }
      in.close();
    }
    catch(IOException e)
    {
      System.out.println("read map file"+fileName+" error!");
      System.out.println(e.toString());
    }
  }

  public void loadGameResource(int level)
  {
    int i,j;
    imMap=new LPImageManage("level_2_1.png");
    mapData=this.level_1_map;
    map=new LPMaps(imMap,mapData,32,20,16,"level_2_1");
    map.x=0;
    map.y=0;
    if(gm!=null&&gm.mainSprite!=null)
    {
      gm.mainSprite.judgeMap=map;
    }
  }

  public void commandAction(Command c,Displayable d)
  {
    if(c==mainMenu)
    {
      removeCommand(mainMenu);
      addCommand(back);
      this.saveGameState=gm.gameState;
      gm.gameState=MarioGameManage.GAMESTATE_MENU;
      this.isSaveState=true;
      gm.menu.init();
    }
    if(c==back)
    {
      removeCommand(back);
      addCommand(mainMenu);
      gm.gameState = MarioGameManage.GAMESTATE_GAMELOOP;
    }
  }

  public void run()
  {
    try
    {
      Thread currentThread=Thread.currentThread();
      while(currentThread==gameThread)
      {
        startTime=System.currentTimeMillis();
        switch(gm.gameState)
        {
          case MarioGameManage.GAMESTATE_MENU:
            gm.menu.action();
            break;
          case MarioGameManage.GAMESTATE_GAMELOOP:
            gm.action();
            break;
          case MarioGameManage.GAMESTATE_PAUSE:
            break;
          case MarioGameManage.GAMESTATE_REINIT:
            gm.reInit();
            break;
        }
        repaint(0,0,width,height);
        serviceRepaints();
        endTime=System.currentTimeMillis();
        if((endTime-startTime)<FRAME_TIME)
        {
          Thread.sleep(FRAME_TIME-(endTime-startTime));
        }
      }
    }
    catch(InterruptedException ie)
    {
      System.out.println(ie.toString());
    }
  }

  public void paint(Graphics g)
  {
    switch(gm.gameState)
    {
      case MarioGameManage.GAMESTATE_MENU:
        switch(gm.menu.menuState)
        {
          case LPMenu.MENU_STATE_MAIN:
            drawMainMenuScreen(g);
            break;
        }
        break;
      case MarioGameManage.GAMESTATE_GAMELOOP:
        drawGameLoopScreen(g);
        break;
      case MarioGameManage.GAMESTATE_PAUSE:
        drawPauseScreen(g);
        break;
      case MarioGameManage.GAMESTATE_REINIT:
        drawTryAgainScreen(g);
        break;
    }
  }

  private void drawTryAgainScreen(Graphics g)
  {
    int offset=(height-font.getHeight()*2)/2;
    g.setColor(0,0,0);
    g.fillRect(0,0,width,height);
    g.setFont(font);
    g.setColor(255,0,0);
    g.drawString("准备好!",(width-font.stringWidth("准备好!"))/2,
                 offset+font.getHeight()*0,g.LEFT|g.TOP);
    g.drawString("再来一次",(width-font.stringWidth("准备好!"))/2,
                 offset+font.getHeight()*1,g.LEFT|g.TOP);
  }

  public void loadSaveState()
  {
    try
    {
      int i,j;
      byte[] rec=record.getRecord(1);
      ByteArrayInputStream bais=new ByteArrayInputStream(rec);
      DataInputStream dis=new DataInputStream(bais);
      gm.initGameState();
      gm.goldNum=dis.readInt();
      loadGameResource(1);
      gm.mainSprite.judgeMap.x=dis.readInt();
      gm.mainSprite.judgeMap.y=dis.readInt();

      for(i=gm.mainSprite.judgeMap.mapArray.length-1;i>=0;--i)
      {
        for(j=gm.mainSprite.judgeMap.mapArray[i].length-1;j>=0;--j)
        {
          gm.mainSprite.judgeMap.mapArray[i][j]=dis.readChar();
        }
      }

      gm.initLevel_1_1();


      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.brick[i].readData(dis);
      }
      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.brokenBrick[i].readData(dis);
      }
      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.bullet[i].readData(dis);
      }
      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.enemy[i].readData(dis);
      }
      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.tortoise[i].readData(dis);
      }


      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.bridge[i].readData(dis);
      }

      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.gold[i].readData(dis);
      }
      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.mashRooms[i].readData(dis);
      }

      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.flowers[i].readData(dis);
      }

      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.stick[i].readData(dis);
      }
      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.staticGold[i].readData(dis);
      }
      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.ugGold[i].readData(dis);
      }

      for(i=dis.readInt()-1;i>=0;--i)
      {
        gm.ugBrick[i].readData(dis);
      }

      gm.mainSprite.readData(dis);

      dis.close();
      bais.close();
    }
    catch(Exception e)
    {
      System.out.println("read state error");
    }
  }


  private void drawGameLoopScreen(Graphics g)
  {
    int i;
    g.setClip(0,0,gm.canvas.width,gm.canvas.height);
    dm.drawMaps(g,gm.mainSprite.judgeMap);
    dm.drawSprite(g,imSprite8,gm.brokenBrick);
    dm.drawSprite(g,imSprite16,gm.brick);
    dm.drawSprite(g,imSprite16,gm.gold);
    for(i=gm.mashRooms.length-1;i>=0;--i)
    {
      gm.mashRooms[i].draw(g,imSprite16);
    }
    for(i=gm.flowers.length-1;i>=0;--i)
    {
      gm.flowers[i].draw(g,imSprite16);
    }
    dm.drawSprite(g,imEnemy24,gm.tortoise);
    dm.drawSprite(g,imSprite16,gm.staticGold);
    dm.drawSprite(g,imSprite48,gm.stick);
    dm.drawSprite(g,imSprite8,gm.bullet);

    dm.drawSprite(g,imSprite16,gm.bridge);
    switch(gm.mainSprite.mainSpriteState)
    {
      case MarioMainSprite.SMALL_SPRITE:
      case MarioMainSprite.DEAD_SPRITE:
        dm.drawSprite(g,imMainSmall16,gm.mainSprite);
        break;
      case MarioMainSprite.NORMAL_SPRITE:
        dm.drawSprite(g,imMainNormal32,gm.mainSprite);
        break;
      case MarioMainSprite.FIRE_SPRITE:
        dm.drawSprite(g,imMainFire32,gm.mainSprite);
        break;
      case MarioMainSprite.GROW_SPRITE:
        if(gm.mainSprite.growCnt%2==0)
        {
          dm.drawSprite(g,imMainSmall16,gm.mainSprite);
        }
        else
        {
          dm.drawSprite(g,imMainNormal32,gm.mainSprite);
        }
        break;
      case MarioMainSprite.BECOME_SMALL:
        if(gm.mainSprite.becomeCnt%2==0)
        {
          dm.drawSprite(g,imMainNormal32,gm.mainSprite);
        }
        else
        {
          dm.drawSprite(g,imMainSmall16,gm.mainSprite);
        }
        break;

      case MarioMainSprite.BECOME_FIRE:
        if(gm.mainSprite.becomeCnt%2==0)
        {
          dm.drawSprite(g,imMainNormal32,gm.mainSprite);
        }
        else
        {
          dm.drawSprite(g,imMainFire32,gm.mainSprite);
        }
        break;
    }
    g.setClip(0,0,gm.canvas.width,gm.canvas.height);
  }

  private void drawMainMenuScreen(Graphics g)
  {
    int menuOffset=(height-font.getHeight()*4)/2;
    int tmpY=0;
    g.setFont(font);

    g.setClip(0,0,width,height);
    dm.drawMaps(g,map);
    g.setClip(0,0,width,height);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -