コード例 #1
0
ファイル: Form1.cs プロジェクト: Infinite-Lop/mountain-crash
        private void timer1_Tick_1(object sender, EventArgs e)
        {
            foreach (var player in players.PlayerList)
            {
                if (!player.IsAlive)
                {
                    continue;
                }
                player.Move(BattleField);
            }

            foreach (var player1 in players.PlayerList)
            {
                if (!player1.IsAlive)
                {
                    player1.UpdateColor(BattleField);
                    continue;
                }
                foreach (var mountain in mountains)
                {
                    player1.CollapsedMountain(mountain);
                    while (player1.Polygon.IsCover(mountain.Polygon))
                    {
                        player1.Move(BattleField);
                    }
                }
                foreach (var river in rivers)
                {
                    player1.CollapsedRiver(river);
                }
                foreach (var clinic in clinics)
                {
                    player1.CollapseClinic(clinic);
                }
                foreach (var pit in pits)
                {
                    player1.CollapsedPit(pit, pits);
                }
            }

            if (proprieter != null && proprieter.IsAlive)
            {
                proprieter.FingerGame(players.PlayerList);
                foreach (var player2 in players.PlayerList)
                {
                    if (proprieter != player2 && player2.Polygon.IsCover(proprieter.Polygon))
                    {
                        proprieter.Settle(TimeInSecond);
                        player2.Settle(TimeInSecond);
                        player2.UpdateColor(BattleField);
                    }
                }
            }

            if (egg != null && egg.IsAlive)
            {
                foreach (var player2 in players.PlayerList)
                {
                    if (player2 != egg && player2.IsAlive && !egg.IsInEarth)
                    {
                        egg.GetIntoEarth(player2);
                        if (egg.HitPoint > 0)
                        {
                            egg.Settle(TimeInSecond);
                        }
                    }
                }
            }

            if (ozone != null && ozone.IsAlive)
            {
                foreach (var player2 in players.PlayerList)
                {
                    if (player2 != ozone && player2.IsAlive)
                    {
                        ozone.Radius(player2);
                        player2.Settle(TimeInSecond);
                    }
                }
            }

            foreach (var player1 in players.PlayerList)
            {
                foreach (var player2 in players.PlayerList)
                {
                    if (player1 == proprieter)
                    {
                        player1.Settle(TimeInSecond);
                        continue;
                    }
                    else
                    {
                        if (player1 != player2 && player2 != proprieter && player2.IsAlive && player1.IsAlive)
                        {
                            player1.Battle(player2, killOptions, TeamNumber);
                            player1.Settle(TimeInSecond);
                            player2.Settle(TimeInSecond);
                        }
                    }
                }
            }

            playerRemained.Text = Player.PlayerRemainedNumber.ToString();
            switch (TeamNumber.Value)
            {
            case 0:
                if (Player.PlayerRemainedNumber <= 1 && isStarted)
                {
                    Result.Rows.Clear();
                    players.PlayerList.Sort();
                    players.PlayerList[0].SurvivalTime = TimeInSecond;
                    players.PlayerList[0].SurvivalRank = 1;
                    foreach (var player in players.PlayerList)
                    {
                        Result.Rows.Add(player.ShowInfo());
                    }
                    FinishUp();
                }
                break;

            case 1:
                bool isFinish = isStarted &&
                                ((proprieter == null) || (proprieter != null && !proprieter.IsAlive)) &&
                                ((egg == null) || (egg != null && !egg.IsAlive)) &&
                                ((elf == null) || (elf != null && !elf.IsAlive)) &&
                                ((hat == null) || (hat != null && !hat.IsAlive)) &&
                                ((ozone == null) || (ozone != null && !ozone.IsAlive));
                if (isFinish)
                {
                    Result.Rows.Clear();
                    players.PlayerList.Sort();
                    foreach (var player in players.PlayerList)
                    {
                        if (player.IsAlive)
                        {
                            player.SurvivalTime = TimeInSecond;
                            player.SurvivalRank = 1;
                        }
                        Result.Rows.Add(player.ShowInfo());
                    }
                    FinishUp();
                }
                break;

            default:
                int teamWin;
                var teamTemp =
                    from p in players.PlayerList
                    where p.IsAlive && p.IsPlayer
                    select p.Team;
                Dictionary <int, int> dic = new Dictionary <int, int>();
                if (teamTemp.Count() > 0)
                {
                    foreach (var val in teamTemp)
                    {
                        //若字典中不存在该元素,则将该元素加入字典中
                        if (!dic.ContainsKey(val))
                        {
                            dic.Add(val, 1);
                        }
                        else        //若字典中存在该元素,则统计该元素在数组中出现的次数
                        {
                            dic[val] += 1;
                        }
                    }
                    if (dic.Count == 1)
                    {
                        //foreach (var key in dic.Keys)
                        //{
                        //    teamWin = dic[key];
                        //    break;
                        //}
                        Result.Rows.Clear();
                        players.PlayerList.Sort();
                        foreach (var player in players.PlayerList)
                        {
                            if (player.IsAlive)
                            {
                                player.SurvivalTime = TimeInSecond;
                                player.SurvivalRank = 1;
                            }
                            Result.Rows.Add(player.ShowInfo());
                        }
                        FinishUp();
                    }
                }
                else
                {
                    Result.Rows.Clear();
                    foreach (var player in players.PlayerList)
                    {
                        if (player.IsAlive)
                        {
                            player.SurvivalTime = TimeInSecond;
                            player.SurvivalRank = 1;
                        }
                        Result.Rows.Add(player.ShowInfo());
                    }
                    FinishUp();
                }
                break;
            }
        }