Exemplo n.º 1
0
        public override void ValidateScan(string configPath, ScreenAnalyzer.EMode mode, MLDataExporter dataExporter)
        {
            string testName = Path.GetFileNameWithoutExtension(configPath);

            GameState validationState = LoadValidationConfig(configPath);

            if (validationState == null || cachedGameState == null)
            {
                string exceptionMsg = string.Format("Test {0} failed! Scan results:{1}, config path: {2}", testName, cachedGameState, configPath);
                throw new Exception(exceptionMsg);
            }

            if (dataExporter != null && cachedCircles != null)
            {
                int numPatterns = 0;
                for (int idx = 0; idx < 9; idx++)
                {
                    // generate additional sample images by offseting source bounds -5..5 px in each direction
                    // numbers only, empty field doesn't have enough details to care
                    if (validationState.board[idx] > 0)
                    {
                        for (int offsetX = -5; offsetX <= 5; offsetX++)
                        {
                            for (int offsetY = -5; offsetY <= 5; offsetY++)
                            {
                                Rectangle offsetBounds = cachedCircles[idx];
                                offsetBounds.Offset(offsetX, offsetY);

                                float[] exportValues = ExtractCirclePattern(screenAnalyzer.cachedFastBitmap, offsetBounds);
                                dataExporter.ExportValues(exportValues, validationState.board[idx]);
                                numPatterns++;
                            }
                        }
                    }
                    else
                    {
                        float[] exportValues = ExtractCirclePattern(screenAnalyzer.cachedFastBitmap, cachedCircles[idx]);
                        dataExporter.ExportValues(exportValues, validationState.board[idx]);
                        numPatterns++;
                    }
                }

                Logger.WriteLine("Exported ML entries:{0}", numPatterns);
            }

            for (int idx = 0; idx < 9; idx++)
            {
                if (cachedGameState.board[idx] != validationState.board[idx])
                {
                    string exceptionMsg = string.Format("Test {0} failed! Board[{1}] got:{2}, expected:{3}",
                                                        testName, idx,
                                                        cachedGameState.board[idx],
                                                        validationState.board[idx]);
                    throw new Exception(exceptionMsg);
                    //Logger.WriteLine(exceptionMsg);
                }
            }
        }