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

📄 mygamecanvas.java.bak

📁 游戏学院《天下武王》教学实例
💻 BAK
📖 第 1 页 / 共 4 页
字号:
//package org.gamecollege.j2me.rpg;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;

import java.util.*;

/**
 * @author Jagie
 *
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class MyGameCanvas extends GameCanvas implements CommandListener, Runnable {
    /**
     * 游戏MIDlet
     */
    MIDlet midlet;

    /**
     * 游戏运行开关
     */
    boolean isRunning;

    /**
     * 消息队列
     */
    Vector messageQueue;

    public static final int GAME_LOOP_INTERVAL = 100;

    MyRPGGameMIDlet myRPGGameMIDlet;

    public static final int STATUS_SHOWFLASH = 0; //显示flash

    public static final int STATUS_POPMENU_CONFIRM = 1; //确认买卖

    public static final int STATUS_BUYING = 11; //购买道具

    public static final int STATUS_WALKING = 2; //主角行走

    public static final int STATUS_FIGHTING = 3; ////战斗

    public static final int STATUS_MAIN_MENU = 4; //主菜单

    public static final int STATUS_HELP = 5; //帮助

    public static final int STATUS_ABOUT = 6; //关于

    public static final int STATUS_PLAYER_INFO = 8; //主角属性

    public static final int STATUS_MISSION_INFO = 9; //任务列表

    public static final int STATUS_GAME_OVER = 10; //游戏结束

    public static final int STATUS_LOADING_LEVEL = 12; //装载关卡

    public static final int STATUS_SALING = 13; //卖东西

    public static final int STATUS_FIGHT_OVER = 14; //战斗结束

    public static final int STATUS_MISSION_OVER = 15; //任务结束

    private int gameStatus = STATUS_SHOWFLASH;

    //屏幕宽度,高度
    int width, height;

    //主角
    Player myPlayer;

    LayerManager lm;

    //当前关卡号
    int curLevelNo;

    //1:买卖武器护具,2:药品买卖
    int saleType;

    //当前菜单项索引
    int curMenuIndex;

    //当前关卡
    Level curLevel;

    //可出售的武器集合
    Vector weaponVec = new Vector();

    //可出售的护具集合
    Vector jacketVec = new Vector();

    //可出售的药品集合
    Vector medicVec = new Vector();

    //购买武器护具时,区别到底是武器还是护具
    boolean isArm;

    LayerManager fightLayerManager;

    GameInnerThread engine;

    String curMessage;

    Thread gameThread;

    long lastPopMsgTime;

    int beforeFightHp;

    int beforeFightExp;

    int beforeFightMp;

    int beforeFightMoney;

    int beforeFightHp_npc;

    //是否在战斗时查看技能
    boolean popSkill;

    long lastFightOverTime;

    long lastGameOverTime;

    //在战斗中随机出现的敌人
    NPC ranEnemy;

    //战斗结束后获得的技能
    Skill ranSkill;

    Sprite fightBackGround;

    int curMenuIndex2;

    int killTigerCount;

    GameStore gs;

    boolean hasStored;

    boolean hasFullScreen;

    /*
     * (non-Javadoc)
     *
     * @see org.gamecollege.j2me.rpg.RPGGameCanvas#drawMessage(javax.microedition.lcdui.Graphics)
     */

    public void commandAction(Command com, Displayable disp) {
        if (com == List.SELECT_COMMAND) {

            gs.deleteRecord();
            myPlayer = new Player(ResourceLoader.StringResource[0]);
            List list = (List) disp;
            curLevelNo = list.getSelectedIndex();
            curLevel = new Level();
            LevelLoader.instance.loadLevel(curLevel);

            Display.getDisplay(myRPGGameMIDlet).setCurrent(this);
        } else if (com.getCommandType() == Command.BACK) {
            this.setGameStatus(STATUS_MAIN_MENU);
            Display.getDisplay(myRPGGameMIDlet).setCurrent(this);
        }
    }

    public void showLevels() {
        List list = new List(ResourceLoader.StringResource[25], Choice.IMPLICIT);
        list.append(ResourceLoader.StringResource[24], null);
        list.addCommand(new Command(ResourceLoader.StringResource[34],
                                    Command.BACK, 1));
        list.setCommandListener(this);

        Display.getDisplay(myRPGGameMIDlet).setCurrent(list);
    }

    /*
     * (non-Javadoc)
     *
     * @see org.gamecollege.j2me.rpg.RPGGameCanvas#stopGame()
     */
    public void stopGame() {
        System.gc();
        if (engine != null) {
            engine.stop();
        }

    }

    protected void drawMessage() {
        Graphics g = this.getGraphics();
        if (curMessage != null) {
            g.setColor(255, 255, 128);

            g.drawImage(ResourceLoader.menu[17], width / 2, height - 20,
                        Graphics.HCENTER | Graphics.TOP);
            g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
                                   Font.SIZE_SMALL));

            g.drawString(curMessage, width / 2, height - 16, Graphics.HCENTER
                         | Graphics.TOP);

        }

    }

    /*
     * (non-Javadoc)
     *
     * @see org.gamecollege.j2me.rpg.RPGGameCanvas#input()
     */
    protected void input() {

        int keyStates = getKeyStates();

        switch (getGameStatus()) {
        //主菜单状态
        case STATUS_MAIN_MENU:
            if (hasStored) {
                handleMenuKeyBrowse(keyStates, 4);
            } else {
                handleMenuKeyBrowse(keyStates, 3);
            }

            if ((keyStates & FIRE_PRESSED) != 0) {
                //有存盘
                if (hasStored) {
                    switch (curMenuIndex) {
                    case 0:

                        //显示关卡列表
                        showLevels();
                        break;
                    case 1:

                        //装载存盘
                        loadGame();
                        break;
                    case 2:

                        //关于
                        setGameStatus(STATUS_ABOUT);
                        break;
                    case 3:

                        //帮助
                        setGameStatus(STATUS_HELP);
                        break;
                    case 4:

                        //退出
                        this.stopGame();
                        this.isRunning = false;
                        break;
                    }
                } else {
                    //无存盘
                    switch (curMenuIndex) {
                    case 0:

                        //显示关卡列表
                        showLevels();
                        break;
                    case 1:

                        //关于
                        setGameStatus(STATUS_ABOUT);
                        break;
                    case 2:

                        //帮助
                        setGameStatus(STATUS_HELP);
                        break;
                    case 3:

                        //退出
                        this.stopGame();
                        this.isRunning = false;
                        break;
                    }
                }
            }
            break;
            //帮助界面
        case STATUS_HELP:
            //关于界面
        case STATUS_ABOUT:
            if (keyStates != 0) {
                setGameStatus(STATUS_MAIN_MENU);
            }
            break;
            //行走界面
        case STATUS_WALKING:

            //按着左键
            if ((keyStates & LEFT_PRESSED) != 0) {
                myPlayer.move(Player.LEFT);
            }
            //按着右键
            else if ((keyStates & RIGHT_PRESSED) != 0) {
                myPlayer.move(Player.RIGHT);
            }
            //按着上键
            else if ((keyStates & UP_PRESSED) != 0) {
                myPlayer.move(Player.UP);
            }
            //按着下键
            else if ((keyStates & DOWN_PRESSED) != 0) {
                myPlayer.move(Player.DOWN);
            } else {
                //未按方向键
                myPlayer.move(Player.STILL);
            }
            break;
            //确认界面
            /*

            */

        case STATUS_POPMENU_CONFIRM:
            handleMenuKeyBrowse(keyStates, 2);
            if ((keyStates & FIRE_PRESSED) != 0) {
                switch (curMenuIndex) {
                case 0:
                    setGameStatus(STATUS_BUYING);
                    break;
                case 1:
                    setGameStatus(STATUS_SALING);
                    break;
                case 2:
                    setGameStatus(STATUS_WALKING);
                    break;
                }
            }
            break;
            //购买物品界面
        case STATUS_BUYING:
            int maxMenuIndex = 0;
            Property pro = null;
            switch (this.saleType) {
            //武器护具
            case 1:

                //注意多了一个[退出]菜单
                if (this.isArm) {
                    maxMenuIndex = this.weaponVec.size();
                    if (curMenuIndex < weaponVec.size()) {
                        pro = (Property) weaponVec.elementAt(curMenuIndex);
                    }
                } else {
                    maxMenuIndex = this.jacketVec.size();
                    if (curMenuIndex < jacketVec.size()) {
                        pro = (Property) jacketVec.elementAt(curMenuIndex);
                    }
                }
                break;
                //药品
            case 2:
                if (curMenuIndex < medicVec.size()) {
                    pro = (Property) medicVec.elementAt(curMenuIndex);
                }
                maxMenuIndex = this.medicVec.size();
                break;
            }
            handleMenuKeyBrowse(keyStates, maxMenuIndex);
            if ((keyStates & LEFT_PRESSED) != 0
                || (keyStates & RIGHT_PRESSED) != 0) {
                isArm = !isArm;
            } else if ((keyStates & FIRE_PRESSED) != 0) {
                if (pro != null) {
                    if (pro.price <= myPlayer.money) {
                        myPlayer.addSth(pro);
                        myPlayer.money -= pro.price;
                    }
                } else {
                    setGameStatus(STATUS_POPMENU_CONFIRM);
                }
            }
            break;
            //出售物品界面
        case STATUS_SALING:
            Vector ps = null;
            if (this.saleType == 1) {
                if (isArm) {
                    ps = myPlayer.weaponVec;
                } else {
                    ps = myPlayer.jacketVec;
                }

            } else {
                ps = myPlayer.medicVec;
            }
            maxMenuIndex = ps.size();
            handleMenuKeyBrowse(keyStates, maxMenuIndex);
            if ((keyStates & LEFT_PRESSED) != 0
                || (keyStates & RIGHT_PRESSED) != 0) {
                isArm = !isArm;
            } else if ((keyStates & FIRE_PRESSED) != 0) {
                if (curMenuIndex < ps.size()) {
                    pro = (Property) ps.elementAt(curMenuIndex);
                    myPlayer.removeSth(pro);
                    //卖东西,只能得到80%的收益
                    myPlayer.money += pro.price * 8 / 10;
                } else {
                    setGameStatus(STATUS_POPMENU_CONFIRM);
                }

            }
            break;
            //战斗界面
        case STATUS_FIGHTING:
            if ((keyStates & LEFT_PRESSED) != 0) {
                popSkill = false;
                curMenuIndex2 = 0;
                curMenuIndex = curMenuIndex - 1 >= 0 ? curMenuIndex - 1 : 2;

            } else if ((keyStates & RIGHT_PRESSED) != 0) {
                popSkill = false;
                curMenuIndex2 = 0;
                curMenuIndex = curMenuIndex + 1 > 2 ? 0 : curMenuIndex + 1;
            } else if ((keyStates & FIRE_PRESSED) != 0) {
                if (!popSkill) {
                    switch (curMenuIndex) {
                    case 0:
                        if (myPlayer.attackStatus == -1) {
                            myPlayer.attackStatus = 0;
                        }

                        break;
                    case 1:

                        //显示技能列表
                        this.popSkill = true;
                        break;

                    case 2:

                        //退出战斗
                        synchronized (engine) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -