public DraughtsBoard()
        {
            InitializeComponent();

            foreach (var width in Enumerable.Range(0, BoardWidth))
            {
                foreach (var height in Enumerable.Range(0, BoardHeight))
                {
                    int convertedY = (BoardHeight - 1) - height;
                    var cell       = new GameSquare(width, convertedY);
                    if (width % 2 == 0 && height % 2 == 0)
                    {
                        cell.SquareColour = LightColourBrush;
                    }
                    else if (width % 2 != 0 && height % 2 != 0)
                    {
                        cell.SquareColour = LightColourBrush;
                    }
                    else
                    {
                        cell.SquareColour = DarkColourBrush;
                    }

                    cell.MouseLeftButtonDown += PieceLeftButtonDown;

                    Grid.SetColumn(cell, width);
                    Grid.SetRow(cell, height);
                    Board.Children.Add(cell);
                    squareList.Add(cell);
                }
            }
            SetupFromGameState(GameStateFactory.StandardStartGameState());
        }
Example #2
0
        public void TestFact()
        {
            RaceFactory rf = RaceFactory.getRaceFactory();

            Assert.IsNotNull(rf);
            Race jordy = rf.getRace("human");
            Race willy = rf.getRace("orc");

            PlayerFactory pf = PlayerFactory.getPlayerFactory();
            Player        p1 = pf.createPlayer(jordy, "francois", null);

            Assert.AreEqual(p1.name, "francois");
            Player p2 = pf.createPlayer(willy, "aurelien", null);

            Assert.AreEqual(p2.name, "aurelien");

            Assert.AreEqual(p1.race.name, jordy.name);
            Assert.AreEqual(p2.race.name, willy.name);

            History h = HistoryFactory.getHistoryFactory().createHistory();

            Assert.IsNotNull(h);

            GameStateFactory gsf = GameStateFactory.getStateFactory();
            GameState        gs  = gsf.createGameState();

            h.set(gs);
            h.save();

            Assert.AreEqual(h.pop(), gs);
        }
Example #3
0
        static void Main(string[] args)
        {
            var random = new Random();

            Console.WriteLine("Sample run");
            Console.WriteLine();

            var state = GameStateFactory.GenerateDefaultState();

            while (!state.IsFinished)
            {
                Console.WriteLine($"ActivePlayer: {state.ActivePlayer.Name}, Health: {state.ActivePlayer.Health}, Mana: {state.ActivePlayer.Mana}");
                Console.WriteLine($"OpponentPlayer: {state.OpponentPlayer.Name}, Health: {state.OpponentPlayer.Health}, Mana: {state.OpponentPlayer.Mana}");

                Console.WriteLine("Draw, use and next");
                var activePlayer = state.ActivePlayer;
                var hand         = activePlayer.Hand;
                hand.Draw();
                Console.WriteLine($"Remaining deck count: {hand.Deck.Count}");
                Console.WriteLine(@$ "Hand: {string.Join(", ", hand.Select(c =>
                {
                    if (c is DamageCard damageCard)
                    {
                        return $"[{ damageCard.ManaCost }, { damageCard.Damage }] ";
                    }
                    return $"[{ c.ManaCost }] ";
                }))}");
Example #4
0
        public IActionResult CreateGame()
        {
            var playerId    = Guid.NewGuid().ToString();
            var humanPlayer = new HumanPlayer();

            IGamePlayer white;
            IGamePlayer black;

            if (random.Next() % 2 == 0)
            {
                white = humanPlayer;
                black = Program.AiOpponent;
                humanPlayer.PieceColour = Service.PieceColour.White;
            }
            else
            {
                white = Program.AiOpponent;
                black = humanPlayer;
                humanPlayer.PieceColour = Service.PieceColour.Black;
            }

            var match = new GameMatch(GameStateFactory.StandardStartGameState(), white, black);

            humanPlayer.GameMatch = match;

            humanPlayers.TryAdd(playerId, humanPlayer);

            return(Ok(playerId));
        }
Example #5
0
        public void SinglePieceKingWhiteGameMove()
        {
            var pieceColour = PieceColour.White;
            var pieceRank   = PieceRank.King;
            int x           = 4;
            int y           = 4;

            var gamePiece = new GamePiece(pieceColour, pieceRank, x, y);
            var gameState = GameStateFactory.SinglePieceGameState(gamePiece);

            var moves = gameState.CalculateAvailableMoves();

            var piece1 = moves.Single(m => m.EndGamePiece.Xcoord == x - 1 && m.EndGamePiece.Ycoord == y + 1).EndGamePiece;
            var piece2 = moves.Single(m => m.EndGamePiece.Xcoord == x + 1 && m.EndGamePiece.Ycoord == y - 1).EndGamePiece;
            var piece3 = moves.Single(m => m.EndGamePiece.Xcoord == x + 1 && m.EndGamePiece.Ycoord == y + 1).EndGamePiece;
            var piece4 = moves.Single(m => m.EndGamePiece.Xcoord == x - 1 && m.EndGamePiece.Ycoord == y - 1).EndGamePiece;

            Assert.AreEqual(4, moves.Count);

            Assert.AreEqual(x - 1, piece1.Xcoord);
            Assert.AreEqual(y + 1, piece1.Ycoord);

            Assert.AreEqual(x + 1, piece2.Xcoord);
            Assert.AreEqual(y - 1, piece2.Ycoord);

            Assert.AreEqual(x + 1, piece3.Xcoord);
            Assert.AreEqual(y + 1, piece3.Ycoord);

            Assert.AreEqual(x - 1, piece4.Xcoord);
            Assert.AreEqual(y - 1, piece4.Ycoord);
        }
Example #6
0
        public void FlipTest_L()
        {
            var gameState = GameStateFactory.GetGameState_GivenStartingPieceType(0, Shapes.L);
            var engine    = new Engine(0, gameState);

            flipPiece(engine);
        }
Example #7
0
        public void ClearBoardTest2()
        {
            var colors = new List <Colors>();

            for (int i = 0; i < GameConstants.WellCount; i++)
            {
                if (i < 10)
                {
                    colors.Add(Colors.BLUE);
                }
                else if (i >= 30 && i < 40)
                {
                    colors.Add(Colors.BLUE);
                }
                else
                {
                    colors.Add(Colors.Empty);
                }
            }
            var fList     = ListModule.OfSeq(colors);
            var gameState = GameStateFactory.GetGameState_GivenBoard(new System.Random(), fList);
            var engine    = new Engine(0, gameState);

            engine.tick();
            var gs        = engine.ViewGameState();
            var clearRows = Board.getClearRows(gs.Board);

            Assert.IsTrue(!clearRows.Any());
        }
Example #8
0
    GameStateBehaviour CreateState(GameState state)
    {
        GameStateBehaviour behaviour = GameStateFactory.Create(state);

        behaviour.transform.parent = transform;

        return(behaviour);
    }
        private void ReturnStatesToPool()
        {
            if (playerGameStates.Any())
            {
                GameStateFactory <TicTacToeGameStateImpl> .ReturnGameStates(playerGameStates);

                playerGameStates.Clear();
            }
        }
Example #10
0
 //----------------------------------------------------------------------------
 protected override void OnStateInit()
 {
     AddSubState(GameStateFactory.CreateState(GameStateType.GST_Loading, this));
     AddSubState(GameStateFactory.CreateState(GameStateType.GST_Login, this));
     AddSubState(GameStateFactory.CreateState(GameStateType.GST_Update, this));
     AddSubState(GameStateFactory.CreateState(GameStateType.GST_Logo, this));
     AddSubState(GameStateFactory.CreateState(GameStateType.GST_Lobby, this));
     base.OnStateInit();
     SetSubState((int)GameStateType.GST_Logo, null);
 }
        public TicTacToeGameImpl()
        {
            game             = new TicTacToeGame();
            currentGameState = GameStateFactory <TicTacToeGameStateImpl> .GetNewGameState();

            currentPlayerIndex = 1;
            opponent           = new RandomPlayer();
            //opponent = new MinimaxPlayer(new Heuristic[] { HeuristicFactory.GetHeuristicByName("ticTacToeHeuristic", 1, null) }, 6);
            playerGameStates = new List <TicTacToeGameStateImpl>();
            statistics       = new TicTacToeGameStatistics();
        }
