📄 mariogamecanvas.java
字号:
/**
* <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 + -