Exemplo n.º 1
0
        /// <summary>
        /// 画面を描画する。
        /// </summary>
        public void Draw()
        {
            // 背景
            DX.SetDrawBright(BackR, BackG, BackB);
            DX.DrawGraph(0, 0, imgBack, DX.FALSE);
            DX.SetDrawBright(255, 255, 255);

            Enemies.ForEach(enemy => enemy.Draw());
            OwnBullets.ForEach(bullet => bullet.Draw());
            EnemyBullets.ForEach(bullet => bullet.Draw());
            OwnChar.Draw();
            if (Boss != null)
            {
                Boss.Draw();
                DX.DrawFillBox(bossHpX1, bossHpY1, bossHpX1 + bossHpW, bossHpY1 + bossHpH, bossHpColBack);
                DX.DrawFillBox(bossHpX1, bossHpY1, bossHpX1 + Boss.HP * bossHpW / Boss.MaxHP, bossHpY1 + bossHpH, bossHpCol);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 1フレームぶんの処理を行う。
        /// </summary>
        public void Update()
        {
            // スクリプト実行
            runner.Step();

            // 自機
            OwnChar.Update(key);

            // 敵
            Enemies.ForEach(enemy => enemy.Update());

            // 自機の弾
            OwnBullets.ForEach(bullet => bullet.Update());

            // 敵の弾
            EnemyBullets.ForEach(bullet => bullet.Update());

            // ボス
            if (Boss != null)
            {
                Boss.Update();
            }

            // 画面外の弾を削除
            OwnBullets.RemoveAll(bullet =>
                                 bullet.Position.X < -bullet.Radius ||
                                 bullet.Position.Y < -bullet.Radius ||
                                 bullet.Position.X > 640 + bullet.Radius ||
                                 bullet.Position.Y > 480 + bullet.Radius);
            EnemyBullets.RemoveAll(bullet =>
                                   bullet.Position.X < -bullet.Radius ||
                                   bullet.Position.Y < -bullet.Radius ||
                                   bullet.Position.X > 640 + bullet.Radius ||
                                   bullet.Position.Y > 480 + bullet.Radius);

            // 敵と弾の当たり判定
            for (var bi = OwnBullets.Count - 1; bi >= 0; --bi)
            {
                var bullet = OwnBullets[bi];
                for (var ei = Enemies.Count - 1; ei >= 0; --ei)
                {
                    var enemy = Enemies[ei];
                    if (collidesCircleCircle(
                            bullet.Position.X, bullet.Position.Y, bullet.Radius,
                            enemy.Position.X, enemy.Position.Y, enemy.Radius))
                    {
                        enemy.OnDamaged(bullet.Power);
                        OwnBullets.RemoveAt(bi);
                        break;
                    }
                }
            }
            Enemies.RemoveAll(enemy => enemy.Dead);

            // ボスと弾の当たり判定
            if (Boss != null)
            {
                for (var bi = OwnBullets.Count - 1; bi >= 0; --bi)
                {
                    var bullet = OwnBullets[bi];
                    if (collidesCircleCircle(
                            bullet.Position.X, bullet.Position.Y, bullet.Radius,
                            Boss.Position.X, Boss.Position.Y, Boss.Radius))
                    {
                        Boss.OnDamaged(bullet.Power);
                        OwnBullets.RemoveAt(bi);
                    }
                }
            }

            // 自機と敵の当たり判定
            foreach (var enemy in Enemies)
            {
                if (collidesCircleCircle(
                        OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius,
                        enemy.Position.X, enemy.Position.Y, enemy.Radius))
                {
                    failed = !DebugMode;
                }
            }

            // 自機とボスの当たり判定
            if (Boss != null)
            {
                if (collidesCircleCircle(
                        OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius,
                        Boss.Position.X, Boss.Position.Y, Boss.Radius))
                {
                    failed = !DebugMode;
                }
            }

            // 自機と敵の弾の当たり判定
            foreach (var bullet in EnemyBullets)
            {
                if (collidesCircleCircle(
                        OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius,
                        bullet.Position.X, bullet.Position.Y, bullet.Radius))
                {
                    failed = !DebugMode;
                }
            }

            // R キーで自滅
            if (key.IsPressed(DX.KEY_INPUT_R))
            {
                failed = true;
            }
        }