Example #1
0
        public TetrisSimulator(GameState gameState = null)
        {
            var board     = new Board();
            var piece     = new Piece();
            var nextPiece = Tetriminos.GetRandom();

            GameState = gameState ?? new GameState(board, piece, nextPiece)
            {
                StartLevel = 9
            };
        }
Example #2
0
        private void SpawnTetrimino()
        {
            currentTetriminos = (Tetriminos)Activator.CreateInstance(previewTetriminos.Peek());
            ghostTetriminos   = (Tetriminos)Activator.CreateInstance(previewTetriminos.Dequeue());
            AddToQueue();

            currentTetriminos.MoveDown(1);
            ghostTetriminos.IsGhostTetrimino = true;
            MoveGhostTetrimonos();
            JustSwitched = false;
        }
Example #3
0
        public TetrisSimulator InHeartMode()
        {
            var board     = new Board();
            var piece     = new Piece();
            var nextPiece = Tetriminos.GetRandom();

            GameState = new GameState(board, piece, nextPiece)
            {
                StartLevel = 9, HeartMode = true
            };
            return(this);
        }
Example #4
0
        public void SimpleSearchRandomBoards()
        {
            int maxHeight = 15;

            for (int i = 0; i < 100; i++)
            {
                var board   = TestHelper.GetRandomBoard(maxHeight);
                var current = Tetriminos.GetRandom();
                var next    = Tetriminos.GetRandom();

                var gameState = new GameState(board, current, next);
                var result    = _twoPieceSearch.Search(gameState);
            }
        }
Example #5
0
        private IEnumerable <GameState> GenerateGameStates(int number)
        {
            var random = new Random(123);

            for (int i = 0; i < number; i++)
            {
                var board     = new Board().Random(random);
                var piece     = new Piece(Tetriminos.GetRandom(random));
                var nextPiece = Tetriminos.GetRandom(random);

                var gameState = new GameState(board, piece, nextPiece);

                yield return(gameState);
            }
        }
Example #6
0
        public void PredictiveSearchAllSeven_Parallel()
        {
            Tetrimino current = Tetriminos.GetRandom();

            Task <SearchResult>[] tasks = new Task <SearchResult> [Tetriminos.All.Length];
            foreach (var next in Tetriminos.All)
            {
                tasks[(int)next] = Task.Factory.StartNew(() =>
                {
                    var gameState = new GameState(current, next);

                    return(_predictiveSearch.Search(gameState));
                });
            }

            Task.WaitAll(tasks);
        }
Example #7
0
        public void SwitchBank()
        {
            if (!JustSwitched)
            {
                JustSwitched = true;
                Type temp = currentTetriminos.GetType();
                if (bankTetriminos != null)
                {
                    currentTetriminos = (Tetriminos)Activator.CreateInstance(bankTetriminos);
                }
                else
                {
                    SpawnTetrimino();
                }
                bankTetriminos = temp;

                MoveGhostTetrimonos();
                notifyObservers();
            }
        }
Example #8
0
        static TimeSpan MeasurePredictiveSearch(int number)
        {
            var gamestates = Enumerable.Range(0, number)
                             .Select(x => new Board().Random())
                             .Select(x => new GameState(x, Tetriminos.GetRandom(), Tetriminos.GetRandom()))
                             .ToList();

            var heuristic = new YiyuanLeeHeuristic();
            var search    = new PredictiveSearch(heuristic);

            var sw = new Stopwatch();

            sw.Start();

            foreach (var gamestate in gamestates)
            {
                var result = search.Search(gamestate);
            }

            sw.Stop();
            return(sw.Elapsed);
        }
Example #9
0
        private bool Collides(Tetriminos tetriminos)
        {
            foreach (var position in tetriminos.Positions)
            {
                if (position.Y == 0)
                {
                    return(true);
                }

                try
                {
                    if (field[position.Y - 1][position.X] != 0)
                    {
                        return(true);
                    }
                }
                catch (Exception)
                {
                }
            }

            return(false);
        }