public class GameEngine
{
protected AudioPlayer player;
protected HashMap laneMap = new HashMap();
protected Scorer scorer;
public GameEngine(AudioPlayer player, Scorer scorer, Object[] keys, TimingLane[] lanes)
{
this.player = player;
this.scorer = scorer;
if(keys.length!=lanes.length)
throw new IllegalArgumentException("keys number must be same lanes number");
for(int i=0;i< keys.length;i++)
{
laneMap.put(keys[i], lanes[i]);
lanes[i].setEngine(this);
}
}
public int getPlayedTimeMillis()
{
return player.getPlayedTimeMillis();
}
public int input(Object key)
{
return scorer.score((TimingLane)laneMap.get(key));
}
public void start()
{
new Thread(new Runnable(){
public void run()
{
// 各レーンのタイミングリストの値に対する入力が行われていないかスレッドを作成して監視します
}
}, "SG-Observe Miss").start();
player.play();
}
public void close()
{
player.close();
}
public boolean isFinished()
{
return player.isFinished();
}
}
上のメソッドの他にキーを与えて対応するタイミングリストを得るgetTimingList(Object key)
メソッドもあります。見ても分かるようにAudioPlayer等を単純に使用していることが多いですので
このクラスは本当に中央管理するクラスと思ってください。