📄 gametankmanager.java
字号:
package com.ipanel.games.tank;
import java.io.IOException;
import java.util.Calendar;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class GameTankManager {
private GameLayer layer = null;
private Timer timer = new Timer();
private final int TIMER_INTERVAL = 10000;
private final GTMCalendar gtm = new GTMCalendar();
private long TIME_LAST_NEW_TANK = 0;
private IPTankRandom tankRandom = new IPTankRandom();
private final int TANK_TOTAL = 10;
private int iCounter = 0;
public GameTankManager(GameLayer layer) {
super();
this.layer = layer;
startGameTank();
}
/**
* 规则: 隔一个时间间隔,一次产生随机数个数(1~4)的GameTank。
*/
private void startGameTank() {
timer.schedule(new TankManagerTask(), 0, TIMER_INTERVAL);
}
class TankManagerTask extends TimerTask {
public void run() {
try {
Thread.currentThread().sleep(50);
} catch (InterruptedException e1) {
layer.paintException("Exception from Thread.sleep()!");
}
/**
* 得到0、1、2、3。
*/
int iNumber = tankRandom.next(2);
for (int i = 0; i <= iNumber; i++) {
iCounter++;
if (iCounter < TANK_TOTAL) {
try {
new GameTank(layer, tankRandom.next(16));
TIME_LAST_NEW_TANK = gtm.getTimeInMillis();
} catch (IOException e) {
layer
.paintException("Exception in GameTankManager.TankManagerTask.run()!");
}
}
}
}
}
void pauseWork() {
timer.cancel();
}
void restartWork() {
timer = new Timer();
long lCurrentTime = gtm.getTimeInMillis();
long lRealInterval = lCurrentTime - TIME_LAST_NEW_TANK;
long lDelay = lRealInterval > TIMER_INTERVAL ? 0 : TIMER_INTERVAL
- lRealInterval;
timer.schedule(new TankManagerTask(), lDelay, TIMER_INTERVAL);
}
class GTMCalendar extends Calendar {
protected void computeFields() {
}
protected void computeTime() {
}
protected long getTimeInMillis() {
return super.getTimeInMillis();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -