Пример #1
0
        protected override IEnumerable <bool> E_Draw()
        {
            // ---- 環境制御 ----

            Game.I.Walls.Add(new Wall_22001());

            // ----

            Func <bool> f_updateTarget = SCommon.Supplier(this.E_UpdateTarget());
            Func <bool> f_attack       = SCommon.Supplier(this.E_Attack());

            for (int frame = 0; ; frame++)
            {
                f_updateTarget();

                double apprRate = 1.0 - Math.Min(1.0, frame / 60.0) * 0.05;

                DDUtils.Approach(ref this.X, this.Target_X, apprRate);
                DDUtils.Approach(ref this.Y, this.Target_Y, apprRate);

                if (EnemyConsts_ルーミア.TRANS_FRAME < frame)
                {
                    f_attack();
                }

                EnemyCommon_ルーミア.PutCrash(this, frame);
                EnemyCommon_ルーミア.Draw(this.X, this.Y);

                yield return(true);
            }
        }
Пример #2
0
        public static void Leave()
        {
            DDCurtain.SetCurtain(0, 1.0);
            DDCurtain.SetCurtain(20);

            DDGround.EL.Add(SCommon.Supplier(E_Leave()));
        }
Пример #3
0
        protected override IEnumerable <bool> E_EachFrame()
        {
            Game.I.Walls.Add(new Wall_Dark());
            Game.I.Walls.Add(new Wall_21001());
            Game.I.Walls.Add(new Wall_21002());

            for (int c = 0; c < 180; c++)
            {
                yield return(true);
            }

            // All Clear Bonus
            {
                long bonus = 100000000;

                DDGround.EL.Add(SCommon.Supplier(Effects.Message(
                                                     "ALL CLEAR BONUS +" + bonus,
                                                     new I3Color(64, 64, 0),
                                                     new I3Color(255, 255, 0)
                                                     )));

                Game.I.Score += bonus;
            }

            for (int c = 0; c < 300; c++)
            {
                yield return(true);
            }
        }
Пример #4
0
        protected override IEnumerable <int> Script()
        {
            // TODO: 背景
            // TODO: BGM

            // _#Include_Resource // for t20201023_GitHubRepositoriesSolve

            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(50, 200, "\u751f\u9084\u3057\u305f\u30a2\u30bf\u30b7\u306e\u4e16\u754c\u306b\u306f\u8272\u304c\u306a\u304b\u3063\u305f\u3002", 1200)));
            yield return(440);

            DDGround.EL.Add(SCommon.Supplier(DrawString(50, 250, "\u3067\u3082\u3001\u6291\u3048\u3088\u3046\u306e\u306a\u3044\u9ed2\u3044\u708e\u304c\u5fc3\u306e\u4e2d\u3067\u71c3\u3048\u76db\u308a\u3001", 800)));
            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(50, 300, "\u6050\u308d\u3057\u3044\u307b\u3069\u306e\u539f\u52d5\u529b\u3092\u751f\u3093\u3067\u3044\u305f\u3002")));

            yield return(600);

            DDGround.EL.Add(SCommon.Supplier(DrawString(20, 250, "\u305d\u306e\u529b\u306b\u3001\u5fc3\u306b\u5f93\u3046\u3053\u3068\u3067\u30a2\u30bf\u30b7\u306e\u4e16\u754c\u306b\u4e00\u8272\u3060\u3051\u8272\u304c\u623b\u3063\u305f\u3002")));

            yield return(600);

            DDGround.EL.Add(SCommon.Supplier(DrawString(320, 250, "\u300c \u30a2\u30ab\u8272 \u300d \u3060\u3051\u304c\u3002")));

            yield return(800);

            DDCurtain.SetCurtain(30, -1.0);
            DDMusicUtils.Fade();
            yield return(40);
        }
Пример #5
0
        protected override void Invoke_02(string command, params string[] arguments)
        {
            int c = 0;

            if (command == "画像")
            {
                this.Act.AddOnce(() => this.ImageFile = arguments[c++]);
            }
            else if (command == "A")
            {
                this.Act.AddOnce(() => this.A = double.Parse(arguments[c++]));
            }
            else if (command == "スライド")
            {
                this.Act.AddOnce(() =>
                {
                    this.SlideRate     = double.Parse(arguments[c++]);
                    this.DestSlideRate = double.Parse(arguments[c++]);
                });
            }
            else if (command == "フェードイン")
            {
                this.Act.Add(SCommon.Supplier(this.フェードイン()));
            }
            else if (command == "フェードアウト")
            {
                this.Act.Add(SCommon.Supplier(this.フェードアウト()));
            }
            else
            {
                throw new DDError();
            }
        }
Пример #6
0
 public static void ティウンティウン_AddToEL(double x, double y)
 {
     foreach (IEnumerable <bool> task in ティウンティウン(x, y))
     {
         DDGround.EL.Add(SCommon.Supplier(task));
     }
 }
Пример #7
0
        protected override IEnumerable <bool> E_Draw()
        {
            for (this.WaitFrame = 0; ; this.WaitFrame++)
            {
                while (DDUtils.IsOutOfCamera(new D2Point(this.X, this.Y), 50.0))                 // 画面外に居るときは休止する。
                {
                    yield return(true);
                }

                if (!this.Jump())
                {
                    this.FacingLeft = Game.I.Player.X < this.X;

                    if (
                        30 < this.WaitFrame &&
                        (
                            DDUtils.GetDistance(new D2Point(Game.I.Player.X, Game.I.Player.Y), new D2Point(this.X, this.Y)) < 300.0 ||
                            Math.Abs(Game.I.Player.Y - this.Y) < 32.0
                        ))
                    {
                        this.Jump = SCommon.Supplier(this.E_Jump(this.Random.Real() < 0.5 ? JUMP_SPEED : HI_JUMP_SPEED));
                    }

                    DDDraw.DrawBegin(Ground.I.Picture.Teki_a03_Jump01, this.X - DDGround.ICamera.X, this.Y - 16 - DDGround.ICamera.Y);
                    DDDraw.DrawZoom_X(this.FacingLeft ? 1.0 : -1.0);
                    DDDraw.DrawEnd();
                }

                this.Crash = DDCrashUtils.Circle(new D2Point(this.X, this.Y + 2.0), 20.0);

                yield return(true);
            }
        }
Пример #8
0
        protected override IEnumerable <bool> E_Draw()
        {
            // ---- 環境制御 ----

            Game.I.Walls.Add(new Wall_21001());
            Game.I.Walls.Add(new Wall_21002());

            // ----

            Func <bool> f_attack_01 = SCommon.Supplier(this.E_Attack_01());
            Func <bool> f_attack_02 = SCommon.Supplier(this.E_Attack_02());

            const int 画面分割_開始Frame = EnemyConsts_ルーミア.TRANS_FRAME + 180;

            for (int frame = 0; ; frame++)
            {
                DDUtils.Approach(ref this.X, GameConsts.FIELD_W / 2 + Math.Sin(frame / 101.0) * 20.0, 0.993);
                DDUtils.Approach(ref this.Y, GameConsts.FIELD_H / 2 + Math.Sin(frame / 103.0) * 20.0, 0.993);

                if (EnemyConsts_ルーミア.TRANS_FRAME < frame)
                {
                    if (!this.Mode_02)
                    {
                        if (frame < 画面分割_開始Frame)
                        {
                            double sec  = (画面分割_開始Frame - frame) / 60.0;
                            string sSec = sec.ToString("F2");

                            DDGround.EL.Add(() =>
                            {
                                DDPrint.SetPrint(
                                    GameConsts.FIELD_L + GameConsts.FIELD_W / 2 - 16,
                                    GameConsts.FIELD_T + GameConsts.FIELD_H / 2 - 8
                                    );
                                DDPrint.SetBorder(new I3Color(192, 0, 0));
                                DDPrint.SetColor(new I3Color(255, 255, 0));
                                DDPrint.Print(sSec);
                                DDPrint.Reset();

                                return(false);
                            });
                        }
                        else if (frame == 画面分割_開始Frame)
                        {
                            画面分割_Effect.Enter();
                            画面分割.Enabled = true;
                        }
                    }

                    f_attack_01();
                    f_attack_02();
                }

                EnemyCommon_ルーミア.PutCrash(this, frame);
                EnemyCommon_ルーミア.Draw(this.X, this.Y);

                yield return(true);
            }
        }
Пример #9
0
        protected override IEnumerable <int> Script()
        {
            // reset
            {
                Wall_GB        = 1.0;
                Wall_GB_Target = 1.0;
            }

            DDGround.EL.Add(() =>
            {
                DDUtils.Approach(ref Wall_GB, Wall_GB_Target, 0.998);
                return(true);
            });

            ClearAllSubScreen();

            Ground.I.Music.Ending_復讐.Play();

            DrawWall drawWall = new DrawWall();

            drawWall.DrawPictures.Add(new DrawWall.DrawPicture()
            {
                Picture = Ground.I.Picture.Ending_復讐_背景_01, YAdd = -0.02
            });
            DDGround.EL.Add(drawWall.Task);

            // _#Include_Resource // for t20201023_GitHubRepositoriesSolve

            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 200, "\u751f\u9084\u3057\u305f\u30a2\u30bf\u30b7\u306e\u4e16\u754c\u306b\u306f\u8272\u304c\u306a\u304b\u3063\u305f\u3002", 1200)));
            yield return(440);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 250, "\u3067\u3082\u3001\u6291\u3048\u3088\u3046\u306e\u306a\u3044\u9ed2\u3044\u708e\u304c\u5fc3\u306e\u4e2d\u3067\u71c3\u3048\u76db\u308a\u3001", 800)));
            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 300, "\u6050\u308d\u3057\u3044\u307b\u3069\u306e\u539f\u52d5\u529b\u3092\u751f\u3093\u3067\u3044\u305f\u3002")));

            yield return(600);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 250, "\u305d\u306e\u529b\u306b\u3001\u5fc3\u306b\u5f93\u3046\u3053\u3068\u3067\u30a2\u30bf\u30b7\u306e\u4e16\u754c\u306b\u4e00\u8272\u3060\u3051\u8272\u304c\u623b\u3063\u305f\u3002")));

            yield return(600);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 250, "\u300c \u30a2\u30ab\u8272 \u300d \u3060\u3051\u304c\u3002", 600, new I3Color(255, 0, 0))));

            Wall_GB_Target = 0.0;

            yield return(1200);

            DDCurtain.SetCurtain(600, -1.0);
            yield return(300);

            DDMusicUtils.Fade(300);
            yield return(330);

            ClearAllSubScreen();
        }
Пример #10
0
        private void 開放(int x, int y)
        {
            MapCell cell = Game.I.Map.GetCell(x, y);

            if (cell.Tile is Tile_Bボス部屋Shutter)
            {
                cell.Tile = TileCatalog.Create("芝");                 // restore
            }
            DDGround.EL.Add(SCommon.Supplier(Effects.閉鎖_開放(x * GameConsts.TILE_W + GameConsts.TILE_W / 2, y * GameConsts.TILE_H + GameConsts.TILE_H / 2)));
        }
Пример #11
0
        private void 開放(int x, int y)
        {
            MapCell cell = Game.I.Map.GetCell(x, y);

            if (cell.Tile is Tile_Bボス部屋Shutter)
            {
                cell.Tile = new Tile_None();
            }

            DDGround.EL.Add(SCommon.Supplier(Effects.閉鎖_開放(x * GameConsts.TILE_W + GameConsts.TILE_W / 2, y * GameConsts.TILE_H + GameConsts.TILE_H / 2)));
        }
Пример #12
0
 public override void Draw()
 {
     if (DDUtils.GetDistance(new D2Point(this.X, this.Y), new D2Point(Game.I.Player.X, Game.I.Player.Y)) < 50.0)
     {
         if (Game.I.FinalZone.OH_Event9003B.Once())
         {
             Game.I.Map.Design = new Design_0003();
             DDGround.EL.Add(SCommon.Supplier(Effects.Liteフラッシュ()));
         }
     }
 }
Пример #13
0
        /// <summary>
        /// 撃破されて消滅した。
        /// 注意:本メソッドを複数回実行しないように注意すること!
        /// -- DeadFlag == true の敵を { DeadFlag = true; Killed(); } してしまわないように!
        /// </summary>
        protected virtual void Killed()
        {
            DDGround.EL.Add(SCommon.Supplier(Effects.中爆発(this.X, this.Y)));

            foreach (Action <Enemy> a_killed in this.A_KilledList)
            {
                a_killed(this);
            }

            // TODO: SE
        }
Пример #14
0
        protected override IEnumerable <int> Script()
        {
            // TODO: 背景
            // TODO: BGM

            // _#Include_Resource // for t20201023_GitHubRepositoriesSolve

            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 200, "\u7729\u3057\u3044\u5149\u304c\u76ee\u306b\u98db\u3073\u8fbc\u3093\u3067\u304f\u308b\u3002", 800)));
            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 250, "\u3069\u3046\u3084\u3089\u79c1\u306f\u751f\u6b7b\u306e\u5883\u304b\u3089\u751f\u9084\u3057\u305f\u3089\u3057\u3044\u3002")));

            yield return(600);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 250, "\u5468\u308a\u306b\u306f\u5b89\u5835\u306e\u8868\u60c5\u3092\u6d6e\u304b\u3079\u305f\u533b\u5e2b\u3068\u770b\u8b77\u5e2b\u304c\u5c45\u308b\u3002", 1000)));
            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 300, "\u2026\u2026\u305d\u308c\u4ee5\u5916\u306b\u306f\u8ab0\u3082\u5c45\u306a\u3044\u3002", 800)));
            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 350, "\u305d\u308c\u3067\u826f\u3044\u3057\u3001\u3068\u3063\u304f\u306b\u899a\u609f\u306f\u3057\u3066\u3044\u305f\u3002")));

            yield return(600);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 150, "\u751f\u304d\u308b\u3053\u3068\u306f\u7d20\u6674\u3089\u3057\u304f\u3001\u305d\u308c\u3060\u3051\u3067\u5e78\u305b\u306a\u3053\u3068\u3002", 800)));
            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 200, "\u305d\u3093\u306a\u6b3a\u779e\u306b\u6e80\u3061\u305f\u8a00\u8449\u306b\u306f\u53cd\u5410\u304c\u51fa\u308b\u3002")));

            yield return(600);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 250, "\u3067\u3082\u3001\u79c1\u306f\u30a2\u30a4\u30c4\u3068\u4e00\u7dd2\u306b\u751f\u304d\u3066\u3044\u304f\u3068\u6c7a\u3081\u305f\u3002", 800)));
            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 300, "\u305d\u308c\u304c\u6b63\u3057\u3044\u9078\u629e\u304b\u3069\u3046\u304b\u306f\u3001\u751f\u304d\u629c\u3044\u3066\u307f\u3066\u521d\u3081\u3066\u5206\u304b\u308b\u3053\u3068\u3002")));

            yield return(600);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 200, "\u7b11\u3063\u3066\u6b7b\u306c\u3002", 1200)));
            yield return(240);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 250, "\u660e\u78ba\u306a\u76ee\u6a19\u304c\u51fa\u6765\u305f\u3053\u3068\u3067\u3001\u5fc3\u306f\u30b9\u30c3\u30ad\u30ea\u3057\u3066\u3044\u308b\u3002", 1000)));
            yield return(440);

            DDGround.EL.Add(SCommon.Supplier(DrawString(480, 330, "\u2026\u2026\u3068\u308a\u3042\u3048\u305a\u3001\u5893\u53c2\u308a\u3068\u9762\u4f1a\u304b\u3089\u59cb\u3081\u3066\u307f\u3088\u3046\u304b\u306a\u3002")));

            yield return(800);

            DDCurtain.SetCurtain(30, -1.0);
            DDMusicUtils.Fade();
            yield return(40);
        }
Пример #15
0
        public void Draw()
        {
            if (_draw == null)
            {
                _draw = SCommon.Supplier(this.E_Draw());
            }

            if (!_draw())
            {
                Novel.I.Status.Surfaces.RemoveAll(v => v == this);                 // Remove Me
            }
        }
