📄 mycanvas.java
字号:
package perGame;
/////////////////////////////
//屏幕寬180
//屏幕高196
/////////////////////////////
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import java.io.*;
import javax.microedition.lcdui.Font;
public class MyCanvas extends Canvas implements Runnable {
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 LEFT_KEY = -6;
public static final int RIGHT_KEY = -7;
public final static byte GAME_LOGO = -1; //游戏LOGO
public final static byte GAME_AUTORUN = -2; //開頭文字介紹
public final static byte GAME_AUTORUN1 = -3; //開頭文丑對話
public final static byte GAME_AUTORUN2 = -4; //開頭戰斗場面
public final static byte GAME_AUTORUN3 = -5; //趙云兄弟對話場面
public final static byte GAME_MENU = 0; //游戏菜单
public final static byte GAME_START = 1; //开始游戏
public final static byte GAME_SET = 3; //游戏设置
public final static byte GAME_CONTINUE = 2; //读取进度
public final static byte GAME_HELP = 4; //游戏帮助
public final static byte GAME_STOP = 5; //结束游戏
//public final static byte GAME_LODING = 6; //LOADING
public final static byte PLAY_MENU = 8; //游戏运行中菜单
public final static byte PLAY_STATE = 9; //人物状态
public final static byte PLAY_EQUAL = 11; //装备道具
public final static byte PLAY_BAG = 10; //使用背包
public final static byte PLAY_SETMENU = 12; //系统菜单
public final static byte PLAY_FIGHT = 13; //戰斗時菜單界面(即戰斗狀態)
public final static byte FIGHT_ATTACK = 14; //攻击状态
public final static byte FIGHT_SKILL = 15; //技能狀態
public final static byte FIGHT_SHIBAI = 16; //失败状态
public final static byte FIGHT_WIN = 17; //战斗胜利状态
public final static byte GAME_TALK = 18; //对话状态
public final static byte LEVEL_UP = 19; //升級狀態
/////////////////////////////////////////////////////////////程序變量
int MMap; //用于存儲地圖編號
int xx; //存儲英雄坐標
int yy; //存儲英雄坐標
DataRMS dr;
int key; //接收按鍵數值
int viewX; //屏幕左上角坐标
int viewY; //屏幕左上角坐标
int screenWidth; //屏幕寬
int screenHeight; //屏幕高
Image imgBuffer; //雙緩沖圖片
Thread thread; //線程
Graphics gg; //雙緩沖畫筆
Font font;
Mymidlet midlet; //移動信息驅動描述
Tools tools; //工具
MyImage image; //圖片類
Map map; //地圖
/////////////////////////////////////////////////狀態變量
int gameState; //游戏總狀態
int playMenuState; //游戲中目錄狀態
int skillState; //技能画面狀態
int shoppingState; //商店狀態
boolean keyState; //按键狀態!!!!!!!
boolean mpState; //英雄的魔法是否够用
boolean talkState; //标志是否出现对话框
boolean fightState; //開始戰斗效果動畫
boolean heroFightState; //英雄普通攻擊動畫
boolean heroSkillState; //英雄开始技能状态
boolean emenyFightState; //敵人攻擊動畫
boolean sufferNumState; //攻擊后顯示受損數字
boolean enter; //是否進入(即切換地圖)
boolean helpPoint; //帮助菜单
///////////////////////////////////////////////////////指針變量
int mainMenuPoint; //游戲主目錄指針
int setPoint; //游戏设置的指针
int hero_battlePoint; //英雄战斗状态下贴图指针
int skillPoint; //英雄技能指针
int battleMenuPoint; //战斗状态下菜单指针
int effectPoint; //傷害效果指針
int menuPoint; //游戏中的菜单
////////////////////////////////////////////////////////計時器變量
int skillCount; //技能計數器
int logoCount; //LOGO計時器
int fightCount; //動畫效果計時器
//////////////////////////////////////////////////////坐标变量
int logo1X, logo1Y; //開頭背景介紹文字的坐標
int hero_battleX = 120; //英雄战斗状态下坐标位置
int hero_battleY = 60; //英雄战斗状态下坐标位置
int emeny_battleX = 20; //敵人战斗状态下坐标位置
int emeny_battleY = 50; //敵人战斗状态下坐标位置
int HpVariableY; //戰斗時血量變化數字的縱坐標
int HeroVariableX; //戰斗時血量變化數字的橫坐標
int EmenyVariableX; //戰斗時血量變化數字的橫坐標
//////////////////////////////////////////////地图状态
int mapID; //在第一个村庄里
///////////////////////////////////////事件状态
// boolean boss1Event;//BOSS1的事件
String talk[]; //對話內容
int emenyHpVeriable; //敵人血量變化
int heroHpVeriable; //英雄血量變化
int mapId; //地图编号
int npcID; //NPC编号
int itemID; //道具编号
int tempMapId; //地图编号
int maxHeroMp; //英雄当前MP满值时的数值
int maxHeroHp; //英雄当前MP满值时的数值
int maxMonserHp; //怪物当前MP满值时的数值
int talk_index = -1; //对话数组
boolean running; //游戲開始
boolean peng;
/////////////////////////////////////////////////////////////游戲變量
Hero hero; //英雄对象
Npc boss1; //文丑
Npc emeny;
Image img_emenyBattle;
Image img_Eeffect; //敵人攻擊效果圖
public MyCanvas(Mymidlet midlet) { //構造!!!!!, 系統構造
this.setFullScreenMode(true); //設置全屏
// this.setWindow(); //设置可视窗口
this.dr = new DataRMS(this); //生成一个存储对象
gameState = GAME_LOGO;
image = new MyImage(this);
tools = new Tools(this);
this.midlet = midlet;
this.screenHeight = this.getHeight();
this.screenWidth = this.getWidth();
thread = new Thread(this);
imgBuffer = Image.createImage(this.getWidth(), this.getHeight());
gg = imgBuffer.getGraphics();
font = Font.getFont(0, 0, 16);
////////////////////////////////////////////////////////////
//游戲構造
logo1X = 13; //开头介绍文字横坐标
logo1Y = screenHeight; //开头介绍文字纵坐标
map = new Map(16, 16, this);
hero = new Hero(1000, 1000, 4, "趙云", 10, "斬", this, image.hero1, 16, 24);
hero.attack = 10;
boss1 = new Npc(1000, image.boss1, 100, 100, 2 * 16, 0, 16, 24, this,
10, 100);
}
////////////////////////////////////////////////////////////////////////////
//自定義方法
public void gamestart() { //游戲開始
thread.start();
running = true;
}
public void changeMap(int mapID) {
map.readmap(mapID);
this.mapID = mapID;
switch (mapID) {}
}
public void Ssave() { //存儲地圖幾任務坐標
MMap = mapID;
xx = hero.x;
yy = hero.y;
enter = false;
}
public void Lload() {
mapID = MMap;
hero.x = xx;
hero.y = yy;
changeMap(MMap);
enter = false;
System.out.println("bbbbbbbbbb" + mapID);
}
public void pingmu() { //屏幕滚动
this.viewX = this.hero.x - (this.screenWidth / 2);
this.viewY = this.hero.y - (this.screenHeight / 2);
if (this.viewX < 0) {
this.viewX = 0;
}
if (this.viewY < 0) {
this.viewY = 0;
}
if (this.viewX >
this.map.mapWidth - this.screenWidth) {
this.viewX = this.map.mapWidth -
this.screenWidth;
}
if (this.viewY >
this.map.mapHeight - this.screenHeight) {
this.viewY = this.map.mapHeight -
this.screenHeight;
}
}
public void game_logic() { /////////////邏輯!!!!!邏輯!!!!!邏輯!!!!!
switch (gameState) {
case GAME_LOGO:
logoCount++;
if (logoCount == 30) {
gameState = GAME_MENU;
}
break;
case GAME_AUTORUN:
if (logo1Y != 0) {
logo1Y--;
}
break;
case GAME_START:
switch (mapID) {
case 1:
if (enter &&
tools.inRect(hero.x, hero.y - 14, 16, 14, 80, 88, 16, 16)) { //進入商店
Ssave();
changeMap(2);
hero.y = 170;
hero.x = 112;
}
break;
case 2:
if (enter &&
tools.inRect(hero.x, hero.y, 16, 28, 112, 170, 32, 16)) {
Lload();
}
break;
}
{
this.keyRepeated(); //重復按鍵
}
this.countKey++;
if (this.countKey > 99) {
this.countKey = 0;
}
break; //游戲狀態:開始游戲
case GAME_CONTINUE:
break; //讀取存檔
case GAME_SET:
break; //設置音量
case GAME_HELP:
break; //幫助
case GAME_STOP:
break; //退出游戲
case PLAY_FIGHT: //戰斗動畫
if (fightState == true) {
fightCount++;
if (fightCount < 6) { //英雄前移
hero_battleX -= 3;
} else if (fightCount < 8 && hero_battlePoint != 3) { // 英雄攻擊 敵人后退
emeny_battleX -= 2;
hero_battlePoint++;
if (heroFightState) {
effectPoint++;
}
} else if (fightCount < 10 && hero_battlePoint != 3) { // 英雄攻擊 敵人后退
emeny_battleX += 2;
hero_battlePoint++;
if (heroFightState) {
effectPoint++;
}
} else if (fightCount < 12 && hero_battlePoint != 3) { // 英雄攻擊 敵人后退
emeny_battleX -= 2;
hero_battlePoint++;
if (heroFightState) {
effectPoint++;
}
} else if (fightCount < 14 && hero_battleX != 120) { //英雄歸位 敵人歸位
effectPoint = 0; //技能动画指针初始化
heroFightState = false; //结束英雄技能动画
hero_battlePoint = 0;
hero_battleX += 3;
emeny_battleX = 20;
} else if (fightCount < 18) {} else if (fightCount < 24) { //敵人前移
hero_battleX = 120;
emeny_battleX += 3;
} else if (fightCount < 28) {
emenyFightState = true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -