Пример #1
0
        public void FanRankFileAmbiguationPositiveTest()
        {
            // Tests both knights moving to same square for Rank ambiguity

            const string        fen      = "8/6k1/8/8/8/8/1K1N1N2/8 w - - 0 1";
            const EMoveNotation notation = EMoveNotation.Fan;

            var movingPiece   = new Piece(EPieces.WhiteKnight);
            var fromOneSquare = new Square(ESquare.d2);
            var fromTwoSquare = new Square(ESquare.f2);
            var toSquare      = new Square(ESquare.e4);

            var uniChar        = movingPiece.GetUnicodeChar();
            var toSquareString = toSquare.GetSquareString();

            var expectedPrimary   = $"{uniChar}{fromOneSquare.FileChar()}{toSquareString}";
            var expectedSecondary = $"{uniChar}{fromTwoSquare.FileChar()}{toSquareString}";

            var pos = new Position();
            var g   = GameFactory.Create(pos);

            g.NewGame(fen);

            var w1 = new Move(movingPiece, fromOneSquare, toSquare);
            var w2 = new Move(movingPiece, fromTwoSquare, toSquare);

            var actualPrimary   = w1.ToNotation(g.Position, notation);
            var actualSecondary = w2.ToNotation(g.Position, notation);

            Assert.Equal(expectedPrimary, actualPrimary);
            Assert.Equal(expectedSecondary, actualSecondary);
        }
Пример #2
0
        static void Main(string[] args)
        {
            const int numberOfGames = 100;

            for (var i = 0; i < numberOfGames; i++)
            {
                var gameRules = GameRules.Create();
                var game      = GameFactory.Create(gameRules.NumberOfPlayers, gameRules.NumberOfRounds, gameRules.NumberOfPlayers);

                PlayGame(game);

                var gameResult = new GameResult
                                 (
                    gameId: game.Id,
                    numberOfPlayers: gameRules.NumberOfPlayers,
                    wipLimit: gameRules.WipLimit,
                    numberOfDoneTickets: game.GetResult()
                                 );

                gameResultRepository.Save(gameResult);
            }

            var resultList = gameResultRepository.Get();

            csvService.Save(resultList);
        }
Пример #3
0
        public static IPerft Create(Action <string> boardPrintCallback = null, IEnumerable <IPerftPosition> positions = null)
        {
            positions ??= Enumerable.Empty <IPerftPosition>();
            var perft = new Perft(GameFactory.Create(), positions);

            return(perft);
        }
Пример #4
0
        public async Task StartConsoleGame(ConsoleGameOptions options)
        {
            var logger = Log.Logger.ForContext <ConsoleGameMain>();

            if (options.Player1Index < 0 || options.Player1Index >= PlayerList.Players.Length)
            {
                logger.Error("Player 1 index is invalid. Must be between 1 and {NumberOfPlayers}", PlayerList.Players.Length - 1);
            }

            if (options.Player2Index < 0 || options.Player2Index >= PlayerList.Players.Length)
            {
                logger.Error("Player 2 index is invalid. Must be between 1 and {NumberOfPlayers}", PlayerList.Players.Length - 1);
            }

            var gf   = new GameFactory(new RandomBoardFiller());
            var game = gf.Create(options.Player1Index, options.Player2Index);
            var p1   = PlayerList.Players[options.Player1Index].Create();
            var p2   = PlayerList.Players[options.Player2Index].Create();

            while (game.GetWinner(BattleshipBoard.Ships) == Winner.NoWinner)
            {
                await p1.GetShot(game.GameId, PlayerList.Players[options.Player2Index].Name, game.ShootingBoards[0],
                                 location => Task.FromResult(game.Shoot(1, location)));

                await p2.GetShot(game.GameId, PlayerList.Players[options.Player1Index].Name, game.ShootingBoards[1],
                                 location => Task.FromResult(game.Shoot(2, location)));
            }

            Console.WriteLine(game.GetWinner(BattleshipBoard.Ships) switch
            {
                Winner.Draw => "We have a draw!",
                Winner.Player1 => "Player 1 is the winner",
                Winner.Player2 => "Player 2 is the winner",
                _ => "No winner? this should never happen"
            });
Пример #5
0
        public void FoolsCheckMateTest()
        {
            // generate moves
            var moves = new List <Move>(4)
            {
                Move.Create(Squares.f2, Squares.f3),
                Move.Create(Squares.e7, Squares.e5),
                Move.Create(Squares.g2, Squares.g4),
                Move.Create(Squares.d8, Squares.h4)
            };

            // construct game and start a new game
            var board      = new Board();
            var pieceValue = new PieceValue();
            var position   = new Position(board, pieceValue);
            var game       = GameFactory.Create(position);

            game.NewGame();
            var state = new State();

            // make the moves necessary to create a mate
            foreach (var move in moves)
            {
                position.MakeMove(move, state);
            }

            // verify in check is actually true
            Assert.True(position.InCheck);

            var resultingMoves = position.GenerateMoves();

            // verify that no legal moves actually exists.
            Assert.True(!resultingMoves.Any());
        }
Пример #6
0
        public void MoveListToStringTest()
        {
            var pos  = new Position();
            var game = GameFactory.Create(pos);

            game.NewGame();

            var result   = new StringBuilder(1024 * 16);
            var expected = new StringBuilder(1024 * 16);

            var moves = new List <Move>(256);

            var rngeezuz = new Random(DateTime.Now.Millisecond);

            // generate 256 random moves
            for (var i = 0; i < 256; i++)
            {
                Square rndSquareFrom = (ESquare)rngeezuz.Next((int)ESquare.a1, (int)ESquare.h8);
                Square rndSquareTo   = (ESquare)rngeezuz.Next((int)ESquare.a1, (int)ESquare.h8);
                moves.Add(new Move(rndSquareFrom, rndSquareTo));

                expected.Append(' ');
                expected.Append(rndSquareFrom.ToString());
                expected.Append(rndSquareTo.ToString());
            }

            // generate a bitch string for them all.
            foreach (var move in moves)
            {
                result.Append(' ');
                game.MoveToString(move, result);
            }

            Assert.Equal(expected.ToString(), result.ToString());
        }
Пример #7
0
        public void FoolsCheckMateTest()
        {
            // generate moves
            var moves = new List <Move>(4)
            {
                new Move(EPieces.WhitePawn, ESquare.f2, ESquare.f3),
                new Move(EPieces.BlackPawn, ESquare.e7, ESquare.e5, EMoveType.Doublepush, EPieces.NoPiece),
                new Move(EPieces.WhitePawn, ESquare.g2, ESquare.g4, EMoveType.Doublepush, EPieces.NoPiece),
                new Move(EPieces.BlackQueen, ESquare.d8, ESquare.h4)
            };

            // construct game and start a new game
            var position = new Position();
            var game     = GameFactory.Create(position);

            game.NewGame();

            // make the moves necessary to create a mate
            foreach (var move in moves)
            {
                Assert.True(game.MakeMove(move));
            }

            // verify in check is actually true
            Assert.True(game.Position.InCheck);

            var moveList = game.Position.GenerateMoves();

            // verify that no legal moves actually exists.
            Assert.Empty(moveList);
        }
Пример #8
0
        private void StartButton_OnClick(object sender, RoutedEventArgs e)
        {
            var provider = new FuncInitialStateProvider(() =>
            {
                var state = new int[Constants.FieldSize, Constants.FieldSize];
                for (var i = 0; i < Constants.FieldSize; ++i)
                {
                    for (var j = 0; j < Constants.FieldSize; ++j)
                    {
                        if (string.IsNullOrWhiteSpace(_textBoxes[i, j].Text))
                        {
                            state[i, j] = 0;
                        }
                        else
                        {
                            state[i, j] = int.Parse(_textBoxes[i, j].Text);
                        }
                    }
                }

                return(new InitialFieldState(state));
            });

            var game = GameFactory.Create(provider);

            game.Step          += GameOnStep;
            game.GameCompleted += GameOnGameCompleted;
            Task.Run(() => game.Run());
        }
Пример #9
0
        public void Create_CorrectNumber_IsNotNull()
        {
            IGameFactory gameFactory = new GameFactory(new RngService());

            var game = gameFactory.Create(null);

            Assert.IsNotNull(game.CorrectNumber);
        }
Пример #10
0
        public void Create_TurnsLeft_ShouldStartAt3()
        {
            IGameFactory gameFactory = new GameFactory(new RngService());

            var game = gameFactory.Create(null);

            Assert.AreEqual(3, game.TurnsLeft);
        }
Пример #11
0
        public void Create_GameState_ShouldBeOnGoing()
        {
            IGameFactory gameFactory = new GameFactory(new RngService());

            var game = gameFactory.Create(null);

            Assert.AreEqual(GameState.OnGoing, game.GameState);
        }
Пример #12
0
        public void CreateGame_WithValidArguments_SuccessfullyCreatesNewGame()
        {
            var quiz = new Quiz("testquiz", new Question("question", new Choice("choice", 10)));
            var game = GameFactory.Create(quiz);

            Assert.That(game, Is.Not.Null);
            Assert.That(game.Quiz, Is.EqualTo(quiz));
        }
Пример #13
0
        public void ShouldNotRemainInCurrentLocationWhenCurrentLocationIsAMazeAndRandomNumberDoesExceedProbability()
        {
            var game             = GameFactory.Create("forest", () => 0.9);
            var originalLocation = game.Location;

            game.Move("n");

            Assert.NotEqual(originalLocation, game.Location);
        }
Пример #14
0
        public void SetFenTest()
        {
            var expected = new FenError(0, 0);
            var position = new Position();
            var game     = GameFactory.Create(position);
            var actual   = game.NewGame();

            Assert.Equal(expected, actual);
        }
Пример #15
0
        public void SetFenTest()
        {
            var board      = new Board();
            var pieceValue = new PieceValue();
            var pos        = new Position(board, pieceValue);
            var game       = GameFactory.Create(pos);

            game.NewGame();
        }
Пример #16
0
        public void Create_Players(int players)
        {
            IGameFactory gameFactory = new GameFactory(new RngService());

            var game = gameFactory.Create(new GameSetting()
            {
                Players = players
            });

            Assert.AreEqual(players, game.Players);
        }
Пример #17
0
        private static void Main()
        {
            var initialStateProvider = GetInitialStateProvider();

            var game = GameFactory.Create(initialStateProvider);

            game.Step          += GameOnStep;
            game.GameCompleted += GameOnGameCompleted;

            game.Run();
        }
Пример #18
0
        public XyzGame getGame(Room room)
        {
            Guid        id;
            string      type;
            GameConfig  config;
            List <Guid> users     = new List <Guid>();
            string      lastState = "";

            string query = "SELECT id, game_type, game_config FROM game WHERE room_id = @room_id AND deleted_at is null ORDER BY created_at DESC LIMIT 1";

            using (var cmd = new NpgsqlCommand(query, _connection, _transaction))
            {
                cmd.Parameters.AddWithValue("room_id", room.ID);
                NpgsqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    id     = reader.GetGuid(0);
                    type   = reader.GetString(1);
                    config = reader.GetFieldValue <GameConfig>(2);
                }
                else
                {
                    return(null);
                }
                reader.Close();
            }

            query = "SELECT user_id FROM room_player WHERE room_id = @room_id AND deleted_at is null";
            using (var cmd = new NpgsqlCommand(query, _connection, _transaction))
            {
                cmd.Parameters.AddWithValue("room_id", room.ID);
                NpgsqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Guid userID = reader.GetGuid(0);
                    users.Add(userID);
                }
                reader.Close();
            }

            query = "SELECT state FROM game_move WHERE game_id = @game_id ORDER BY created_at DESC limit 1";
            using (var cmd = new NpgsqlCommand(query, _connection, _transaction))
            {
                cmd.Parameters.AddWithValue("game_id", id);
                NpgsqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    lastState = reader.GetString(0);
                }
                reader.Close();
            }

            return(GameFactory.Create(type, users, config, lastState, new PostgresUserRepository(_connection, _transaction)));
        }
Пример #19
0
        public TicTacToeTest()
        {
            amir = User.NewUser("Amir");
            budi = User.NewUser("Budi");

            List <User> users = new List <User>();

            users.Add(amir);
            users.Add(budi);

            game = GameFactory.Create("tic-tac-toe", users);
        }
Пример #20
0
        public PoolGroup Build()
        {
            PoolFactory poolFactory = new PoolFactory();
            TeamFactory teamFactory = new TeamFactory();
            GameFactory gameFactory = new GameFactory();

            _poolGroup.Pools = poolFactory.Create(_numOfPools);
            _poolGroup.Pools = teamFactory.Create(_poolGroup.Pools, _numOfTeams, _seedMethod);
            _poolGroup.Pools = gameFactory.Create(_poolGroup.Pools, _numOfRounds);

            return(_poolGroup);
        }
        public void Create_ParametersArePassedOnToCreatedGame(int fieldWidth, int fieldHeight, int mineCount)
        {
            _gameFactory.FieldWidth  = fieldWidth;
            _gameFactory.FieldHeight = fieldHeight;
            _gameFactory.MineCount   = mineCount;

            var game = _gameFactory.Create();

            Assert.AreEqual(game.FieldWidth, _gameFactory.FieldWidth);
            Assert.AreEqual(game.FieldHeight, _gameFactory.FieldHeight);
            Assert.AreEqual(game.MineCount, _gameFactory.MineCount);
        }
Пример #22
0
        public static void Main(string[] args)
        {
            graphicsLoop = GraphicsLoop.CreateWithNewWindow(1280, 720, InitFlags.DisableVerticalSync | InitFlags.EnableDebugStats);

            var gameFactory = new GameFactory();

            game = gameFactory.Create();

            player = game.EntityService.CreateEntity();
            game.EntityService.AddEntityComponent(player, new MovementComponent {
                WorldPosition        = new DoubleVector3(-450, -450, 0),
                BaseRadius           = 30,
                BaseSpeed            = 100,
                IsPathfindingEnabled = true,
                PathingDestination   = new DoubleVector3(-450, -450, 0)
            });

            baddie = game.EntityService.CreateEntity();
            game.EntityService.AddEntityComponent(baddie, new MovementComponent {
                WorldPosition        = new DoubleVector3(0, 0, 0),
                BaseRadius           = 30,
                BaseSpeed            = 100,
                IsPathfindingEnabled = true,
                PathingDestination   = new DoubleVector3(0, 0, 0)
            });

            var r = new Random(0);

            for (var i = 0; i < 10; i++)
            {
                var rock = game.EntityService.CreateEntity();
                game.EntityService.AddEntityComponent(rock, new MovementComponent {
                    WorldPosition        = new DoubleVector3(r.Next(-500, 500), r.Next(-500, 500), 0),
                    BaseRadius           = 10,
                    BaseSpeed            = 100,
                    IsPathfindingEnabled = false
                });
                rocks.Add(rock);
            }

            var scene = new Scene();

            debugCanvas = new Canvas3DDebugMultiCanvasHost.Canvas3DDebugCanvas(graphicsLoop.GraphicsFacade, graphicsLoop.Presets, scene);

            for (var frame = 0; graphicsLoop.IsRunning(out var renderer, out var input); frame++)
            {
                scene.Clear();
                Step(graphicsLoop, game, input, scene);
                Render(scene, renderer);
            }
        }
Пример #23
0
        public void ValidateCastleling()
        {
            // position only has pawns, rooks and kings
            const string fen = "r3k2r/pppppppp/8/8/8/8/PPPPPPPP/R3K2R w KQkq - 0 1";
            const PositionValidationTypes validationType = PositionValidationTypes.Castleling;
            var game = GameFactory.Create();

            game.NewGame(fen);

            var validator = game.Pos.Validate(validationType);

            Assert.True(validator.IsOk);
            Assert.True(validator.ErrorMsg.IsNullOrEmpty());
        }
Пример #24
0
        public void TopLeftCornerNoNeighbors_Can_Move_East()
        {
            GameFactory gameFactory = new GameFactory();
            Game        game        = gameFactory.Create(MAX_X, MAX_Y);

            Console.WriteLine($"starting position {game.PastMoves.Last().X}/{game.PastMoves.Last().Y}");
            Assert.IsTrue(CanMoveEast(game));
            Tick(game);
            var lastMove = game.PastMoves.Last();

            Console.WriteLine($"Next position {lastMove.X}/{lastMove.Y}");
            Assert.AreEqual(1, lastMove.X);
            Assert.AreEqual(0, lastMove.Y);
        }
Пример #25
0
        public void MoveFromUciBasicTest()
        {
            const string uciMove  = "a2a3";
            var          expected = new Rudz.Chess.Types.Move(Squares.a2, Squares.a3);
            var          uci      = new Uci();

            var game = GameFactory.Create();

            game.NewGame();

            var actual = uci.MoveFromUci(game.Pos, uciMove);

            actual.Should().Be(expected);
        }
Пример #26
0
        public void Guess_ShouldReturnClosestGuest()
        {
            var rngServiceMock = new Mock <IRngService>();

            rngServiceMock.Setup(x => x.Generate(It.IsAny <int>(), It.IsAny <int>())).Returns(10);

            IGameFactory gameFactory = new GameFactory(rngServiceMock.Object);
            var          game        = gameFactory.Create(null);

            IGuessService guessService = new GuessService();
            var           result       = guessService.Guess(GuessModel.Create(game, 1, 9));

            Assert.AreEqual(2, result.PlayerId);
        }
Пример #27
0
        public void BlockedThree()
        {
            const string fen = "5k2/8/8/p1p1pPp1/P1P1P1P1/8/8/4K3 w - - 0 1";

            const bool expected = true;

            var g = GameFactory.Create();

            g.NewGame(fen);
            var pos = g.Pos;

            var actual = BlockageFactory.IsBlocked(pos);

            Assert.Equal(expected, actual);
        }
Пример #28
0
        public void BlockedTwo()
        {
            const string fen = "4k3/5p2/1p1p1P1p/1P1P1P1P/3P4/8/4K3/8 w - - 0 1";

            const bool expected = true;

            var g = GameFactory.Create();

            g.NewGame(fen);
            var pos = g.Pos;

            var actual = BlockageFactory.IsBlocked(pos);

            Assert.Equal(expected, actual);
        }
Пример #29
0
        public void OpenThree()
        {
            const string fen = "8/2p5/kp2p1p1/p1p1P1P1/P1P2P2/1P4K1/8/8 w - - 0 1";

            const bool expected = false;

            var g = GameFactory.Create();

            g.NewGame(fen);
            var pos = g.Pos;

            var actual = BlockageFactory.IsBlocked(pos);

            Assert.Equal(expected, actual);
        }
Пример #30
0
        public void Guess_CorrectGuess_GameStateEqualsCompleted()
        {
            var rngServiceMock = new Mock <IRngService>();

            rngServiceMock.Setup(x => x.Generate(It.IsAny <int>(), It.IsAny <int>())).Returns(10);

            IGameFactory gameFactory = new GameFactory(rngServiceMock.Object);
            var          game        = gameFactory.Create(null);

            IGuessService guessService = new GuessService();

            guessService.Guess(GuessModel.Create(game, 1, 10));

            Assert.AreEqual(GameState.Completed, game.GameState);
        }