⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mycanvas.java

📁 这个是早期学习时写的RPG游戏 包括地图相关 战斗相关 NPC与 存储等 功能
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
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 + -