示例#1
0
        private WeaveData MakeData(long id)
        {
            var data = new WeaveData();

            data.Id       = id;
            data.Turns    = infos[id].Turns;
            data.Cooldown = infos[id].Cooldown;
            return(data);
        }
示例#2
0
        private static List <long> FindWeaveMemberIds(WeaveData hostData, List <WeaveData> memberData)
        {
            Debug.Assert(memberData.Count > 0);
            Debug.Assert(hostData.Cooldown == 0);
            Debug.Assert(hostData.Turns > 1);

            var partyIds = FindWeaveMemberIds(memberData);

            if (partyIds.Count > 0)
            {
                // Found.
                // Check if host is in hurry state.
                int hostTurns      = hostData.Turns - 1;
                var minMemberTurns = ComputeMimimumTurns(memberData.Select(data => data.Turns).ToList());

                if (hostTurns >= minMemberTurns)
                {
                    // Hurry.
                    partyIds.Add(hostData.Id);
                }
                else
                {
                    // Not hurry.
                    // Predict the next party.
                    foreach (var id in partyIds)
                    {
                        var dt = memberData.Find(data => data.Id == id);
                        --dt.Turns;
                        dt.Cooldown = 1;
                    }

                    memberData = memberData.Where(data => data.Turns > 0).ToList();
                    var nextPartyIds = FindWeaveMemberIds(memberData);
                    if (nextPartyIds.Count == 0)
                    {
                        // Can not find the next party.
                        // The host will be in the current party.
                        partyIds.Add(hostData.Id);
                    }
                }
            }
            return(partyIds);
        }