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

📄 controlcenter.java

📁 堆箱子,java平台,可能会有BUG
💻 JAVA
字号:
package pushbook.core;

import java.util.Vector;
import java.util.Hashtable;
import java.awt.*;
import javax.swing.*;
import pushbook.*;
import java.awt.image.ImageObserver;

/**
 * <p>Title: 推箱子</p>
 * <p>Description: 控制中心,控制游戏元素的移动</p>
 * <p>Copyright: 无版权</p>
 * <p>Company: 吉林省前郭尔罗斯蒙古族自治县第五高级中学</p>
 * @author 郑雪
 * @version 1.0
 */
public class ControlCenter
{
    //窗口标题
    public String gameTitle = "";
    //背景音乐
    public String gameMusic = "";
    //过关提示
    public String gameCelebrate = "";
    //游戏元素表
    public Vector gameElements = null;
    //目的地元素列表
    public Vector destinationElements = null;
    //游戏元素模板列表
    public Hashtable gameTemplet = null;
    //关卡序列
    public Vector gameSequence = null;

    //数字图片数组
    public Vector numberImage = null;

    //积分区图片
    public Image stepsImage = null;

    //结束图片
    public Image endImage = null;

    //地图的宽度和高度
    public int mapWidth = 0;
    public int mapHeight = 0;

    //有图片元素个数
    public int haveImageElement = 0;

    //活动元素个数
    public int activeElement = 0;

    //当前关编号
    public int levelIndex = 0;

    //步行计数器
    public int stepConter = 0;

    //总步数
    public int stepSum = 0;

    //游戏结束
    public boolean gameover = false;

    /**
     * 默认构造函数
     */
    public ControlCenter()
    {
        numberImage = new Vector();
        gameElements = new Vector();
        gameTemplet = new Hashtable();
        destinationElements = new Vector();
        gameSequence = new Vector();
        haveImageElement = 0;
        activeElement = 0;
        LevelManager lm = new LevelManager();
        ConfigManager cm = new ConfigManager();
        gameSequence = cm.getSequence();
        levelIndex = 0;
        lm.loadLevelData(this,(String)gameSequence.get(levelIndex));
        MidiPlayer.getInstance(gameMusic).start();
    }

    /**
     * 根据参数指定的xml文件建立新一关的游戏环境
     * @param xmlfile String
     */
    public boolean jumpLevel(int index)
    {

        if(index < 0 || index >= gameSequence.size()){gameover = true; return false;}
        gameElements = new Vector();
        destinationElements = new Vector();
        gameTemplet = new Hashtable();
        haveImageElement = 0;
        activeElement = 0;
        LevelManager lm = new LevelManager();
        lm.loadLevelData(this,(String)gameSequence.get(index));
        MidiPlayer.getInstance(null).changeFile(gameMusic);
        gameover = false;
        return true;
    }

    /**
     * 直接进入下一关
     */
    public void nextLevel()
    {
        if(levelIndex+1 >= gameSequence.size()){gameover = true; return;}
        levelIndex ++;
        stepSum += stepConter;
        stepConter = 0;
        jumpLevel(levelIndex);
    }

    /**
     * 直接进入上一关
     */
    public void privLevel()
    {
        if(levelIndex-1 < 0) return;
        levelIndex --;
        stepSum += stepConter;
        stepConter = 0;
        jumpLevel(levelIndex);
        gameover = false;
    }



    /**
     * 判断能否过关
     * @return boolean
     */
    public boolean canPass()
    {
        boolean rev = true;
        GameElement temp = null;
        GameElement tempDes = null;
        for(int i=0;i<destinationElements.size();i++)
        {
            tempDes = (GameElement)destinationElements.get(i);
            temp = getElement(tempDes.x,tempDes.y);
            if(temp == null || !temp.canMove || temp.canActive())
            {
                rev = false;
            }
        }
        return rev;
    }


    /**
     * 装入资源
     * @param g Graphics
     */
    public void loadResource(Frame mainframe)
    {
        GameElement temp = null;
        for (int i = 0; i < gameElements.size(); i++)
        {
            temp = (GameElement) gameElements.get(i);
            if(temp.img != null)
            {
                temp.trueimg = mainframe.getToolkit().createImage(getClass().getResource(temp.img));
            }
        }
        for(int i=0;i<10;i++)
        {
            numberImage.add(mainframe.getToolkit().createImage(getClass().getResource("/resource/"+i+".jpg")));
        }
        stepsImage = mainframe.getToolkit().createImage(getClass().getResource("/resource/steps.jpg"));
        endImage = mainframe.getToolkit().createImage(getClass().getResource("/resource/end.jpg"));
    }


    /**
     * 将全部对象的位置入栈
     */
    public void pushAllStep()
    {
        for(int i=0;i<gameElements.size();i++)
        {
            GameElement temp = null;
            temp = (GameElement)gameElements.get(i);
            if(temp.canMove()) temp.stepPushStack();
        }
    }

    /**
     * 回退全部对象
     */
    public void popAllStep()
    {
        for(int i=0;i<gameElements.size();i++)
        {
            GameElement temp = null;
            temp = (GameElement)gameElements.get(i);
            if(temp.canMove()) temp.breakStep();
        }
    }