Пример #16
0
 public override IEnumerable <bool> E_Task()
 {
     for (int frame = 0; ; frame++)
     {
         if (DDUtils.Random.Real() < BlockCreateRate)
         {
             this.EL.Add(SCommon.Supplier(this.E_Block()));
         }
         this.EL.ExecuteAllTask();
         yield return(true);
     }
 }
Пример #17
0
        public void Draw()
        {
            if (_draw == null)
            {
                _draw = SCommon.Supplier(this.E_Draw());
            }

            if (!_draw())
            {
                this.DeadFlag = true;
            }
        }
Пример #18
0
        /// <summary>
        /// 壁紙を描画する。
        /// </summary>
        public void Draw()
        {
            if (_draw == null)
            {
                _draw = SCommon.Supplier(this.E_Draw());
            }

            if (!_draw())
            {
                throw null;                 // never
            }
        }
Пример #19
0
        /// <summary>
        /// 敵 被弾
        /// </summary>
        /// <param name="enemy">被弾した敵</param>
        /// <param name="shot">被弾させた自弾</param>
        private void AH_EnemyCrashed(Enemy enemy, Shot shot, DDCrash shotCrash)
        {
            switch (shot.Kind)
            {
            case Shot.Kind_e.NORMAL:
            {
                if (!shot.Vanished)                                                                          // ? まだ消滅していない。
                {
                    this.PlayerEffects.Add(SCommon.Supplier(Effects.ShotDead(shot.X, shot.Y, shotCrash.R))); // 自弾消滅エフェクト
                    shot.Vanished = true;                                                                    // 敵に当たったら「通常弾」は消滅する。
                }
            }
            break;

            case Shot.Kind_e.BOMB:
            {
                // 敵に当たっても「ボム」は消滅しない。

                if (enemy.IsBoss())                                 // ボスの場合は回復!
                {
                    DDGround.EL.Add(SCommon.Supplier(Effects.ボス回復(GameConsts.FIELD_L + enemy.X, GameConsts.FIELD_T + enemy.Y)));

#if true
                    enemy.HP -= enemy.InitialHP;
                    enemy.HP  = (int)(enemy.HP * 0.99);
                    enemy.HP += enemy.InitialHP;
#else // old
                    enemy.HP++;
                    enemy.HP = Math.Min(enemy.HP, enemy.InitialHP);
#endif

                    return;
                }
            }
            break;

            default:
                throw null;                         // never
            }

            enemy.HP -= shot.AttackPoint;

            if (1 <= enemy.HP)             // ? まだ生存している。
            {
                enemy.Damaged();
            }
            else             // ? 死亡した。
            {
                enemy.Kill(true);
            }
        }
Пример #20
0
        /// <summary>
        /// 壁紙を描画する。
        /// </summary>
        /// <param name="xRate">マップにおける画面の位置(X位置_レート)</param>
        /// <param name="yRate">マップにおける画面の位置(Y位置_レート)</param>
        public void Draw(double xRate, double yRate)
        {
            if (_draw == null)
            {
                _draw = SCommon.Supplier(this.E_Draw());
            }

            this.DrawXRate = xRate;
            this.DrawYRate = yRate;

            if (!_draw())
            {
                throw null;                 // never
            }
        }
Пример #21
0
        protected override void Invoke_02(string command, params string[] arguments)
        {
            int c = 0;

            if (command == "追加")
            {
                string   name    = arguments[c++];
                string[] effArgs = arguments.Skip(c).ToArray();

                this.EL.Add(SCommon.Supplier(this.GetEffect(name, effArgs)));
            }
            else
            {
                throw new DDError();
            }
        }
