コード例 #1
0
 /// <param name="attack">攻撃</param>
 public AttackInfo(Attack attack)
 {
     Position = attack.ModelInfo.Position;
     BlockPosition = attack.BlockPosition;
     Speed = attack.Speed;
     OwnerInfo = attack.OwnerInfo;
 }
コード例 #2
0
ファイル: SimpleAI.cs プロジェクト: hirama-akihiro/DropFight
        public override void Update(Games.GameInfo gameInfo, Input input)
        {
            base.Update(gameInfo, input);

            //--- 自分のプレイヤー情報を更新 ---//
            foreach (PlayerInfo player in gameInfo.PlayerInfos)
            {
                if (PlayerIndex == player.Index)
                {
                    me = player;
                    break;
                }
            }

            //--- ルールベースで命令を記述 ---//
            foreach (PlayerInfo player in gameInfo.PlayerInfos)
            {
                // 自分の情報はスキップ
                if (player.Equals(me)) continue;
                // 敵の進行方向に自分がいるか
                if (isLookingThisWay(player))
                {
                    runAwayFrom(player);
                    break;
                }
                else
                {
                    // 自分の進行方向に敵がいるか
                    if (isInADirection(player))
                    {
                        Attack();
                        break;
                    }
                    else
                    {
                        idle(gameInfo);
                    }
                }
            }
        }
コード例 #3
0
ファイル: Block.cs プロジェクト: hirama-akihiro/DropFight
 private void UpdatePlayerInfo(GameInfo gameInfo)
 {
     foreach (PlayerInfo playerInfo in gameInfo.PlayerInfos)
     {
         if (new Vector2(ModelInfo.Position.X, ModelInfo.Position.Z) == new Vector2(playerInfo.BlockPositionX, playerInfo.BlockPositionZ))
         {
             this.PlayerInfo = playerInfo;
             return;
         }
     }
     this.PlayerInfo = null;
 }
コード例 #4
0
ファイル: Block.cs プロジェクト: hirama-akihiro/DropFight
        /// <summary>
        /// 必要に応じて落下させる
        /// </summary>
        /// <param name="gameInfo">ゲームの情報</param>
        private void FallIfNecessary(GameInfo gameInfo)
        {
            if (IsFalling)
            {
                return;
            }

            if (!beforeFallTimer.IsRunning || beforeFallTimer.Elapsed < minBeforeFallTime)
            {
                foreach (AttackInfo attackInfo in gameInfo.AttackInfos)
                {
                    if (ModelInfo.Position == attackInfo.BlockPosition)
                    {
                        lastAttackPlayerInfo = attackInfo.OwnerInfo;
                        beforeFallTimer.Start();
                        break;
                    }
                }
                return;
            }

            beforeFallTimer.Reset();
            Fall();
        }
コード例 #5
0
ファイル: BlockInfo.cs プロジェクト: hirama-akihiro/DropFight
 /// <param name="block">ブロック</param>
 public BlockInfo(Block block)
     : base(block)
 {
     this.IsDead = block.IsDead;
     this.PlayerInfo = block.PlayerInfo;
 }
コード例 #6
0
ファイル: SimpleAI.cs プロジェクト: hirama-akihiro/DropFight
 // プレイヤーの攻撃圏内から逃げる
 void runAwayFrom(PlayerInfo player)
 {
     //--- 敵の向きに対して時計回りの方向へ垂直に逃げる ---//
     // 敵の向き:上
     if (player.Direction == new Vector3(0, 0, -1)) Move(Direction.RIGHT);
     // 敵の向き:下
     else if (player.Direction == new Vector3(0, 0, 1)) Move(Direction.LEFT);
     // 敵の向き:左
     if (player.Direction == new Vector3(-1, 0, 0)) Move(Direction.UP);
     // 敵の向き:右
     if (player.Direction == new Vector3(1, 0, 0)) Move(Direction.DOWN);
 }
コード例 #7
0
ファイル: SimpleAI.cs プロジェクト: hirama-akihiro/DropFight
 /// <summary>
 /// プレイヤーの進行方向に自分がいるか
 /// </summary>
 /// <param name="player">プレイヤー情報</param>
 /// <returns></returns>
 Boolean isLookingThisWay(PlayerInfo player)
 {
     // 相手が死んでいたらスキップ
     if (player.IsDead) return false;
     // 敵から見た自分のいる方向
     Vector3 dir = me.Position - player.Position;
     dir = new Vector3((float)Math.Round(dir.X), (float)Math.Round(dir.Y), (float)Math.Round(dir.Z));
     dir.Normalize();
     if (dir == player.Direction) return true;
     return false;
 }
コード例 #8
0
ファイル: SimpleAI.cs プロジェクト: hirama-akihiro/DropFight
 /// <summary>
 /// 自分の進行方向にプレイヤーがいるか
 /// </summary>
 /// <param name="player"></param>
 /// <returns></returns>
 Boolean isInADirection(PlayerInfo player)
 {
     // 相手が死んでいたらスキップ
     if (player.IsDead) return false;
     // 自分から見た敵のいる方向
     Vector3 dir = player.Position - me.Position;
     dir = new Vector3((float)Math.Round(dir.X), (float)Math.Round(dir.Y), (float)Math.Round(dir.Z));
     dir.Normalize();
     if (dir == me.Direction) return true;
     return false;
 }