    /**
     * 处理键盘事件
     * @param keycode int 键盘键值
     * @return boolean 是否影响画面了
     */
    public boolean pressKey(int keycode)
    {
        boolean rev = false;
        GameElement temp = null;
        if(keycode != Invariable.codeBareak) pushAllStep();
        for(int i=0;i<gameElements.size();i++)
        {
            temp = (GameElement)gameElements.get(i);
            if(temp.canMove() && temp.canActive())
            {
                if (keycode == Invariable.codeUp)
                {
                    if (warmupMoveUp(temp)) rev = temp.moveUp();
                    if (rev){ stepConter++;}
                }
                if (keycode == Invariable.codeDown)
                {
                    if (warmupMoveDown(temp)) rev = temp.moveDown();
                    if (rev){ stepConter++;}
                }
                if (keycode == Invariable.codeLeft)
                {
                    if (warmupMoveLeft(temp)) rev = temp.moveLeft();
                    if (rev){ stepConter++;}
                }
                if (keycode == Invariable.codeRight)
                {
                    if (warmupMoveRight(temp)) rev = temp.moveRight();
                    if (rev){ stepConter++;}
                }
                if (keycode == Invariable.codeBareak)
                {
                    for(int j=0;j<gameElements.size();j++)
                    {
                        ((GameElement)gameElements.get(j)).breakStep();
                    }
                    if(stepConter > 0) stepConter--;
                    rev = true;
                }
            }
        }
        if(rev == false && keycode != Invariable.codeBareak)
            this.popAllStep();
        return rev;
    }


    /**
     * 取得指定坐标的游戏元素,如果指定坐标上有多个游戏元素则取得不可覆盖的那个元素
     * @param x int 坐标X
     * @param y int 坐标Y
     * @return GameElement 取得的元素,未取得元素时则返回null
     */
    public GameElement getElement(int x,int y)
    {
        GameElement rev = null;
        GameElement temp = null;
        for(int i=0;i<gameElements.size();i++)
        {
            temp = (GameElement)gameElements.get(i);
            if(temp.x == x && temp.y == y)
            {
                rev = temp;
                //如果取得的元素是不能覆盖的则直接将其返回,否则要保留结果继续判断
                if(!temp.canOvercast()) return temp;
            }
        }
        return rev;
    }

    /**
     * 准备将指定游戏元素向上移动,将移动他相关的元素
     * @param ge GameElement 指定的游戏元素
     * @return boolean 如果指定元素不能移动则返回false
     */
    public boolean warmupMoveUp(GameElement ge)
    {
        boolean rev = false;
        GameElement temp = getElement(ge.x,ge.y-Invariable.unitSize);
        if(temp != null)
        {
            if (temp.canOvercast())return true;
            else if (!temp.canMove())return false;
            else
            {
                GameElement temp1 = getElement(temp.x, temp.y - Invariable.unitSize);
                if (temp1.canOvercast())
                {
                    temp.moveUp();
                    return true;
                }
                else return false;
            }
        }
        return false;
    }
    /**
     * 准备将指定游戏元素向下移动,将移动他相关的元素
     * @param ge GameElement 指定的游戏元素
     * @return boolean 如果指定元素不能移动则返回false
     */
    public boolean warmupMoveDown(GameElement ge)
    {
        boolean rev = false;
        GameElement temp = getElement(ge.x,ge.y + Invariable.unitSize);
        if(temp != null)
        {
            if (temp.canOvercast())return true;
            else if (!temp.canMove())return false;
            else
            {
                GameElement temp1 = getElement(temp.x, temp.y + Invariable.unitSize);
                if (temp1.canOvercast())
                {
                    temp.moveDown();
                    return true;
                }
                else return false;
            }
        }
        return false;
    }

    /**
     * 准备将指定游戏元素向左移动,将移动他相关的元素
     * @param ge GameElement 指定的游戏元素
     * @return boolean 如果指定元素不能移动则返回false
     */
    public boolean warmupMoveLeft(GameElement ge)
    {
        boolean rev = false;
        GameElement temp = getElement(ge.x - Invariable.unitSize,ge.y);
        if(temp != null)
        {
            if (temp.canOvercast())return true;
            else if (!temp.canMove())return false;
            else
            {
                GameElement temp1 = getElement(temp.x - Invariable.unitSize, temp.y);
                if (temp1.canOvercast())
                {
                    temp.moveLeft();
                    return true;
                }
                else return false;
            }
        }
        return false;
    }

    /**
     * 准备将指定游戏元素向右移动,将移动他相关的元素
     * @param ge GameElement 指定的游戏元素
     * @return boolean 如果指定元素不能移动则返回false
     */
    public boolean warmupMoveRight(GameElement ge)
    {
        boolean rev = false;
        GameElement temp = getElement(ge.x + Invariable.unitSize,ge.y);
        if(temp != null)
        {
            if (temp.canOvercast())return true;
            else if (!temp.canMove())return false;
            else
            {
                GameElement temp1 = getElement(temp.x + Invariable.unitSize, temp.y);
                if (temp1.canOvercast())
                {
                    temp.moveRight();
                    return true;
                }
                else return false;
            }
        }
        return false;
    }

}

⌨️ 快捷键说明

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