Пример #22
0
        protected override IEnumerable <bool> E_Draw()
        {
            bool   falling = false;
            double ySpeed  = 0.0;

            const double GRAVITY     = 0.5;
            const double SPEED_Y_MAX = 8.0;

            for (; ;)
            {
                if (
                    this.Y < Game.I.Player.Y &&
                    Math.Abs(Game.I.Player.X - this.X) < 50.0
                    )
                {
                    falling = true;
                }

                if (falling)
                {
                    this.Y += ySpeed;

                    ySpeed += GRAVITY;
                    ySpeed  = Math.Min(ySpeed, SPEED_Y_MAX);

                    I2Point pt = GameCommon.ToTablePoint(new D2Point(this.X, this.Y));

                    if (Game.I.Map.GetCell(pt).Tile.IsGround())                     // ? 地面に落ちた。
                    {
                        this.DeadFlag = true;

                        DDGround.EL.Add(SCommon.Supplier(this.E_地面に落ちた(
                                                             pt.X * GameConsts.TILE_W + GameConsts.TILE_W / 2,
                                                             pt.Y * GameConsts.TILE_H - GameConsts.TILE_H / 2
                                                             )));

                        break;
                    }
                }

                DDDraw.DrawCenter(Ground.I.Picture.Stage02_Chip_g04_01, this.X - DDGround.ICamera.X, this.Y - DDGround.ICamera.Y);

                this.Crash = DDCrashUtils.Rect_CenterSize(new D2Point(this.X, this.Y), new D2Size(16, 32));

                yield return(true);
            }
        }
Пример #23
0
        public Enemy_Meteor(D2Point pos)
            : base(pos)
        {
            this.Angle = DDUtils.GetAngle(Game.I.Player.X - pos.X, Game.I.Player.Y - pos.Y);
            this.Speed = 0.0;

            {
                int clr = DDUtils.Random.GetInt(192);
                this.Color = new I3Color(255, clr, clr);
            }

            this.Rot       = 0.0;
            this.RotAdd    = 0.0;
            this.RotAddAdd = DDUtils.Random.DReal() * 0.001;

            DDGround.EL.Add(SCommon.Supplier(this.E_出現エフェクト()));
        }
Пример #24
0
        protected override void Invoke_02(string command, params string[] arguments)
        {
            int c = 0;

            if (command == "Image")
            {
                this.Act.AddOnce(() => this.ImageFile = arguments[c++]);
            }
            else if (command == "A")
            {
                this.Act.AddOnce(() => this.A = double.Parse(arguments[c++]));
            }
            else if (command == "Zoom")
            {
                this.Act.AddOnce(() => this.Zoom = double.Parse(arguments[c++]));
            }
            else if (command == "待ち")
            {
                this.Act.Add(SCommon.Supplier(this.待ち(int.Parse(arguments[c++]))));
            }
            else if (command == "フェードイン")
            {
                this.Act.Add(SCommon.Supplier(this.フェードイン()));
            }
            else if (command == "フェードアウト")
            {
                this.Act.Add(SCommon.Supplier(this.フェードアウト()));
            }
            else if (command == "モード変更")
            {
                this.Act.Add(SCommon.Supplier(this.モード変更(arguments[c++])));
            }
            else if (command == "スライド")
            {
                double x = double.Parse(arguments[c++]);
                double y = double.Parse(arguments[c++]);

                this.Act.Add(SCommon.Supplier(this.スライド(x, y)));
            }
            else
            {
                ProcMain.WriteLog(command);
                throw new DDError();
            }
        }
Пример #25
0
        public bool EachFrame()
        {
            // ダメージを受ける・死亡したら即終了
            if (
                1 <= Game.I.Player.DeadFrame ||
                1 <= Game.I.Player.DamageFrame
                )
            {
                return(false);
            }

            if (_eachFrame == null)
            {
                _eachFrame = SCommon.Supplier(this.E_Draw());
            }

            return(_eachFrame());
        }
