📄 mycanvas.java
字号:
import javax.microedition.lcdui.*;
public class Mycanvas extends Canvas implements Runnable
{
Main midlet;
Image bufImage;
Image logoImage[];
int logocnt;
Player mytank;
int state;
int menuSelected;
Map map;
Bullet mybullet;
Explode explode;
public Mycanvas(Main midlet)
{
this.midlet = midlet;
mytank = new Player();
explode = new Explode();
map = new Map();
map.createMap();
logoImage = new Image[2];
bufImage = Image.createImage(176,208);
map.mapX = -(map.MAP_WIDTH - 176)>>1; // map初始坐标
map.mapY = -(map.MAP_HEIGHT - 208);
mybullet= new Bullet();
try
{
logoImage[0] = Image.createImage("/logos0.png");
logoImage[1] = Image.createImage("/logos1.png");
}
catch(Exception e){}
new Thread(this).start();
}
public void run()
{
int sleeptime = 0;
while(true)
{
if(state == 0) sleeptime = 1000;
else sleeptime = 80;
bufPaint(bufImage.getGraphics());
repaint();
try
{
Thread.sleep(80);
}
catch(Exception e){}
logocnt++;
if(logocnt == 2) state = 1;
//if(mytank.isFire)
//explode.frame++;
if(!mybullet.bullet_collides()) mybullet.bulletMove();
if(mytank.running)
{
try
{
if(!collides())
{
if(mytank.direction == 0 && (mytank.playerY < (208-13)>>1 && (map.mapY < 0)))
{
map.mapY += mytank.speed;
}
else if(mytank.direction == 2 && (mytank.playerY > (208-13)>>1 && (map.mapY > -(map.MAP_HEIGHT - 208))))
{
map.mapY -= mytank.speed;
}
else if(mytank.direction == 1 && (mytank.playerX > (176-13)>>1 && (map.mapX > -(map.MAP_WIDTH - 176))))
{
map.mapX -= mytank.speed;
}
else if(mytank.direction == 3 && (mytank.playerX < (176-13)>>1 && (map.mapX < 0) ))
{
map.mapX += mytank.speed;
}
else
{
mytank.move();
}
}
}
catch(Exception e){}
}
}
}
public void bufPaint(Graphics g)
{
g.fillRect(0,0,bufImage.getWidth(),bufImage.getHeight());
switch(state)
{
case 0:
g.setColor(0xFFFFFF);
g.drawImage(logoImage[logocnt],0,0,0);
break;
case 1:
if(menuSelected == 0)g.setColor(0x00FF00);else g.setColor(0xFF0000);
g.translate(70, 80);
g.drawString("开始游戏", 0, 0, 0);
if(menuSelected == 1)g.setColor(0x00FF00);else g.setColor(0xFF0000);
g.translate(0, 20);
g.drawString("帮助", 0, 0, 0);
if(menuSelected == 2)g.setColor(0x00FF00);else g.setColor(0xFF0000);
g.translate(0, 20);
g.drawString("退出游戏", 0, 0, 0);
break;
case 2:
g.drawImage(map.mapImage,map.mapX, map.mapY,0);
mybullet.paintBullet(g);
explode.paintExplode(g);
mytank.playerPaint(g);
break;
}
}
public void paint(Graphics g)
{
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(bufImage,(getWidth()-176) >> 1,(getHeight()-208) >> 1,0);
}
public boolean collides()throws ArrayIndexOutOfBoundsException //与地图碰撞检测
{
if(mytank.direction == 0) // up
{
int x1 = (mytank.playerX - map.mapX) / 16;
int x2 = (mytank.playerX + 13 - map.mapX) / 16;
int y = (mytank.playerY - mytank.speed - map.mapY) / 16;
for(int i = x1;i <= x2;i++)
{
if(map.mapdata[y][i] != 4 && map.mapdata[y][i] != 0) return true;
}
}
else if(mytank.direction == 2)// down
{
int x1 = (mytank.playerX - map.mapX) / 16;
int x2 = (mytank.playerX + 13 - map.mapX) / 16;
int y = (mytank.playerY + 13 + mytank.speed - map.mapY) / 16;
for(int i = x1;i <= x2;i++)
{
if(map.mapdata[y][i] != 4 && map.mapdata[y][i] != 0 ) return true;
}
}
else if(mytank.direction == 1)// right
{
int x = (mytank.playerX + 13 + mytank.speed - map.mapX) / 16;
int y1 = (mytank.playerY - map.mapY) / 16;
int y2 = (mytank.playerY + 13 - map.mapY) / 16;
for(int i = y1;i <= y2;i++)
{
if(map.mapdata[i][x] != 4 && map.mapdata[i][x] != 0) return true;
}
}
else if(mytank.direction == 3)// left
{
int x = (mytank.playerX - mytank.speed - map.mapX) / 16;
int y1 = (mytank.playerY - map.mapY) / 16;
int y2 = (mytank.playerY + 13 - map.mapY) / 16;
for(int i = y1;i <= y2;i++)
{
if(map.mapdata[i][x] != 4 && map.mapdata[i][x] != 0) return true;
}
}
return false;
}
public void keyPressed(int keyCode)
{
int gkc = getGameAction(keyCode);
switch(state)
{
case 1:
switch(gkc)
{
case UP:
menuSelected--;if(menuSelected < 0) menuSelected = 2;
break;
case DOWN:
menuSelected++;if(menuSelected > 2) menuSelected = 0;
break;
case FIRE:
switch(menuSelected)
{
case 0:
state = 2;
break;
case 1:
break;
case 2:
midlet.notifyDestroyed();
midlet.destroyApp(true);
break;
}
break;
}
break;
case 2:
switch(gkc)
{
case LEFT:
mytank.running = true;
mytank.direction = 3;
break;
case RIGHT:
mytank.running = true;
mytank.direction = 1;
break;
case UP:
mytank.running = true;
mytank.direction = 0;
break;
case DOWN:
mytank.running = true;
mytank.direction = 2;
break;
case FIRE:
int x = mytank.playerX;
int y = mytank.playerY;
int dir = mytank.direction;
mybullet.creatBullet(x,y,dir);
mytank.isFire = true;
break;
}
break;
}
}
public void keyReleased(int keyCode)
{
mytank.running = false;
//mytank.isFire = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -