Beispiel #1
0
        private async Task <TaskResult> Process(List <DailyTaskWrapper> tasks)
        {
            if (tasks.Count == 0)
            {
                return(TaskResult.CanNotBeDone);
            }

            // Nhiệm vụ đang làm.
            var doingTask = tasks.FirstOrDefault(item => item.State == TaskState.Received);

            // Số sao ít nhất.
            var minQuality = tasks.Min(item => item.Quality);

            // Xét nhiệm vụ với số sao ít nhất và dễ nhất.
            var task = tasks
                       .Where(item => item.Quality == minQuality)
                       .MinBy(item => item.Difficulty);

            if (TaskDifficulty.CanDo(task.Difficulty))
            {
                return(await Process(doingTask, task));
            }


            // Xét nhiệm vụ nhiều sao hơn.
            var harderTasks = tasks.Where(item => item.Quality == minQuality + 1).ToList();

            if (harderTasks.Count > 0)
            {
                var harderTask = harderTasks.MinBy(item => item.Difficulty);
                return(await Process(doingTask, harderTask));
            }

            return(TaskResult.CanNotBeDone);
        }