public int Analyze(FieldContext context, Player.Index player)
        {
            var min = 99;
            var max = -99;

            for (var column = FieldContextConfig.OneLineBitCount - FieldContextConfig.VerticalLineLength; column < FieldContextConfig.OneLineBitCount; column++)
            {
                var exists = false;
                for (var unit = FieldContextConfig.MaxHiddenUnitIndex + 1; unit < FieldContextConfig.FieldUnitCount; unit++)
                {
                    for (var line = 0; line < FieldContextConfig.FieldUnitLineCount; line++)
                    {
                        exists = FieldContextHelper.ExistsSlime(context, player, unit, column + (line * FieldContextConfig.OneLineBitCount));
                        if (exists)
                        {
                            var top = (unit - FieldContextConfig.MaxHiddenUnitIndex + 1) * FieldContextConfig.FieldUnitLineCount + line;
                            min = Math.Min(top, min);
                            max = Math.Max(top, max);
                            break;
                        }
                    }
                    if (exists)
                    {
                        break;
                    }
                }
            }

            min = min == 99 ? 0 : min;
            max = max == -99 ? 0 : max;
            return(max - min);
        }
示例#2
0
        /// <summary>
        /// 結果の評価を実施します。
        /// </summary>
        /// <returns>評価値</returns>
        /// <param name="param">パラメータ</param>
        public override double Evaluate(Param param)
        {
            var win = FieldContextHelper.GetWinPlayer(param.LastContext, param.Context);

            Debug.Assert(win != null, "勝敗が決まっていません");

            var score = (win == Player.Index.First) ? BaseScore : BaseScore * -1;

            LogWriter.WirteLog($"value:{score}");
            var scoreDiff = param.Context.Score[Player.Index.First.ToInt()] - param.Context.Score[Player.Index.Second.ToInt()];

            LogWriter.WirteLog($"win:{win}");
            LogWriter.WirteLog($"score:{param.Context.Score[Player.Index.First.ToInt()]} | {param.Context.Score[Player.Index.Second.ToInt()]}");
            LogWriter.WirteLog($"scoreDiff:{scoreDiff}");
            if (win == Player.Index.First && scoreDiff > 0)
            {
                score += scoreDiff * BonusRate;
            }
            else if (win == Player.Index.Second && scoreDiff < 0)
            {
                score += scoreDiff * BonusRate;
            }
            LogWriter.WirteLog($"correction value:{score}");
            return(score);
        }
示例#3
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="pattern">パターン</param>
 /// <param name="patternDigit">2進数で表現されたパターン文字列のリスト</param>
 /// <param name="width">横幅</param>
 /// <param name="height">縦幅</param>
 public PatternDefinition(Pattern pattern, IEnumerable <string> patternDigit, int width, int height)
 {
     this.Pattern      = pattern;
     this.PatternDigit = FieldContextHelper.ConvertDigitStrsToUnit(patternDigit);
     this.Width        = width;
     this.Height       = height;
     this.IndexDic     = this.ReadIndex();
     this.MaxIndex     = this.IndexDic.Values.Max();
 }
        public void MergedFieldsGeneratorのGetNextテスト()
        {
            var units   = new List <uint>();
            var unitStr = new List <string>();

            unitStr.Add("10000000");
            unitStr.Add("01000000");
            unitStr.Add("00100000");
            unitStr.Add("00010000");
            units.Add(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            unitStr = new List <string>();
            unitStr.Add("00001000");
            unitStr.Add("00000100");
            unitStr.Add("00000010");
            unitStr.Add("00000001");
            units.Add(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));

            var expected = new List <uint>();

            expected.Add(units.First());
            unitStr = new List <string>();
            unitStr.Add("01000000");
            unitStr.Add("00100000");
            unitStr.Add("00010000");
            unitStr.Add("00001000");
            expected.Add(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            unitStr = new List <string>();
            unitStr.Add("00100000");
            unitStr.Add("00010000");
            unitStr.Add("00001000");
            unitStr.Add("00000100");
            expected.Add(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            unitStr = new List <string>();
            unitStr.Add("00010000");
            unitStr.Add("00001000");
            unitStr.Add("00000100");
            unitStr.Add("00000010");
            expected.Add(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            unitStr = new List <string>();
            unitStr.Add("00001000");
            unitStr.Add("00000100");
            unitStr.Add("00000010");
            unitStr.Add("00000001");
            expected.Add(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));

            var actual = this.Generator.GetNext(units.ToArray()).ToList();

            CollectionAssert.AreEqual(expected, actual);
        }
示例#5
0
        /// <summary>
        /// 死活監視評価を実行します。
        /// </summary>
        /// <param name="context">フィールド状態</param>
        /// <returns>評価値</returns>
        public double Evaluate(FieldContext context)
        {
            Debug.Assert(this.HasInjected, "依存性の注入が完了していません");

            var dangerCount = new int[Player.Length];

            Player.ForEach(player =>
            {
                foreach (var u in this.MyConfig.DangerUnits)
                {
                    foreach (var i in this.MyConfig.DangerIndexes)
                    {
                        dangerCount[player.ToInt()] += FieldContextHelper.ExistsSlime(context, player, FieldContextConfig.MaxHiddenUnitIndex + u, i) ? 1 : 0;
                    }
                }
            });
            var difCount = dangerCount[Player.Index.First.ToInt()] - dangerCount[Player.Index.Second.ToInt()];

            return(difCount * this.MyConfig.DangerEval);
        }
示例#6
0
        public void PatternGeneratorのGetNextテスト()
        {
            EnvConfig.Unity = false;
            var patterns       = new List <PatternDefinition>();
            var stairsOneLeft  = new PatternProvider().Get(Pattern.StairsOneLeft);
            var stairsTwoRight = new PatternProvider().Get(Pattern.StairsTwoRight);

            patterns.Add(stairsOneLeft);
            patterns.Add(stairsTwoRight);
            this.Generator.Inject(new PatternGenerator.Config()
            {
                Patterns = patterns,
            });

            var stairsOneLeftColors1P = new Dictionary <int, double>();
            var stairsOneLeftObs1P    = new Dictionary <int, double>();
            var stairsOneLeftColors2P = new Dictionary <int, double>();
            var stairsOneLeftObs2P    = new Dictionary <int, double>();

            // 1P-紫-StairsOneLeft
            var unitStr = new List <string>();

            unitStr.Add("10000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            var key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));

            this.AddCount(stairsOneLeftColors1P, key);

            // 1P-赤-StairsOneLeft
            unitStr = new List <string>();
            unitStr.Add("10000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors1P, key);
            this.AddCount(stairsOneLeftColors1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors1P, key);

            // 1P-おじゃま-StairsOneLeft
            unitStr = new List <string>();
            unitStr.Add("10000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftObs1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftObs1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftObs1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftObs1P, key);

            // 2P-青-StairsOneLeft
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors2P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors2P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors2P, key);

            // 2P-紫-StairsOneLeft
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors2P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors2P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors2P, key);

            // 2P-赤-StairsOneLeft
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors2P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftColors2P, key);

            // 2P-おじゃま-StairsOneLeft
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            key = stairsOneLeft.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsOneLeftObs2P, key);

            var stairsTwoRightColors1P = new Dictionary <int, double>();
            var stairsTwoRightObs1P    = new Dictionary <int, double>();
            var stairsTwoRightColors2P = new Dictionary <int, double>();
            var stairsTwoRightObs2P    = new Dictionary <int, double>();

            // 1P-紫-StairsTwoRight
            unitStr = new List <string>();
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors1P, key);

            // 1P-赤-StairsTwoRight
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors1P, key);
            this.AddCount(stairsTwoRightColors1P, key);
            unitStr = new List <string>();
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors1P, key);
            this.AddCount(stairsTwoRightColors1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("10000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("10000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors1P, key);

            // 1P-おじゃま-StairsTwoRight
            unitStr = new List <string>();
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightObs1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightObs1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("10000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightObs1P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("10000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightObs1P, key);

            // 2P-青-StairsTwoRight
            unitStr = new List <string>();
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors2P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors2P, key);

            // 2P-紫-StairsTwoRight
            unitStr = new List <string>();
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors2P, key);
            unitStr = new List <string>();
            unitStr.Add("00000000");
            unitStr.Add("01000000");
            unitStr.Add("00000000");
            unitStr.Add("00000000");
            key = stairsTwoRight.GetIndex(FieldContextHelper.ConvertDigitStrsToUnit(unitStr));
            this.AddCount(stairsTwoRightColors2P, key);

            var context = TestHelper.Receiver.Receive("../../resources/generators/patterngenerator/test-field-in-001-001.txt");
            var actual  = this.Generator.GetNext(context);

            Assert.AreEqual(RaisedIndex * 8, actual.Length);

            var raisedIndex = 0;

            // 1P-StairsOneLeft-color
            foreach (var kv in stairsOneLeftColors1P)
            {
                Assert.AreEqual(kv.Value, actual[kv.Key + raisedIndex], 0.0d, DebugHelper.ConvertUintToFieldUnit(stairsOneLeft.GetIndexKey(kv.Key)));
            }
            raisedIndex += RaisedIndex;

            // 1P-StairsOneLeft-obs
            foreach (var kv in stairsOneLeftObs1P)
            {
                Assert.AreEqual(kv.Value, actual[kv.Key + raisedIndex], 0.0d, DebugHelper.ConvertUintToFieldUnit(stairsOneLeft.GetIndexKey(kv.Key)));
            }
            raisedIndex += RaisedIndex;

            // 1P-StairsTwoRight-color
            foreach (var kv in stairsTwoRightColors1P)
            {
                Assert.AreEqual(kv.Value, actual[kv.Key + raisedIndex], 0.0d, DebugHelper.ConvertUintToFieldUnit(stairsTwoRight.GetIndexKey(kv.Key)));
            }
            raisedIndex += RaisedIndex;

            // 1P-StairsTwoRight-obs
            foreach (var kv in stairsTwoRightObs1P)
            {
                Assert.AreEqual(kv.Value, actual[kv.Key + raisedIndex], 0.0d, DebugHelper.ConvertUintToFieldUnit(stairsTwoRight.GetIndexKey(kv.Key)));
            }
            raisedIndex += RaisedIndex;

            // 2P-StairsOneLeft-color
            foreach (var kv in stairsOneLeftColors2P)
            {
                FileHelper.WriteLine($"key:{kv.Key} value:{kv.Value}");
                Assert.AreEqual(kv.Value, actual[kv.Key + raisedIndex], 0.0d, DebugHelper.ConvertUintToFieldUnit(stairsOneLeft.GetIndexKey(kv.Key)));
            }
            raisedIndex += RaisedIndex;

            // 2P-StairsOneLeft-obs
            foreach (var kv in stairsOneLeftObs2P)
            {
                Assert.AreEqual(kv.Value, actual[kv.Key + raisedIndex], 0.0d, DebugHelper.ConvertUintToFieldUnit(stairsOneLeft.GetIndexKey(kv.Key)));
            }
            raisedIndex += RaisedIndex;

            // 2P-StairsTwoRight-color
            foreach (var kv in stairsTwoRightColors2P)
            {
                Assert.AreEqual(kv.Value, actual[kv.Key + raisedIndex], 0.0d, DebugHelper.ConvertUintToFieldUnit(stairsTwoRight.GetIndexKey(kv.Key)));
            }
            raisedIndex += RaisedIndex;

            // 2P-StairsTwoRight-obs
            foreach (var kv in stairsTwoRightObs2P)
            {
                Assert.AreEqual(kv.Value, actual[kv.Key + raisedIndex], 0.0d, DebugHelper.ConvertUintToFieldUnit(stairsTwoRight.GetIndexKey(kv.Key)));
            }
        }
