?? goldminermodel.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: 核心,游戲所有的運轉(zhuǎn)邏輯</p>
*
* <p>Description: 游戲的Model類,負責所有游戲相關(guān)數(shù)據(jù)及運行</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;
}
/**
* 更新游戲數(shù)據(jù)。
* @param elapsedTime long
*/
private void update(long elapsedTime) {
((Claw) map.getClaw()).update(elapsedTime);
((Miner) map.getMiner()).update(elapsedTime, (Claw) map.getClaw());
dealHit();
dealBout(elapsedTime);
}
/**
* 按非數(shù)字鍵盤向下方向鍵事件。
*/
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();
//爪子不是爪的狀態(tài),返回不處理。
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();
}
}
}
/**
* 游戲執(zhí)行。
*/
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數(shù)據(jù)已經(jīng)更新
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 + -