Пример #26
0
        protected override IEnumerable <bool> E_Draw()
        {
            D2Point speed        = GameCommon.GetXYSpeed(this.Direction, 8.0);
            int     bouncedCount = 0;

            for (int frame = 0; ; frame++)
            {
                this.X += speed.X;
                this.Y += speed.Y;

                if (this.壁をすり抜ける)                 // ? 跳ね返り可能
                {
                    bool bounced = false;

                    if (this.IsInsideWall(-10, 0) || this.IsInsideWall(10, 0))
                    {
                        speed.X *= -1.0;
                        bounced  = true;
                    }
                    if (this.IsInsideWall(0, -10) || this.IsInsideWall(0, 10))
                    {
                        speed.Y *= -1.0;
                        bounced  = true;
                    }
                    if (bounced)
                    {
                        DDGround.EL.Add(SCommon.Supplier(Effects.跳ねた(this.X, this.Y)));
                        bouncedCount++;

                        if (BOUNCE_MAX <= bouncedCount)
                        {
                            this.壁をすり抜ける = false;
                        }
                    }
                }
                DDDraw.DrawBegin(Ground.I.Picture2.IconSet[0, 35], this.X - DDGround.ICamera.X, this.Y - DDGround.ICamera.Y);
                DDDraw.DrawRotate(frame / 2.0);
                DDDraw.DrawEnd();

                this.Crash = DDCrashUtils.Circle(new D2Point(this.X, this.Y), 10.0);

                yield return(!DDUtils.IsOutOfCamera(new D2Point(this.X, this.Y)));                // カメラの外に出たら(画面から見えなくなったら)消滅する。
            }
        }
Пример #27
0
        protected override IEnumerable <bool> E_Draw()
        {
            double dc_r = Ground.I.Picture2.D_DECOCIRCLE.Get_W() / 2.0;
            double dc_z = BOMB_R / dc_r;

            Func <bool>[] circles = new Func <bool>[]
            {
                SCommon.Supplier(this.Circle(
                                     0.75,
                                     dc_z,
                                     0.1,
                                     0.05
                                     )),
                SCommon.Supplier(this.Circle(
                                     0.25,
                                     dc_z * 0.75,
                                     dc_z * 2.0,
                                     0.01
                                     )),
                SCommon.Supplier(this.Circle(
                                     0.5,
                                     dc_z * 0.5,
                                     0.1,
                                     -0.02
                                     )),
            };

            for (int frame = 0; frame < GameConsts.PLAYER_BOMB_FRAME_MAX + 60; frame++)
            {
                this.Y -= frame / 60.0;

                foreach (Func <bool> circle in circles)
                {
                    circle();
                }

                this.Crash = DDCrashUtils.Circle(
                    new D2Point(this.X, this.Y),
                    BOMB_R
                    );

                yield return(true);
            }
        }
Пример #28
0
            public override IEnumerable <bool> E_Task()
            {
                Func <bool>[] drawItems = new Func <bool> [ITEM_NUM];

                for (int index = 0; index < ITEM_NUM; index++)
                {
                    drawItems[index] = SCommon.Supplier(this.E_DrawItem(index));
                }

                for (; ;)
                {
                    for (int index = 0; index < ITEM_NUM; index++)
                    {
                        drawItems[index]();
                    }

                    yield return(true);
                }
            }
Пример #29
0
        public override IEnumerable <bool> E_Draw()
        {
            Func <double> getA = SCommon.Supplier(WallCommon.E_GetA_フェードイン(this));

            for (int slide = 0; ; slide += 11, slide %= 108)
            {
                DDDraw.SetAlpha(getA());

                for (int dx = -slide; dx < DDConsts.Screen_W; dx += 108)
                {
                    for (int dy = 0; dy < DDConsts.Screen_H; dy += 108)
                    {
                        DDDraw.DrawSimple(Ground.I.Picture.Wall0002, dx, dy);
                    }
                }
                DDDraw.Reset();

                yield return(true);
            }
        }
Пример #30
0
        private static void PutDeadEffect(Enemy enemy)
        {
            switch (enemy.Kind)
            {
            case Enemy.Kind_e.ENEMY:
                Ground.I.SE.SE_ENEMYKILLED.Play();
                Game.I.EnemyEffects.Add(SCommon.Supplier(Effects.EnemyDead(enemy.X, enemy.Y)));
                break;

            case Enemy.Kind_e.TAMA:
                Game.I.EnemyEffects.Add(SCommon.Supplier(Effects.TamaDead(enemy.X, enemy.Y)));
                break;

            case Enemy.Kind_e.ITEM:
                throw null;                         // never // アイテムは独自の死亡イベントを行う。

            default:
                throw null;                         // never
            }
        }