Example #12
0
        private void OpenScoringWindow(SessionConfigParams configParams)
        {
            Window w = new ScoringWindow();
            ScoringWindowViewModel vm = ContainerHelper.Container.Resolve <ScoringWindowViewModel>();
            GameState gs = GameStateFactory.GetNewGameState(configParams);

            vm.SetCurrentGameState(gs);
            w.DataContext = vm;
            w.Show();
            NavToStartSession();
        }
        public static GameState.GameStateClass GetGameState(HttpContext httpContext)
        {
            var gameState = httpContext.Session.Get <GameState.GameStateClass>(SessionKeyGameState);

            if (gameState == null)
            {
                gameState = GameStateFactory.GenerateNewGameState();
                httpContext.Session.Set <GameState.GameStateClass>(SessionKeyGameState, gameState);
            }

            return(gameState);
        }
Example #14
0
    void CreateGameStates()
    {
        GameStateFactory gsf = new GameStateFactory();

        // Create only a SINGLE STATE per state type
        foreach (GAME_STATE_TYPE gs in Enum.GetValues(typeof(GAME_STATE_TYPE)))
        {
            IState <CKGameManager> state = gsf.CreateGameState(gs);
            //stateGraph.AddNode(ref state);
            gameStateMap.Add(gs, state);
        }
    }
        public void FriendlyMinionsAwayTest()
        {
            var move = new GameMove(
                new GamePiece(PieceColour.White, PieceRank.Minion, 0, 2),
                new GamePiece(PieceColour.White, PieceRank.Minion, 1, 3),
                new List <GamePiece>(),
                GameStateFactory.StandardStartGameState()
                );

            var metrics = move.CalculateGameMoveMetrics(PieceColour.White);

            Assert.AreEqual(0, metrics.FriendlyMinionsAway);
        }
        public void OpponentMovesAvailableTest()
        {
            var move = new GameMove(
                new GamePiece(PieceColour.White, PieceRank.Minion, 0, 2),
                new GamePiece(PieceColour.White, PieceRank.Minion, 1, 3),
                new List <GamePiece>(),
                GameStateFactory.StandardStartGameState()
                );

            var metrics = move.CalculateGameMoveMetrics(PieceColour.White);

            Assert.AreEqual(7, metrics.OpponentMovesAvailable);
        }
Example #17
0
        public void SinglePieceBlackBlockedByBottomEdgeGameMove()
        {
            var pieceColour = PieceColour.Black;
            var pieceRank   = PieceRank.Minion;
            int x           = 2;
            int y           = 0;

            var gamePiece = new GamePiece(pieceColour, pieceRank, x, y);
            var gameState = GameStateFactory.SinglePieceGameState(gamePiece);

            var moves = gameState.CalculateAvailableMoves();

            Assert.AreEqual(0, moves.Count);
        }
Example #18
0
    public override void Initialize(System.Action <ICoreService> onComplete)
    {
        onComplete(this);

        _gameStateFactory = CreateFactory();

        _graph = new GameStateDefinitionGraph(_gameStateDefinitions);

        //var path = _graph.FindPathToGameState(_graph.root.gameStateDefinition, _gameStateDefinitions.Last());

        //foreach (var item in path)
        //{
        //    Debug.Log(item);
        //}
    }
Example #19
0
        public void SinglePieceGameState()
        {
            var pieceColour = PieceColour.Black;
            var pieceRank   = PieceRank.Minion;
            int x           = 2;
            int y           = 0;

            var gamePiece = new GamePiece(pieceColour, pieceRank, x, y);
            var gameState = GameStateFactory.SinglePieceGameState(gamePiece);

            Assert.AreEqual(1, gameState.GamePieceList.Count);
            Assert.AreEqual(pieceColour, gameState.GamePieceList.First().PieceColour);
            Assert.AreEqual(pieceRank, gameState.GamePieceList.First().PieceRank);
            Assert.AreEqual(x, gameState.GamePieceList.First().Xcoord);
            Assert.AreEqual(y, gameState.GamePieceList.First().Ycoord);
        }
Example #20
0
        public static (int[] ids, string[] errors) GetWinners(string input)
        {
            var gameStateBuildResult = GameStateFactory.Build(input);

            if (gameStateBuildResult.Success)
            {
                var bestToWorstHands = gameStateBuildResult.GameState.PlayerHands.OrderBy(x => x).ToArray();
                var winningHands     = bestToWorstHands.Where(x => x.Equals(bestToWorstHands.First()));
                var winningIds       = winningHands.Select(x => x.PlayerId).OrderBy(x => x).ToArray();
                return(winningIds, Array.Empty <string>());
            }
            else
            {
                return(Array.Empty <int>(), gameStateBuildResult.Errors);
            }
        }
Example #21
0
        public MainWindow()
        {
            InitializeComponent();

            aiLoader = ((App)App.Current).AiLoader;

            Board.WhitePlayer = SetupService.FetchWhitePlayer();
            Board.BlackPlayer = SetupService.FetchBlackPlayer();

            gameMatch = new GameMatch(GameStateFactory.StandardStartGameState(), Board.WhitePlayer, Board.BlackPlayer);
            Info.UpdateFromGameMatch(gameMatch);

            dispatcherTimer.Tick    += DispatcherTimer_Tick;
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();
        }
Example #22
0
        public void SinglePieceWhiteKingOnLastRow()
        {
            var pieceColour = PieceColour.White;
            var pieceRank   = PieceRank.Minion;
            int x           = 0;
            int y           = 6;

            var gamePiece = new GamePiece(pieceColour, pieceRank, x, y);
            var gameState = GameStateFactory.SinglePieceGameState(gamePiece);

            var moves = gameState.CalculateAvailableMoves().Where(m => m.StartGamePiece.PieceColour == PieceColour.White).ToList();

            var afterState = moves.First().PerformMove();

            Assert.AreEqual(PieceRank.King, moves[0].EndGamePiece.PieceRank);
            Assert.AreEqual(PieceRank.King, afterState.GamePieceList[0].PieceRank);
        }
Example #23
0
        static void Main()
        {
            var state = GameStateFactory.CreateGameState();

            StateEventDispatcher stateEventDispatcher = new StateEventDispatcher();

            stateEventDispatcher.Register(new StateEventHandler());

            GameStartDispatcher gameStartDispatcher = new GameStartDispatcher();

            gameStartDispatcher.Register(new GameStartHandler(stateEventDispatcher));

            GameWonDispatcher gameWonDispatcher = new GameWonDispatcher();

            gameWonDispatcher.Register(new GameWonHandler());

            GameOverDispatcher gameOverDispatcher = new GameOverDispatcher();

            gameOverDispatcher.Register(new GameOverHandler());

            KeyEventDispatcher keyEventDispatcher = new KeyEventDispatcher();

            keyEventDispatcher.Register(new KeyEventHandler(stateEventDispatcher,
                                                            gameWonDispatcher,
                                                            gameOverDispatcher));

            bool stop = false;

            gameStartDispatcher.NotifyAll(state);

            while (!stop)
            {
                var info = Console.ReadKey(true);
                if (info.Key == ConsoleKey.Escape)
                {
                    stop = true;
                }
                else
                {
                    keyEventDispatcher.NotifyAll(new GameKeyEventData {
                        KeyInfo = info, GameState = state
                    });
                }
            }
        }
Example #24
0
        private static int PlayGames(IGamePlayer contestant, IGamePlayer opponent, int gameCount)
        {
            int wins = 0;

            foreach (var randomGameI in Enumerable.Range(0, gameCount).Where(g => !shouldClose))
            {
                var gameMatch = new GameMatch(
                    GameStateFactory.StandardStartGameState(),
                    contestant,
                    opponent);
                var outcome = gameMatch.CompleteMatch();
                if (outcome == GameMatchOutcome.WhiteWin)
                {
                    wins++;
                }
            }
            return(wins);
        }
        public void OpponentPiecesTakenTest()
        {
            var pieceColour = PieceColour.White;
            var pieceRank   = PieceRank.Minion;
            int x           = 2;
            int y           = 0;

            var startGamePiece    = new GamePiece(pieceColour, pieceRank, x, y);
            var endGamePiece      = new GamePiece(pieceColour, pieceRank, x + 2, y + 2);
            var blockingGamePiece = new GamePiece(PieceColour.Black, pieceRank, x + 1, y + 1);
            var gameState         = GameStateFactory.SeveralPieceGameState(startGamePiece, blockingGamePiece);


            var move = new GameMove(startGamePiece, endGamePiece, new[] { blockingGamePiece }, gameState);

            var metrics = move.CalculateGameMoveMetrics(PieceColour.White);

            Assert.AreEqual(1, metrics.OpponentPiecesTaken);
        }
Example #26
0
        public void SinglePieceBlackLeftEdgeGameMove()
        {
            var pieceColour = PieceColour.Black;
            var pieceRank   = PieceRank.Minion;
            int x           = 7;
            int y           = 7;

            var gamePiece = new GamePiece(pieceColour, pieceRank, x, y);
            var gameState = GameStateFactory.SinglePieceGameState(gamePiece);

            var moves = gameState.CalculateAvailableMoves();

            var piece1 = moves[0].EndGamePiece;

            Assert.AreEqual(1, moves.Count);

            Assert.AreEqual(x - 1, piece1.Xcoord);
            Assert.AreEqual(y - 1, piece1.Ycoord);
        }
Example #27
0
        public void SinglePieceWhitePerformMove()
        {
            var pieceColour = PieceColour.White;
            var pieceRank   = PieceRank.Minion;
            int x           = 2;
            int y           = 0;

            var gamePiece = new GamePiece(pieceColour, pieceRank, x, y);
            var gameState = GameStateFactory.SinglePieceGameState(gamePiece);

            var moves = gameState.CalculateAvailableMoves();

            var afterState = moves.First().PerformMove();

            Assert.AreEqual(1, afterState.GamePieceList.Count);

            Assert.AreEqual(x - 1, afterState.GamePieceList[0].Xcoord);
            Assert.AreEqual(y + 1, afterState.GamePieceList[0].Ycoord);
        }
Example #28
0
        public void SinglePieceWhiteBlockedGameMove()
        {
            var pieceColour = PieceColour.White;
            var pieceRank   = PieceRank.Minion;
            int x           = 2;
            int y           = 0;

            var gamePiece         = new GamePiece(pieceColour, pieceRank, x, y);
            var blockingGamePiece = new GamePiece(pieceColour, pieceRank, x + 1, y + 1);
            var gameState         = GameStateFactory.SeveralPieceGameState(gamePiece, blockingGamePiece);

            var moves = gameState.CalculateAvailableMoves();

            var piece1 = moves[0].EndGamePiece;

            Assert.AreEqual(3, moves.Count);

            Assert.AreEqual(x - 1, piece1.Xcoord);
            Assert.AreEqual(y + 1, piece1.Ycoord);
        }
Example #29
0
        public void SinglePieceWhiteTakePerformMove()
        {
            var pieceColour = PieceColour.White;
            var pieceRank   = PieceRank.Minion;
            int x           = 2;
            int y           = 0;

            var gamePiece         = new GamePiece(pieceColour, pieceRank, x, y);
            var blockingGamePiece = new GamePiece(PieceColour.Black, pieceRank, x + 1, y + 1);
            var gameState         = GameStateFactory.SeveralPieceGameState(gamePiece, blockingGamePiece);

            var moves = gameState.CalculateAvailableMoves().Where(m => m.StartGamePiece.PieceColour == PieceColour.White).ToList();

            var afterState = moves.First().PerformMove();

            Assert.AreEqual(1, afterState.GamePieceList.Count);

            Assert.AreEqual(x + 2, afterState.GamePieceList[0].Xcoord);
            Assert.AreEqual(y + 2, afterState.GamePieceList[0].Ycoord);
        }
Example #30
0
        public void SinglePieceWhiteKingOnLastRowAfterDoubleJumpCheckMoveObjects()
        {
            var pieceColour = PieceColour.White;
            var pieceRank   = PieceRank.King;
            int x           = 3;
            int y           = 7;

            var gamePiece          = new GamePiece(pieceColour, pieceRank, x, y);
            var blockingGamePiece1 = new GamePiece(PieceColour.Black, pieceRank, 4, 6);
            var blockingGamePiece2 = new GamePiece(PieceColour.Black, pieceRank, 6, 6);
            var gameState          = GameStateFactory.SeveralPieceGameState(gamePiece, blockingGamePiece1, blockingGamePiece2);

            var moves = gameState.CalculateAvailableMoves().Where(m => m.StartGamePiece.PieceColour == PieceColour.White).ToList();

            var expectedPiece = new GamePiece(PieceColour.White, PieceRank.King, 7, 7);

            Assert.AreEqual(2, moves.First().TakenGamePieces.Count);
            Assert.AreEqual(gamePiece, moves.First().StartGamePiece);
            Assert.AreEqual(expectedPiece, moves.First().EndGamePiece);
        }