maincanvas.java
来自「用J2ME实现的战棋类小游戏DEMO,寻路用A星算法,因为时间关系物品使用功能请」· Java 代码 · 共 1,739 行 · 第 1/4 页
JAVA
1,739 行
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import midp20.FangSprite;
import midp20.GameTools;
import midp20.Sprite;
import midp20.TiledLayer;
public class MainCanvas extends Canvas implements Runnable {
private String message[]=new String[1000];
private int messageIndex=0;
private Sprite enemyX;
private int enemyActionShunXu=0;
private Sprite enemyList[]=new Sprite[2];
private Sprite enemyWLAList[]=new Sprite[2];
private String currentHMAD[]=new String[4];
private Sprite currentjuese;
private int directP=0,directD=0;
//计数用
private static int indexPWLA=0,indexX=0;
//主角移动后记录一次坐标以作后悔操作用
private int backX=0;
private int backY=0;
private int inGameingIndex = 100;
private int inGameingTalkIndex=0;
int aaaa = 0;
int aaaaa = 0;
MainMIDlet mm;
Thread th;
GameLogo gl;
GameMenu gm;
private int FPS = 25;
private Image img_buffer;
private Graphics g_buffer;
private boolean isBuffer = false;
private boolean isRunning = true;
private boolean Music = true;
private int gameUserFace = GAMELOGO;
public static final int GAMELOGO = 0;
public static final int GAMEMENU = 1;
public static final int GAMEOPTION = 2;
public static final int GAMEABOUT = 3;
public static final int GAMEHELP = 4;
public static final int GAMESCORE = 5;
public static final int GAMING = 6;
public static final int GAMINGHUA1=10;
public static final int WIN = 7;
public int gameStage = 1;
int musicIndex = 0;
private int keycode = 0;
private int rekeycode = 0;
public static final int UP = -1;
public static final int DOWN = -2;
public static final int LEFT = -3;
public static final int RIGHT = -4;
public static final int FIRE = -5;
public static final int SOFT_LEFT = -6;
public static final int SOFT_RIGHT = -7;
long startTime;
//对话时图
Image mapTalk=GameTools.createImg("/mapTalk.png");
// 真图层类声明
Image cunzi = GameTools.createImg("/map01.png");
TiledLayer tl;
int map_tl[][] = {
{ 16, 17, 18, 19, 20, 14, 15, 16, 17, 18, 19, 20, 14, 15, 16, 17, 18, 19, 20,14, 15, 16, 17, 18},
{ 23, 24, 25, 26, 27, 21, 22, 23, 24, 25, 26, 27, 21, 22, 23, 24, 25, 26, 27, 21, 22, 23, 24, 25},
{ 30, 31, 32, 33, 34, 28, 29, 30, 31, 32, 33, 34, 28, 29, 30, 31, 32, 33, 34, 28, 29, 30, 31, 32},
{ 37, 38, 39, 40, 41, 35, 36, 37, 38, 39, 40, 41, 35, 36, 37, 38, 39, 40, 41, 35, 36, 37, 38, 39},
{ 44, 45, 46, 47, 48, 42, 43, 44, 45, 46, 47, 48, 42, 43, 44, 45, 46, 47, 48,42, 43, 44, 45, 46},
{ 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1 ,1, 1,1,1},
{ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,1,1},
{ 1, 0, 1, 0, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,0,1},
{ 1, 7, 1, 7, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,7,1},
{ 0, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,1,1},
{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1 ,1, 2,1,1},
{ 1, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 2,1,1},
{ 1, 1, 2, 2, 2, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1 ,1, 2,1,1},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 ,1, 1,1,1},
{ 1, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 7, 1, 1, 1, 1, 1, 1 ,1, 1,0,1},
{ 1, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,7,1},
{ 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1 ,1, 1,1,1},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1 ,1, 1,1,1},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1 ,1, 1,1,1},
{ 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 2,1,1},
{ 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 2,2,1},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1 ,1,1,1,1},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 0, 1 ,1,2,1,1},
{ 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1 ,1,1,1,1},
{ 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2 ,1,1,1,1}
};
// 次图层声明
Image levelSecondLayerPic = GameTools.createImg("/tl2P.png");
TiledLayer tl2;
int map_tl2[][] = {
{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0 },
{ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
{ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 } };
int map_tl2_cover[][] = { { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0 },
{ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
{ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 } };
// 作战菜单图层
// AttackMenuLayer aml;
Image AttackMenuPic = GameTools.createImg("/AttackMenuP.png");
TiledLayer tl3;
int map_tl3[][] = { { 0, 1, 2, 3 }
};
// 怪物A号精灵声明
Image enemyPicA;
Sprite enemyA;
//怪物B号精灵声明
Image enemyPicB;
Sprite enemyB;
// 主角精灵声明
Image playerPic;
Sprite player;
//主角物理攻击动画片精灵
Image playWLAttackPic;
Sprite playerWLAttacker;
// 方块精灵声明
Image FangPic;
FangSprite fangPlayer;
//小方块精灵声明
Image LFangPic;
FangSprite LFangPlayer;
//敌人物理攻击动画片精灵
Image enemyAWLAttackPic;
Sprite enemyAWLAttacker;
//敌人物理攻击动画片精灵
Image enemyBWLAttackPic;
Sprite enemyBWLAttacker;
//enemy die Sprite
Image enemyDiePic;
Sprite enemyDier;
// moving供移动系列方法用
private int begin_x;
private int begin_y;
private int end_x;
private int end_y;
private int cw;
private int ch;
private int openListLength = 0;
private int closeListLength = 0;
private boolean closeList[][];
private int[][][] openList;
private int movShuZu[];
private int xiaBiaoA = 0;
private int movSteps = 0;
private int movStepsA = 0;
public MainCanvas(MainMIDlet mm) {
// this.setFullScreenMode(true);
GameTools.SCREEN_WIDTH = this.getWidth();
GameTools.SCREEN_HEIGHT = this.getHeight();
this.mm = mm;
//Talking Message
message[0]="......";
message[1]="......好热";
message[2]="什么都看不见.";
message[3]="我是谁,为什么一点都想不起来.";
message[4]="我已经死了吗?";
message[5]="......";
message[6]="这是光吗";
message[7]="如此纯白且耀眼的光";
message[8]="女声:这是你要追寻的光";
message[9]="你是谁,你来救我的吗?";
message[10]="女声:找到它吧,并且找到协奏者";
message[11]="等等~协奏者是谁?";
message[12]="女声:去吧,我的......";
message[13]="(一道闪光)";
message[14]="这是哪里......";
message[15]="一个陌生的世界";
message[16]="我现在应该从哪开始找那光和协奏者";
message[17]="陌生的声音:他在那里!杀了他!";
message[18]="什么!为什么他们要杀我?";
message[19]="(身体不由地向他们反方向逃跑起来)";
message[20]=" 糟糕 ,前面是悬崖!";
message[21]="(敌人急速逼近)";
message[22]="没其他办法了,打败了他们再说!";
message[23]="神秘男子:看来你快不行了.";
message[24]="神秘男子:让我一刀解决了你吧.";
message[25]="(面对如此困境,我选择纵身跳下去)";
message[26]="神秘女子:既然他跳了下去那么我们";
message[27]="神秘女子:不用多费工夫了,回去吧.";
message[28]="本序章终......";
// 背景图层 + 次级图层
tl = new TiledLayer(7, 7, cunzi, 24, 24, map_tl);
tl.setPosition(-120, -120);
tl2 = new TiledLayer(4, 1, levelSecondLayerPic, 24, 24, map_tl2);
tl3 = new TiledLayer(4, 1, AttackMenuPic, 20, 20, map_tl3);
gl = new GameLogo();
gm = new GameMenu();
// 精灵 创建方法执行
gameInit_Fang();
gameInit_zhujue();
gameInit_zhujueWLA();
gameInit_enemyA();
gameInit_LFang();
gameInit_enemyAWLA();
gameInit_enemyB();
gameInit_enemyBWLA();
gameInit_enemyDie();
enemyList[0]=enemyA;
enemyList[1]=enemyB;
enemyWLAList[0]=enemyAWLAttacker;
enemyWLAList[1]=enemyBWLAttacker;
th = new Thread(this);
if (isBuffer) {
img_buffer = Image.createImage(GameTools.SCREEN_WIDTH,
GameTools.SCREEN_HEIGHT);
g_buffer = img_buffer.getGraphics();
}
startTime = System.currentTimeMillis();
th.start();
}
public void gameInit_zhujue() {
playerPic = GameTools.createImg("/player01.png");
player = new Sprite(playerPic, 24, 48);
player.setPosition(6 * 24, 3 * 24);
player.setCurrentFrames(player.up);
player.setShuXing( 60, 10, 17, 17);
player.name=new String("???");
player.HMAD[0]=100;
player.HMAD[1]=0;
player.HMAD[2]=18;
player.HMAD[3]=18;
}
public void gameInit_zhujueWLA(){
playWLAttackPic=GameTools.createImg("/playerAttack.png");
playerWLAttacker=new Sprite(playWLAttackPic,48,48);
playerWLAttacker.setPosition(0, 0);
playerWLAttacker.setCurrentFrames(playerWLAttacker.up);
}
public void gameInit_Fang() {
FangPic = GameTools.createImg("/FangSprite.png");
fangPlayer = new FangSprite(FangPic, 24, 24);
fangPlayer.setPosition(24 * 4, 24 * 4);
fangPlayer.setCurrentFrames(fangPlayer.up1);
}
public void gameInit_LFang(){
LFangPic=GameTools.createImg("/xiaofang.png");
LFangPlayer=new FangSprite(LFangPic,20,20);
LFangPlayer.setPosition(0, 0);
LFangPlayer.setCurrentFrames(LFangPlayer.lup1);
}
public void gameInit_enemyAWLA(){
enemyAWLAttackPic=GameTools.createImg("/enemyAttackP.png");
enemyAWLAttacker=new Sprite(enemyAWLAttackPic,48,48);
enemyAWLAttacker.setPosition(24, 0);
enemyAWLAttacker.setCurrentFrames(enemyAWLAttacker.up);
}
public void gameInit_enemyA() {
enemyPicA = GameTools.createImg("/enemyPic.png");
enemyA = new Sprite(enemyPicA, 24, 48);
enemyA.setPosition(24 * 7, 24 * 12);
enemyA.setCurrentFrames(enemyA.up);
map_tl2[enemyA.getY() / 24][enemyA.getX() / 24]=2;
enemyA.setShuXing( 40, 20, 30, 3);
enemyA.name=new String("神秘女子");
enemyA.HMAD[0]=20;
enemyA.HMAD[1]=0;
enemyA.HMAD[2]=13+18;
enemyA.HMAD[3]=0;
}
public void gameInit_enemyB(){
enemyPicB = GameTools.createImg("/enemyPic.png");
enemyB = new Sprite(enemyPicB, 24, 48);
enemyB.setPosition(24 * 3, 24 * 11);
enemyB.setCurrentFrames(enemyB.up);
map_tl2[enemyB.getY() / 24][enemyB.getX() / 24]=2;
enemyB.setShuXing( 40, 20, 30, 3);
enemyB.name=new String("神秘男子");
enemyB.HMAD[0]=20;
enemyB.HMAD[1]=0;
enemyB.HMAD[2]=10+18;
enemyB.HMAD[3]=2;
}
public void gameInit_enemyBWLA(){
enemyBWLAttackPic=GameTools.createImg("/enemyAttackP.png");
enemyBWLAttacker=new Sprite(enemyBWLAttackPic,48,48);
enemyBWLAttacker.setPosition(24, 0);
enemyBWLAttacker.setCurrentFrames(enemyBWLAttacker.up);
}
public void gameInit_enemyDie(){
enemyDiePic=GameTools.createImg("/dying.png");
enemyDier=new Sprite(enemyDiePic,24,48);
enemyDier.setPosition(0, 0);
enemyDier.setCurrentFrames(enemyDier.up);
}
protected void paint(Graphics g) {
g.setColor(0xffffff);
g.fillRect(0, 0, GameTools.SCREEN_WIDTH, GameTools.SCREEN_HEIGHT);
g.setColor(0xff0000);
if (isBuffer) {
g.drawImage(img_buffer, 0, 0, 0);
} else {
switch (gameUserFace) {
case GAMELOGO:
gl.renderLogo(g);
break;
case GAMEMENU:
gm.renderMenu(g);
break;
case GAMEABOUT:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?