📄 maincanvas.java
字号:
import java.io.IOException;
import java.util.Vector;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
public class MainCanvas extends GameCanvas implements Runnable {
Graphics g; // paint
int scrWidth;
int scrHeight;
private boolean isRunning;
Image bg;
private int gameBgCount=-20;
Image Teeth;
private int gameLevel=1;
private gameFlat gf=null;
private Vector flatList;
private int FlatRefresh=50;
private int FlatSize=5;
private int gameCount=0;
private boolean isOnFlat=false;
private gameChar gc=null;
private gameFly fly=null;
private int count=0;
private int sleeptime=100;
public MainCanvas() {
super(true);
init();
start();
}
private void start() //线程
{
isRunning=true;
Thread t=new Thread(this);
t.start();
}
private void init() {
g=getGraphics();
scrWidth=getWidth();
scrHeight=getHeight();
flatList=new Vector();
this.setFullScreenMode(true); //全屏
try {
bg=Image.createImage("/res/bg.png");
Teeth=Image.createImage("/res/teeth.png");
} catch (IOException e) {
e.printStackTrace();
}
}
public void Stop() {
isRunning=false;
}
public void run() {
while(isRunning){
Logic();
Paint();
try {
Thread.sleep(sleeptime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void Paint() {
g.setColor(0xffffff);
g.fillRect(0,0,scrWidth,scrHeight);
g.setColor(0);
g.drawImage(bg,0,gameBgCount, 0);
g.drawImage(Teeth,0,20,0);
g.setColor(0);
g.fillRect(0,0,scrWidth, 20);
g.setColor(0x00ffff);
g.drawString("NO.",5,1,20);
g.drawString(Integer.toString(gameLevel),25,1, 20);
g.drawString("Life: ",40,1, 20);
g.drawString("Status: ",100,1,20);
if(gc!=null){
String str=new String();
switch(gc.getGameStatus()){
case gameChar.GAME_STATUS_NORM:
str="NORM";
break;
case gameChar.GAME_STATUS_CONF:
g.setColor(0xff7f50);
str="CONF";
break;
case gameChar.GAME_STATUS_SPEEDUP:
g.setColor(0xff7f50);
str="SPEEDUP";
break;
}
g.drawString(str, 135, 1, 20);
}
g.setColor(0xff0000);
g.fillRect(60, 1, 30, 15);
if(gc!=null){
for(int i=0;i<gc.getCharLife();i++)
{
g.setColor(0xf08080);
g.fillRect(60+i*10, 2,9, 13);
}
}
for(int i=0;i<flatList.size();i++)
{
gf=(gameFlat)flatList.elementAt(i);
gf.paint(g);
}
if(gc!=null)
{
gc.nextFrame();
gc.paint(g);
}
if(fly!=null)
{
fly.nextFrame();
fly.paint(g);
}
if(isRunning==false)
{
g.setColor(0xffffff);
g.fillRect(0,0,scrWidth,scrHeight);
g.setColor(0);
g.setColor(0xda000e);
g.drawString("GAMEOVER", getWidth()/2-20,getHeight()/2, 20);
}
g.setColor(0);
g.fillRect(0, getHeight()-20, getWidth(), 20);
g.setColor(0xffffff);
g.setColor(0xffa07a);
g.drawString("层数: "+count+"", 135, 175, 20);
g.drawString("ww",10 ,175 , 20);
this.flushGraphics();
}
private void Logic()
{
if(gameBgCount<0)
gameBgCount++;
else
gameBgCount=-20;
gameCount++;
GameLevel();
if(gameCount%200==0)
{
if(gc!=null)
gc.setCharLife(true);
}
if(gameCount%100==0)
{
if(fly==null){
fly=new gameFly();
}
}
if(fly!=null){
if(fly.collidesWith(gc, true))
{
fly.doOnChar(gc );
fly=null;
}else{
if(fly.isBottom())
fly=null;
else
fly.down();
}
}
if(gameCount%FlatRefresh==0 && flatList.size()<=FlatSize)
{
if(flatList.size()==0)
gf=new gameFlat(true);
else
gf=new gameFlat(false);
flatList.addElement(gf);
}
for(int i=0;i<flatList.size();i++)
{
gf=(gameFlat)flatList.elementAt(i);
gf.nextFrame();
gf.up();
// 生成人物
if(gc==null)
{
gc=new gameChar(gf.getX(),gf.getY());
}
// 判断碰撞 平台和人物
if(gf.collidesWith(gc,false))
{
isOnFlat=true;
gf.doOnChar(gc);
}else
{
}
if(gf.IsTop()){
flatList.removeElementAt(i);
count++;
}
}
Input();
if(!isOnFlat&&gc!=null)
{
gc.down();
}
isOnFlat=false;
if(gc!=null){
gc.statusTimeGo();
}
if(gc!=null){
if(gc.isDead())
{
isRunning=false;
}
}
}
private void GameLevel() {
switch(count/5){
case 0:
gameLevel=1;
sleeptime=100;
break;
case 1:
gameLevel=2;
sleeptime=80;
break;
case 2:
gameLevel=3;
sleeptime=50;
break;
case 3:
gameLevel=4;
sleeptime=20;
break;
case 4:
gameLevel=5;
sleeptime=10;
break;
}
}
private void Input() {
int keyState=this.getKeyStates();
// 向左
if((keyState&GameCanvas.LEFT_PRESSED)!=0)
{
if(gc!=null)
{
gc.setAct(0,isOnFlat);
gc.Left();
}
return;
}
// 向右
if((keyState&GameCanvas.RIGHT_PRESSED)!=0)
{
if(gc!=null)
{
gc.setAct(1,isOnFlat);
gc.Right();
}
return;
}
// 跳或者站
if(gc!=null)
{
gc.setAct(2,isOnFlat);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -