ホームへ戻る

s2.13 ゲームクリア画面を作る


 先ほどの章で必要なことはほとんどやってしまったので、今回は同じ要領でゲームクリア画面を作れば良いだけです。

ではGameMgr.javaの変更箇所を確認していきましょう

↓GameMgr.java (
赤字部 変更)

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;

        GameMgr() {
                _barrList.add(new BarricadeSquare(  0,  0,480, 20, null));// 画面4隅に四角形を配置
                _barrList.add(new BarricadeSquare(  0,  0, 20,800, null));
                _barrList.add(new BarricadeSquare(460,  0, 20,800, null));
                _barrList.add(new BarricadeSquare(  0,780,480, 20, null));

//              _barrList.add(new BarricadeSquare(0, 390, 480, 20, new BConf(+PI / 180)));// 中央に回転するバー(時計回り)
//              _barrList.add(new BarricadeSquare(0, 390, 480, 20, new BConf(-PI / 180)));// 中央に回転するバー(反時計回り)
//              _barrList.add(new BarricadeTriangle(240, 400, 200, new BConf(+PI / 180)));// 中央に回転する三角形(時計回り)
//              _barrList.add(new BarricadeStar(240, 400, 80, 220, new BConf(+PI / 180)));// 中央に回転する星(時計回り)

                _barrList.add(new BarricadeSquare(20, 20, 100, 100, new BConf(eType.GOAL)));// ゴール
                
                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;
                                return true;
                        case GOAL:
                                _status = eStatus.GAMECLEAR;
                                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;
                }
        }
        
        public void onDraw(Canvas c) {
                c.drawColor(Color.WHITE); // 白で塗りつぶす
                for (Task task : _taskList) {
                        task.onDraw(c);// 描画
                }
                drawStatus(c);
        }

}


ゴールの障害物を作り、ゴールに接触した時クリア状態にし、描画部では「GameClear」を表示しているだけですね。

※ゴールが回転してしまう人は Bconfクラスの speed の初期値を =0 にして下さい。

実行結果


この章のプロジェクトをダウンロード

→分からないことがあれば掲示板で質問して下さい


Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

- Remical Soft -