📄 gamecanv.java
字号:
package LR;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.*;
import java.util.*;
import java.io.*;
public class gameCanv extends GameCanvas implements Runnable
{
private String GAME_WELCOME="欢迎使用";
private String GAME_AUTHOR="Whiphone";
private String GAME_NAME="的游戏";
private String GAME_INSTRUCT="软键打开菜单";
private final static int GAME_LEVEL=1;
private final static int GAME_SPEED=10;
private final static int GAME_OBJ_SIZE=5;
private final static int GAME_OBJ_REFRESH=50;
private final static int GAME_COUNT=0;
private final static int GAME_BG_COUNT=-20;
private int gameLevel=GAME_LEVEL;
private int gameSpeed=GAME_SPEED;
private int gameObjSize=GAME_OBJ_SIZE;
private int gameObjRefresh=GAME_OBJ_REFRESH;
private int gameCount=GAME_COUNT;
private int gameBgCount=GAME_BG_COUNT;
private boolean isOnFlat=false;
private boolean isOnGame=false;
private gameCharObj gco=null;
private gameFlatObj gfo=null;
private gameFlyObj gfyo=null;
private Image gameTeeth;
private Image gameBg;
private Vector objList;
private Graphics g;
private Thread t=null;
protected gameCanv()
{
super(true);
objList=new Vector();
g=this.getGraphics();
try
{
gameBg=Image.createImage("/bg.png");
//System.out.println("Loaded Picture 2");
gameTeeth=Image.createImage("/teeth.png");
//System.out.println("Loaded Picture 3");
}catch(Exception e){/*System.out.println(e);*/}
this.setFullScreenMode(true);
g.setColor(0,0,0);
g.drawString(GAME_WELCOME,88,70,Graphics.HCENTER|Graphics.TOP);
g.drawString(GAME_AUTHOR+GAME_NAME,88,100,Graphics.HCENTER|Graphics.TOP);
g.drawString(GAME_INSTRUCT,88,130,Graphics.HCENTER|Graphics.TOP);
this.flushGraphics();
System.out.println(System.currentTimeMillis());
// TODO Auto-generated constructor stub
}
public void run() //主线程
{
isOnGame=true;
while(isOnGame)
{
gameCount++;
gameLevelUp(gameCount);
try
{
Thread.sleep(gameSpeed);
}catch(Exception e1){}
g.drawImage(gameBg,0,gameBgCount,0);
addGameObj();
for(int j=0;j<objList.size();j++) //游戏人物和台阶的处理
{
gfo=(gameFlatObj)objList.elementAt(j);
gfo.up();
if(gco==null)
{
gco=new gameCharObj(gfo.getX(),gfo.getY());
}
if(gfo.collidesWith(gco,false))
{
isOnFlat=true;
gfo.doOnChar(gco);
}
else
{
gfo.resetTime();
}
if(gfo.getProperties()>1)
{
gfo.nextFrame();
}
gfo.paint(g);
}
if(gfyo!=null)
{
if(gfyo.collidesWith(gco,false))
{
gfyo.doOnChar(gco);
gfyo=null;
}
else
{
gfyo.go();
gfyo.nextFrame();
gfyo.paint(g);
if(gfyo.getIsBottom())
{
gfyo=null;
}
}
}
keyPressed();
if(!isOnFlat)
{
gco.go();
}
isOnFlat=false;
//***************
if(gameBgCount<0)
{
gameBgCount++;
}
else
{
gameBgCount=-20;
}
//***************
gco.nextFrame();
gco.paint(g);
//***************
drawMenu(g);
//***************
g.drawImage(gameTeeth,0,20,0);
this.flushGraphics();
chkObjIsTop();
if(gco.isDead())
{
setOnGame(false);
}
}
//***************
g.setColor(127,0,85);
g.drawString("Game Over",60,80,0);
//***************
this.flushGraphics();
}
private void drawMenu(Graphics g)
{
String str=null;
g.setColor(0,0,0);
g.fillRect(0,0,176,20);
g.setColor(252,255,0);
g.drawString("No."+Integer.toString(gameLevel),1,1,0);
g.drawString("Life:",40,1,0);
g.drawString("Status:",100,1,0);
switch(gco.getCharStatus())
{
case 0:
str="NOR";
break;
case 1:
str="CON";
break;
case 2:
str="SPU";
break;
}
g.drawString(str,150,1,0);
g.setColor(120,244,0);
g.fillRect(70,5,26,10);
g.setColor(141,0,236);
for(int i=0;i<gco.getCharLife();i++)
{
g.fillRect(72+i*8,7,6,6);
}
}
private void chkObjIsTop()
{
for(int i=0;i<objList.size();i++)
{
gfo=(gameFlatObj)objList.elementAt(i);
if(gfo.getIsTop())
{
objList.removeElementAt(i);
}
}
}
public void addGameObj()
{
if((gameCount%gameObjRefresh==0)&&(objList.size()<gameObjSize))
{
objList.addElement(new gameFlatObj(false));
}
}
public void setOnGame(boolean b) //锟斤拷锟斤拷锟角凤拷锟斤拷戏锟斤拷
{
isOnGame=b;
}
public boolean getIsOnGame() //锟斤拷锟斤拷欠锟斤拷锟较凤拷锟?
{
return isOnGame;
}
public void reStart() //锟斤拷戏锟斤拷始锟斤拷
{
try
{
if(t!=null)
{
setOnGame(false);
}
}
catch(Exception e)
{
//System.out.println(e);
}
t=new Thread(this);
gco=null;
objList.removeAllElements();
objList.addElement(new gameFlatObj(true));
gameLevel=GAME_LEVEL;
gameSpeed=GAME_SPEED;
gameObjSize=GAME_OBJ_SIZE;
gameObjRefresh=GAME_OBJ_REFRESH;
gameCount=GAME_COUNT;
gameBgCount=GAME_BG_COUNT;
isOnFlat=false;
isOnGame=false;
t.start();
}
private void gameLevelUp(int gameCount) //锟斤拷戏锟窖度碉拷锟斤拷
{
if(gameCount%220==0)
{
if(gfyo==null)
{
gfyo=new gameFlyObj();
}
gco.setCharHarm(true);
gameLevel++;
if(gameLevel%10==0)
{
if(gameObjSize<8)
{
gameObjSize++;
}
if(gameObjRefresh>20)
{
gameObjRefresh-=5;
}
}
}
}
private void keyPressed() //锟斤拷锟斤拷锟斤拷应
{
int keyState=this.getKeyStates();
if((keyState&GameCanvas.LEFT_PRESSED)!=0)
{
if(gco!=null)
{
gco.setCharAct(0,isOnFlat);
gco.left(isOnFlat);
}
return;
}
if((keyState&GameCanvas.RIGHT_PRESSED)!=0)
{
if(gco!=null)
{
gco.setCharAct(1,isOnFlat);
gco.right(isOnFlat);
}
return;
}
if(gco!=null)
{
gco.setCharAct(2,isOnFlat);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -