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

📄 goldminermodel.java

📁 goldminer游戏
💻 JAVA
字号:
package com.hbwhzdg.goldminer;

import java.util.Iterator;
import java.util.Observable;

import com.hbwhzdg.goldminer.gamecore.GameMap;
import com.hbwhzdg.goldminer.gamecore.ResourceManager;
import com.hbwhzdg.goldminer.gamecore.sprites.Claw;
import com.hbwhzdg.goldminer.graphics.Animation;
import com.hbwhzdg.goldminer.graphics.Sprite;
import com.hbwhzdg.goldminer.gamecore.sprites.Miner;


/**
 * <p>Title: 核心,游戏所有的运转逻辑</p>
 *
 * <p>Description: 游戏的Model类,负责所有游戏相关数据及运行</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author rocken.zeng@gmail.com
 * @version 1.0
 */
public class GoldMinerModel extends Observable implements Runnable {
    private int timeInterval = 1; // 时间间隔,毫秒
    private boolean paused = false; // 暂停标志
    private boolean isRunning; //游戏运行标志
    private ResourceManager rm = new ResourceManager();
    private GameMap map = new GameMap();
    private int boutTime = 0; //本回合运行时间

    public GoldMinerModel() {
    }

    public void init() {
        rm.init();
        loadMap();
    }

    public void loadMap() {
        rm.loadNextMap();
        map = rm.getMap();
        boutTime = (map.getPassTime() + 1) * 1000;
    }

    /**
     * 更新游戏数据。
     * @param elapsedTime long
     */
    private void update(long elapsedTime) {
        ((Claw) map.getClaw()).update(elapsedTime);
        ((Miner) map.getMiner()).update(elapsedTime, (Claw) map.getClaw());
        dealHit();
        dealBout(elapsedTime);
    }

    /**
     * 按非数字键盘向下方向键事件。
     */
    public void vkDownEvent() {
        Claw claw = (Claw) map.getClaw();
        Miner miner = (Miner) map.getMiner();
        if (claw.getClawState()==0) {
            claw.setClawState(1);
        }
    }

    /**
     * 物品碰撞。
     */
    private void dealHit() {
        Claw claw = (Claw) map.getClaw();
        //爪子不是爪的状态,返回不处理。
        if (claw.getClawState() != 1) {
            return;
        }
        Iterator i = map.getSprites();
        Sprite sprite = null;
        double x, y, x1, y1, x2, y2;
        x = claw.getEndOrgX();
        y = claw.getEndOrgY();
        while (i.hasNext()) {
            sprite = (Sprite) i.next();
            x1 = sprite.getX();
            y1 = sprite.getY();
            x2 = x1 + sprite.getWidth();
            y2 = y1 + sprite.getHeight();
            if (((x1 < x + 5 && x + 5 < x2) || (x1 < x - 5 && x - 5 < x2)) &&
            //if ((x1 < x && x < x2) &&
                (y >= y1 && y <= y2)) {
                Sprite sprite1 = new Sprite((Animation) sprite.getAnim().clone());
                sprite1.setName(sprite.getName());
                Sprite sprite2 = new Sprite((Animation) sprite.getAnim().clone());
                sprite1.setCurrFrameIndex(1);
                sprite2.setCurrFrameIndex(0);
                claw.setClawedSprite(sprite1);
                claw.setPrize(sprite2);
                claw.setClawState(2);
                i.remove();
                break;
            }
        }
    }

    /**
     * 时间到进入下一回合。
     * @param elapsedTime long
     */
    private void dealBout(long elapsedTime) {
        if (boutTime > 0) {
            if (boutTime / 1000 > map.getPassTime()) {
                map.setPassTime(map.getPassTime());
            } else {
                map.setPassTime((int) Math.ceil(boutTime / 1000));
            }
        }
        if (boutTime == map.getPassTime() * 1000) {
            boutTime -= 1;
        } else {
            boutTime -= elapsedTime;
        }

        if (boutTime <= 0) {
            Claw claw = (Claw) map.getClaw();
            if (claw.getClawState() == 0) {
                loadMap();
            }
        }
    }

    /**
     * 游戏执行。
     */
    public void run() {
        long startTime = System.currentTimeMillis();
        long currTime = startTime;
        isRunning = true;
        while (isRunning) {
            long elapsedTime =
                    System.currentTimeMillis() - currTime;
            currTime += elapsedTime;
            update(elapsedTime);
            if (!paused) {
                setChanged(); // Model通知View数据已经更新
                notifyObservers(map);
            }
            try {
                Thread.sleep(timeInterval);
            } catch (InterruptedException ex) {
            }
        }
        isRunning = false;
    }

    public boolean isIsRunning() {
        return isRunning;
    }

    public void setIsRunning(boolean isRunning) {
        this.isRunning = isRunning;
    }

}

⌨️ 快捷键说明

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