/// <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); }
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)); } }
/// <summary> /// 初期キャラの設定 /// </summary> /// <param name="position"></param> public void SetStartPlayer(Vector2 position) { entryPlayer.Position = position; mediator.AddCharacter(entryPlayer); }
/// <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); } } } }