示例#7
0
        /// <summary>
        /// フィールドの特徴を生成します。
        /// </summary>
        /// <param name="context"></param>
        /// <returns>フィールドの特徴</returns>
        public SparseVector <double> GetNext(FieldContext context)
        {
            var vector = new SparseVector <double>(0.0d);
            var param  = new ErasedPotentialSlimeAnalyzer.Param();

            param.ErasedSlimes = context.UsingSlimes;

            var players = new[] { Player.Index.First, Player.Index.Second };

            foreach (var player in players)
            {
                if (!this.OwnConfig.BothPlayer && player != context.OperationPlayer)
                {
                    continue;
                }

                var erasedPotentialCount = 0;
                var slimeCount           = 0;
                foreach (var slime in context.UsingSlimes)
                {
                    param.TargetSlime = slime;
                    if (this.OwnConfig.TargetFeatue[Feature.ErasedPotentialCount])
                    {
                        // 他の色を消すと消える個数
                        erasedPotentialCount += ErasedPotentialSlimeAnalyzer.Analyze(context, player, param);
                    }

                    if (this.OwnConfig.TargetFeatue[Feature.SlimeCount])
                    {
                        // フィールドのスライム数
                        slimeCount += SlimeCountHelper.GetSlimeCount(context, player, slime);
                    }
                }
                if (this.OwnConfig.TargetFeatue[Feature.ErasedPotentialCount])
                {
                    vector.Add(erasedPotentialCount);
                }

                if (this.OwnConfig.TargetFeatue[Feature.SlimeCount])
                {
                    vector.Add(slimeCount);
                }

                if (this.OwnConfig.TargetFeatue[Feature.ObstructionCount])
                {
                    // フィールドのおじゃまスライム数
                    var obstructionCount = SlimeCountHelper.GetSlimeCount(context, player, Slime.Obstruction);
                    vector.Add(obstructionCount);
                }

                if (this.OwnConfig.TargetFeatue[Feature.NoticeObstruction])
                {
                    // 予告おじゃまスライム数
                    var noticeObstruction = ObstructionSlimeHelper.ObstructionsToCount(context.ObstructionSlimes[(int)player]);
                    vector.Add(noticeObstruction);
                }

                if (this.OwnConfig.TargetFeatue[Feature.HeightDiff])
                {
                    // 高低差
                    var hDiff = DifferenceHeightAnalyzer.Analyze(context, player);
                    vector.Add(hDiff);
                }

                if (this.OwnConfig.TargetFeatue[Feature.UpperCount])
                {
                    // 上部スライム数
                    var upperCount = 0;
                    foreach (var u in UpperUnits)
                    {
                        foreach (var i in UpperIndexes)
                        {
                            upperCount += FieldContextHelper.ExistsSlime(context, player, FieldContextConfig.MaxHiddenUnitIndex + u, i) ? 1 : 0;
                        }
                    }
                    vector.Add(upperCount);
                }

                if (this.OwnConfig.TargetFeatue[Feature.DangerCount])
                {
                    // 左から3番目のスライム数
                    var dangerCount = 0;
                    foreach (var u in DangerUnits)
                    {
                        foreach (var i in DangerIndexes)
                        {
                            dangerCount += FieldContextHelper.ExistsSlime(context, player, FieldContextConfig.MaxHiddenUnitIndex + u, i) ? 1 : 0;
                        }
                    }
                    vector.Add(dangerCount);
                }

                if (this.OwnConfig.TargetFeatue[Feature.Chain])
                {
                    // 起こりうる最大連鎖数
                    var chain = 0;
                    if (player == context.OperationPlayer)
                    {
                        chain = this.ChainAnalyzer.Analyze(context, player);
                    }
                    vector.Add(chain);
                }
            }
            ;

            return(vector);
        }