コード:
package net.dixq.irairabar;
import java.util.ArrayList;
import java.util.LinkedList;
import net.dixq.irairabar.Barricade.eType;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
public class GameMgr {
private enum eStatus{
NORMAL,
GAMEOVER,
GAMECLEAR
};
private static final float PI = (float) Math.PI;
private ArrayList<Barricade> _barrList = new ArrayList<Barricade>();//障害物リスト
private LinkedList<Task> _taskList = new LinkedList<Task>();// タスクリスト
private eStatus _status = eStatus.NORMAL;
private Player _player;
private BMoverA bma = new BMoverA();
private BMoverB bmb = new BMoverB();
private int stage = 1;//ステージ番号
/* private float x , y;*/
//インテント
Intent intent = new Intent();
GameMgr(Context con)
{
Resources res = con.getResources();
Bitmap bits = BitmapFactory.decodeResource(res, R.drawable.ic_launcher);
//ステージ
switch(stage)
{
case 1://(まだ今は試作段階なので簡単な配置にする)
_barrList.add(new BarricadeSquare( 220, 30, 100,100, new BMoveConf(bmb) , bits));//動く画像障害物A
_barrList.add(new BarricadeSquare( 70 , 60, 100, 100, new BMoveConf(bma) , bits));//動く画像障害物B
_barrList.add(new BarricadeSquare(20, 700, 80, 80, new BConf(eType.GOAL),bits));// ゴール
break;
case 2:
_barrList.add(new BarricadeSquare( 120, 30, 100,100, new BMoveConf(bmb)));//動く画像なし障害物A
_barrList.add(new BarricadeSquare( 50 , 100, 100, 100, new BMoveConf(bma)));//動く画像なし障害物B
_barrList.add(new BarricadeSquare(190, 700, 80, 80, new BConf(eType.GOAL)));// ゴール
break;
default:
break;
}
/*ここは今のところ関係ないのでコメント
_barrList.add(new BarricadeTriangle( 0, 0, 200, new BConf(+PI / 150),));// 左上回転する三角形
_barrList.add(new BarricadeTriangle(480, 0, 180, new BConf(+PI / 150)));// 右上回転する三角形
_barrList.add(new BarricadeStar(240, 240, 50, 200, new BConf(-PI / 360)));// 中央に回転する星
_barrList.add(new BarricadeStar(240, 240, 20, 80, new BConf(+PI / 360)));// 中央に回転する星
_barrList.add(new BarricadeSquare(300, 440, 200, 20, null));//右下の固定通路
_barrList.add(new BarricadeSquare(250, 520, 130, 20, null));//
_barrList.add(new BarricadeSquare(330, 620, 130, 20, null));//
_barrList.add(new BarricadeSquare(230, 390, 20, 350, null));//中央区切り線
_barrList.add(new BarricadeSquare(0, 480, 240, 20, new BConf(+PI / 360)));// 左下回転するバー
_barrList.add(new BarricadeSquare( 20, 600, 110, 20, new BConf(+PI / 360)));// 左下回転するバー
_barrList.add(new BarricadeSquare(130, 600, 110, 20, new BConf(+PI / 360)));// 左下回転するバー
_barrList.add(new BarricadeSquare(185, 600, 55, 20, new BConf(+PI / 360)));// 左下回転するバー
*/
// _barrList.add(new BarricadeSquare(20, 680, 80, 20, null));// ゴールに接触したバー
// _barrList.add(new BarricadeSquare(20, 700, 80, 80, new BConf(eType.GOAL),bits));// ゴール
for (Barricade bar : _barrList) {
_taskList.add(bar); //タスクリストに障害物を追加
}
_player = new Player();
_taskList.add(_player);
_taskList.add(new FpsController());
}
private boolean Collision(){
Vec vec = new Vec();
final Circle cir = _player.getPt();
for(Barricade barr : _barrList){
Def.eHitCode code = barr.isHit(cir, vec);
switch(code){
case OUT:
_status = eStatus.GAMEOVER;
intent.setClassName("net.dixq.irairabar", "net.dixq.irairabar.Start");
//startActivity(intent);
return true;
case GOAL:
_status = eStatus.GAMECLEAR;
stage++;
intent.setClassName("net.dixq.irairabar", "net.dixq.irairabar.IrairaBarActivity");
// startActivity(intent);
return true;
}
}
return false;
}
public boolean onUpdate()
{
if( _status != eStatus.NORMAL ){
return true;
}
if( Collision() ){
return true;
}
for (int i = 0; i < _taskList.size(); i++) {
if (_taskList.get(i).onUpdate() == false) { // 更新失敗なら
_taskList.remove(i); // そのタスクを消す
i--;
}
}
return true;
}
private void drawStatus(Canvas c){
switch( _status ){
case GAMEOVER:
{
Paint paint = new Paint();
paint.setTextSize(80);
paint.setColor(Color.BLACK);
c.drawText("GameOver", 40, 100, paint);
}
break;
case GAMECLEAR:
{
Paint paint = new Paint();
paint.setTextSize(80);
paint.setColor(Color.BLACK);
c.drawText("GameClear", 40, 100, paint);
}
break;
}
}
@SuppressLint("WrongCall")
public void onDraw(Canvas c)
{
//白く塗りつぶす
c.drawColor(Color.WHITE);
for (Task task : _taskList)
{
//描画
task.onDraw(c);
}
drawStatus(c);
}
}