コード例 #1
0
        public BlockPath GetMove(Field field, Field opponent, Block current, Block next, int round, EvaluatorParameters pars)
        {
            Pars = new ApplyParameters(Rnd)
            {
                Round           = round,
                MaximumDuration = MaximumDuration,
                MaximumDepth    = MaximumDepth,
                Evaluator       = Evaluator,
                Generator       = Generator,
                Current         = current,
                Next            = next,
                FirstFilled     = field.FirstFilled,
                Parameters      = pars,
            };
            Root = new BlockRootNode(field);

            while (Pars.Depth < Pars.MaximumDepth && Pars.HasTimeLeft)
            {
                Root.Apply(++Pars.Depth, Pars);
                Logs.Add(new PlyLog(Pars.Round, Root.BestMove, Root.Score, Pars.Depth, Pars.Elapsed, Pars.Evaluations));
                Console.WriteLine(Logs.Last());
            }
            BestField = Root.BestField;
            return(Root.BestMove);
        }
コード例 #2
0
 /// <summary>Applies garbage and locks to the field.</summary>
 public static Field Apply(Field field, int depth, ApplyParameters pars)
 {
     // Lock a row every 15 turns.
     if ((pars.Round + depth) % 15 == 1)
     {
         field = field.LockRow();
     }
     if (depth == 1)
     {
         if (pars.Opponent.Garbage1 > 0)
         {
             var garbage = Row.GetGarbage(pars.Opponent.Garbage1, pars.Opponent.Points0, pars.Rnd);
             return(field.Garbage(garbage));
         }
     }
     else if (depth == 2 && pars.Opponent.Garbage2 > 0)
     {
         var garbage = Row.GetGarbage(pars.Opponent.Garbage2, pars.Opponent.Points1, pars.Rnd);
         return(field.Garbage(garbage));
     }
     return(field);
 }
コード例 #3
0
		/// <summary>Applies garbage and locks to the field.</summary>
		public static Field Apply(Field field, int depth, ApplyParameters pars)
		{
			// Lock a row every 15 turns. 
			if ((pars.Round + depth) % 15 == 1)
			{
				field = field.LockRow();
			}
			if (depth == 1)
			{
				if (pars.Opponent.Garbage1 > 0)
				{
					var garbage = Row.GetGarbage(pars.Opponent.Garbage1, pars.Opponent.Points0, pars.Rnd);
					return field.Garbage(garbage);
				}
			}
			else if (depth == 2 && pars.Opponent.Garbage2 > 0)
			{
				var garbage = Row.GetGarbage(pars.Opponent.Garbage2, pars.Opponent.Points1, pars.Rnd);
				return field.Garbage(garbage);
			}
			return field;
		}
コード例 #4
0
 /// <summary>
 /// Применяет кастомные праметры к элементу, если таковые найдутся - соответствующие его типу
 /// </summary>
 public void ApplyCustomParameters(RuleElement element)
 {
     ApplyParameters?.ForEach(c => c.Apply(element));
 }