コード例 #1
0
        /// <summary>
        /// エネミーを生成し、エネミー生成後のcsvデータを返すメソッド
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public string[][] AddEnemy(string[][] data)
        {
            for (int y = 0; y < data.Length; y++)
            {
                for (int x = 0; x < data[y].Length; x++)
                {
                    if (int.Parse(data[y][x]) >= 70 && int.Parse(data[y][x]) <= 79)
                    {
                        Vector2 enemyPositon = new Vector2(x * 64, y * 64);//エネミーの場所

                        switch (data[y][x])
                        {
                        case "70":
                            mediator.AddCharacter(new Enemy("teki", enemyPositon, AIName.Turn, gameDevice, mediator));
                            break;

                        case "71":
                            mediator.AddCharacter(new Enemy("teki", enemyPositon, AIName.Normal, gameDevice, mediator));
                            break;

                        case "72":
                            mediator.AddCharacter(new Enemy("teki", enemyPositon, AIName.Shot, gameDevice, mediator));
                            break;
                        }

                        data[y][x] = "0"; //30以上40以下の場所は0になります。
                    }
                }
            }

            return(data);
        }
コード例 #2
0
 public void Action()
 {
     if (Input.GetKeyTrigger(Keys.Z) || Input.GetKeyTrigger(PlayerIndex.One, Buttons.Y))
     {
         sound.PlaySE("momo_atk");
         mediator.AddCharacter(new Attack(Position, dir, gameDevice, this));
     }
 }
コード例 #3
0
 /// <summary>
 /// 初期キャラの設定
 /// </summary>
 /// <param name="position"></param>
 public void SetStartPlayer(Vector2 position)
 {
     entryPlayer.Position = position;
     mediator.AddCharacter(entryPlayer);
 }
コード例 #4
0
        /// <summary>
        /// ターゲットに向かって高速突進
        /// </summary>
        /// <param name="gameTime"></param>
        private void JumpAttack(GameTime gameTime)
        {
            if (stateNum == 0)
            {
                               //サーチモード(ターゲットの位置を確認する)
                {
                    //描画モーションをアイドリングにする
                    setMotionAndAsset(MotionName.idling);

                    CD = new CountDownTimer(0.8f);
                    float a = CD.Now();

                    //プレイヤーの位置情報を取得
                    playerPos =
                        mediator.GetPlayer().Position;
                    alpha = (1 - a);
                    //プレイヤーの座標が変わらなければ
                    if (playerPos == mediator.GetPlayer().Position)
                    {
                        stateNum += 1;  //攻撃アルゴリズムを変更
                    }
                }
            }
            else if (stateNum == 1)
            {
                                    //ひたすら突進攻撃
                {
                    //描画モーションを突進にする
                    setMotionAndAsset(MotionName.attack);

                    velocity = (playerPos + new Vector2(0, -150)) - Position;  //移動量を設定
                    if (!invincible)
                    {
                                 //ダメージ状態でなければ
                        {
                            //紫のオーラをまとわせる
                            color = Color.Purple;
                        }
                    }
                    velocity.Normalize();  //移動の方向のみ取得
                    //特定の条件に一致いるか確認
                    if ((playerPos.Y - Position.Y) < 165 && (playerPos.Y - Position.Y) > 130)
                    {
                        //攻撃アルゴリズムを変更
                        CD.Update(gameTime);
                        float a = CD.Now();

                        alpha += (1 - a);
                        if (CD.IsTime())
                        {
                                     //一定時間たったら
                            {
                                stateNum = 2;
                            }
                        }
                    }
                    else
                    {
                        //プレイヤーのいたおよその方向に向かって突進
                        Position += velocity * 20;
                    }
                }
            }
            else if (stateNum == 2)
            {
                                    //突進&仕上げの気玉同時放出
                {
                    //ターゲットのY座標を取得
                    playerPos.Y = mediator.GetPlayer().Position.Y;

                    //自分とターゲットとの縦方向の距離が10より大きければ
                    if (Math.Abs(Position.Y - playerPos.Y) > 10f)
                    {
                        //ターゲットへの方向と距離を取得
                        velocity = playerPos - Position;
                        //方向のみを取得
                        velocity.Normalize();
                        //ターゲットに向かって突進
                        Position += velocity * 20;
                    }
                    else //ある程度ターゲットに近づいた
                    {
                        //気玉を多方向に放出
                        mediator.AddCharacter(new BossBullet(Position, gameDevice, 1, 2));
                        mediator.AddCharacter(new BossBullet(Position, gameDevice, 1, 4));
                        mediator.AddCharacter(new BossBullet(Position, gameDevice, 1, -2));
                        mediator.AddCharacter(new BossBullet(Position, gameDevice, 1, -4));

                        //気玉を放つ戦闘態勢に変更
                        ChangeState(BossState.ShotAttack);
                    }
                }
            }
        }