public void ConstructMany() { for (int i = 0; i < 100; i++) { IScreenshot screenshot = new EmguScreenshot("Screenshots/tetris_play_2.png", TimeSpan.Zero); } }
public void GetTileMeanException() { var timestamp = TimeSpan.FromSeconds(6); IScreenshot screenshot = new EmguScreenshot("Screenshots/tetris_play_2.png", timestamp); screenshot.GetTileMean(0, 0); screenshot.GetTileMean(19, 17); Assert.Throws <ArgumentException>(() => { screenshot.GetTileMean(-1, 0); }); Assert.Throws <ArgumentException>(() => { screenshot.GetTileMean(0, -1); }); Assert.Throws <ArgumentException>(() => { screenshot.GetTileMean(20, 0); }); Assert.Throws <ArgumentException>(() => { screenshot.GetTileMean(0, 18); }); }
public void Extract() { var extractor = new TetrisExtractor(_config); var screenshot = new EmguScreenshot("Screenshots/tetris_play_1.png", DateTime.Now.Subtract(DateTime.MinValue)); var stopwatch = new Stopwatch(); stopwatch.Start(); var gameState = extractor.Extract(screenshot, null); stopwatch.Stop(); Debug.Write($"Extraction in {stopwatch.ElapsedMilliseconds} ms"); Assert.NotNull(gameState); Assert.NotNull(gameState.Board); Assert.NotNull(gameState.Piece); Assert.NotNull(gameState.NextPiece); _logger.Info(gameState.Piece); _logger.Info(gameState.NextPiece); _logger.Info(gameState); _logger.Info(gameState.Board); }
public void ExtractNextPieceFuzzyFailCandidates(string path, Tetrimino expected) { var screenshot = new EmguScreenshot(path, DateTime.Now.Subtract(DateTime.MinValue)); var result = _pieceExtractor.ExtractNextPieceFuzzy(screenshot); Assert.AreEqual(expected, result.Result); }
public void ExtractNextPiece() { var screenshot = new EmguScreenshot("Screenshots/tetris_play_1.png", DateTime.Now.Subtract(DateTime.MinValue)); var nextPiece = _pieceExtractor.ExtractNextPiece(screenshot); Assert.AreEqual(Tetrimino.L, nextPiece); }
public void GetPieceMask(int x, int y, int expected) { var extractor = new TetrisExtractor(_config); var screenshot = new EmguScreenshot("Screenshots/tetris_play_2.png", DateTime.Now.Subtract(DateTime.MinValue)); var mask = extractor.GetPieceMask(screenshot, x, y); Assert.AreEqual(expected, mask); }
public void ExtractPieceSpawnedFuzzy1() { var screenshot = new EmguScreenshot("Screenshots/tetris_play_1.png", DateTime.Now.Subtract(DateTime.MinValue)); var result = _pieceExtractor.ExtractSpawnedPieceFuzzy(screenshot, 3); Assert.True(result.IsAccepted(0.5)); Assert.AreEqual(Tetrimino.S, result.Result.Tetrimino); }
public void ExtractNextPieceInvalid() { var screenshot = new EmguScreenshot("Screenshots/tetris_play_2.png", DateTime.Now.Subtract(DateTime.MinValue)); Assert.Throws <ApplicationException>(() => { _pieceExtractor.ExtractNextPiece(screenshot); }); }
public void NextPieceProbabilityOne() { var tetrimino = Tetrimino.L; var screenshot = new EmguScreenshot("Screenshots/tetris_play_1.png", DateTime.Now.Subtract(DateTime.MinValue)); var probability = _matcher.GetProbabilityNextPiece(screenshot, tetrimino); Assert.AreEqual(1.0, probability); }
public void ConstructorFile() { var file = "Screenshots/tetris_start.png"; var timestamp = TimeSpan.FromSeconds(6); IScreenshot screenshot = new EmguScreenshot(file, timestamp); Assert.NotNull(screenshot); Assert.AreEqual(timestamp, screenshot.Timestamp); }
public void NextPieceProbabilityNotOne() { var tetrimino = Tetrimino.O; var screenshot = new EmguScreenshot("Screenshots/tetris_play_1.png", DateTime.Now.Subtract(DateTime.MinValue)); var probability = _matcher.GetProbabilityNextPiece(screenshot, tetrimino); Assert.GreaterOrEqual(probability, 0.0); Assert.Less(probability, 1.0); }
public void ExtractNextPieceFuzzy() { var screenshot = new EmguScreenshot("Screenshots/tetris_play_1.png", DateTime.Now.Subtract(DateTime.MinValue)); var result = _pieceExtractor.ExtractNextPieceFuzzy(screenshot); Assert.True(result.IsAccepted(0.5)); Assert.False(result.IsRejected(0.5)); Assert.AreEqual(Tetrimino.L, result.Result); }
public void PieceMatcher() { // source image string path = "Screenshots/white.png"; var sourceImage = new Mat(path, LoadImageType.Grayscale); var screenshot = new EmguScreenshot(sourceImage, DateTime.Now.Subtract(DateTime.MinValue)); var pieceMatcher = new TemplateMatcher(); pieceMatcher.GetProbabilityNextPiece(screenshot, Tetrimino.I); }
public void NextPieceProbabilityZero() { var image = new Mat("Screenshots/white.png", LoadImageType.Grayscale); var screenshot = new EmguScreenshot(image, DateTime.Now.Subtract(DateTime.MinValue)); foreach (var tetrimino in Tetriminos.All) { var probability = _matcher.GetProbabilityNextPiece(screenshot, tetrimino); Assert.AreEqual(0.0, probability); } }
public void GetProbability(Tetrimino tetrimino, int x, int y, double expectedProbability) { var extractor = new TetrisExtractor(_config); var screenshot = new EmguScreenshot("Screenshots/tetris_play_2.png", DateTime.Now.Subtract(DateTime.MinValue)); var piece = new Piece(tetrimino, 0, x, y); var probability = extractor.GetProbability(screenshot, piece); Assert.LessOrEqual(probability, 1.0); Assert.GreaterOrEqual(probability, 0.0); Assert.AreEqual(expectedProbability, probability); }
public void ExtractPieceSpawnedFalledPieceIsInOrigin() { var extractor = new TetrisExtractor(_config); var screenshot = new EmguScreenshot("Screenshots/tetris_play_1.png", DateTime.Now.Subtract(DateTime.MinValue)); var piece = extractor.ExtractSpawnedPiece(screenshot, 10); Assert.NotNull(piece); Assert.AreEqual(Tetrimino.S, piece.Tetrimino); Assert.AreEqual(0, piece.Orientation); Assert.AreEqual(0, piece.X); Assert.AreEqual(0, piece.Y); }
public void ExtractPieceSpawnedFuzzy2() { var screenshot = new EmguScreenshot("Screenshots/tetris_play_2.png", DateTime.Now.Subtract(DateTime.MinValue)); var result = _pieceExtractor.ExtractSpawnedPieceFuzzy(screenshot, 5); Assert.True(result.IsRejected(_probabilityThreshold)); Assert.False(result.IsAccepted(_probabilityThreshold)); result = _pieceExtractor.ExtractSpawnedPieceFuzzy(screenshot, 6); Assert.True(result.IsAccepted(_probabilityThreshold)); Assert.AreEqual(Tetrimino.Z, result.Result.Tetrimino); }
public void ConfirmPieceMovement() { var extractor = new TetrisExtractor(_config); var screenshot = new EmguScreenshot("Screenshots/tetris_play_2.png", DateTime.Now.Subtract(DateTime.MinValue)); var lastPosition = new Piece(Tetrimino.Z, 0, 1, -6); var newPosition = extractor.ExtractMovedPieceWithoutErrorTolerance(screenshot, lastPosition, Move.Left, 0); Assert.NotNull(newPosition); Assert.AreEqual(Tetrimino.Z, newPosition.Tetrimino); Assert.AreEqual(0, newPosition.Orientation); Assert.AreEqual(0, newPosition.X); Assert.AreEqual(-6, newPosition.Y); }
public void ConstructorMat() { var mat = new Mat("Screenshots/tetris_start.png", LoadImageType.Grayscale); Assert.NotNull(mat); var width = mat.Width; var height = mat.Height; var timestamp = TimeSpan.FromSeconds(6); IScreenshot screenshot = new EmguScreenshot(mat, timestamp); Assert.AreEqual(width, screenshot.Width); Assert.AreEqual(height, screenshot.Height); Assert.AreEqual(timestamp, screenshot.Timestamp); }
public void Step(Action <Mat> showImage = null, Action <Mat> showProcessedImage = null) { // get image as photo of the gameboy screen (input) Mat image = Capture(); TimeSpan time = Clock.Time; // process image Mat processed = Quantizer.Quantize(image); showImage?.Invoke(image); if (_messages.Count > 0) { // send messages to agent Agent.Send(PopAllMessages()); } if (Play) { IScreenshot screenshot = new EmguScreenshot(processed, time); screenshot.OriginalImage = image; try { // extracts the game state Agent.Extract(screenshot); processed = Agent.Visualize(processed); showProcessedImage?.Invoke(processed); // presses the buttons Agent.Play(Executor); } catch (GameOverException) { OnGameOver(); } } else { showProcessedImage?.Invoke(processed); } OnAfterStep(); }
public void GetPixel() { var image = new Mat("Screenshots/tetris_start.png", LoadImageType.Grayscale); Assert.NotNull(image); var timestamp = TimeSpan.FromSeconds(6); IScreenshot screenshot = new EmguScreenshot(image, timestamp); Assert.AreEqual(0, screenshot.GetPixel(0, 0)); Assert.AreEqual(255, screenshot.GetPixel(160 - 1, 144 - 1)); Assert.AreEqual(255, screenshot.GetPixel(25, 20)); Assert.AreEqual(170, screenshot.GetPixel(25, 25)); Assert.AreEqual(85, screenshot.GetPixel(25, 33)); Assert.AreEqual(0, screenshot.GetPixel(25, 44)); }
public void GetTileMean() { var timestamp = TimeSpan.FromSeconds(6); IScreenshot screenshot = new EmguScreenshot("Screenshots/tetris_play_2.png", timestamp); for (int i = 0; i < 5; i++) { // test multiple time Assert.AreEqual(31, screenshot.GetTileMean(0, 0)); } Assert.AreEqual(103, screenshot.GetTileMean(1, 0)); Assert.AreEqual(255, screenshot.GetTileMean(2, 0)); Assert.AreEqual(85, screenshot.GetTileMean(5, 7)); Assert.AreEqual(255, screenshot.GetTileMean(5, 6)); }
public void GetProbabilityPerformance() { var screenshot = new EmguScreenshot("Screenshots/tetris_play_1.png", DateTime.Now.Subtract(DateTime.MinValue)); // 4 x 10 x 17 for (int orientation = 0; orientation < 4; orientation++) { for (int x = -4; x <= 5; x++) { for (int y = -16; y <= 0; y++) { var piece = new Piece(Tetrimino.T, orientation, x, y); var probability = _matcher.GetProbabilityCurrentPiece(screenshot, piece); Assert.GreaterOrEqual(probability, 0.0); Assert.LessOrEqual(probability, 1.0); } } } }