Example #1
0
        public override void RankingUpdate()
        {
            // enemysにエネミーのデータを入れる
            List <Vector2> scale = new List <Vector2>();

            // エネミー一体一体の大きさを個別に保存
            foreach (var enemy in GameObjectManager.FindAll(CharacterID.Enemy))
            {
                scale.Add(enemy.transform.Scale);
            }

            // スケールでソート
            var scaleVar = scale.OrderByDescending(s => s.X).ToList();

            // Rankingの初期値はエネミーの数
            playerRank = scaleVar.Count;

            // プレイヤーのランクを決定
            for (int enemyNumber = 0; enemyNumber < scaleVar.Count; enemyNumber++)
            {
                // プレイヤー全体の大きさが今調べているエネミーの大きさよりも大きかったら
                if ((CompVector2.SumScale(CharacterID.Player).X > scaleVar[enemyNumber].X))
                {
                    // 現在調べているエネミーのナンバーをプレイヤーに入れる
                    playerRank = enemyNumber;

                    // それ以降は処理しない
                    break;
                }
            }
        }
Example #2
0
 private void PlayerNullCheck()
 {
     if (GameObjectManager.FindAll(CharacterID.Player).Count == 0)
     {
         GameObjectManager.Clear();
         isEnd = true;
     }
 }
Example #3
0
        /// <summary>
        /// プレイヤーがスペースキーを押したときに分裂する処理
        /// </summary>
        protected void Division(ref Vector2 futureScale, ref Vector2 currentScale, Vector2 position)
        {
            // スペースが押されたら && 大きさが2以上
            if (input.IsKeyDown(Keys.Space) && currentScale.X > 2f && GameObjectManager.FindAll(CharacterID.Player).Count < 8)
            {
                // 分裂すると大きさが半分になる
                currentScale /= 2;
                futureScale  /= 2;

                // 大きさが1を下回ったら1を代入(大きさが1より下に行かないように)
                if (currentScale.X < 1f)
                {
                    currentScale = new Vector2(1f);
                    futureScale  = currentScale;
                }
                GameObjectManager.Add(new DivisionPlayer(currentScale, radius, Speed(speed, currentScale.X), position, gameManager));
            }
        }
Example #4
0
        /// <summary>
        /// 餌を見つける
        /// </summary>
        private void FindFood()
        {
            List <Vector2> FoodPos = new List <Vector2>();

            // 餌を入れる
            foreach (GameObject food in GameObjectManager.FindAll(CharacterID.Food))
            {
                // 餌と自分との距離が301ドット以上離れているならリストに入れない(軽くするため、、、たぶん軽くなるはず)
                if (Vector2.Distance(food.transform.Position, transform.Position + CompVector2.ScaleConversion(scale, radius)) >= 301f)
                {
                    continue;
                }

                // 餌の座標を個別に保存する
                FoodPos.Add(food.transform.Position);
            }

            if (FoodPos.Count != 0)
            {
                // ソート(バグあり)
                FoodPos = FoodPos.OrderBy(o => CompVector2.MinVector2(transform.Position, o.X, o.Y)).ToList();

                // 見つけた餌の座標の自分から一番近いところを入れる
                findFoodPos = FoodPos[0];

                // 餌との距離が0ドット未満になったら中をクリアする
                if (Vector2.Distance(transform.Position, FoodPos[0]) < 0)
                {
                    FoodPos.RemoveAt(0);
                }
            }

            // 近くに餌があったら食べに行く
            if (FoodPos.Count != 0)
            {
                mode = EnemyMoveMode.EatMove;
            }
        }