Example #1
0
        public State Init(int ply, King whiteKing, King blackKing, Func <Move, bool> moveEvadesCheck, Action <Player> getMoves)
        {
            Ply    = ply;
            Player = ply % 2 == 0 ? Player.Black : Player.White;
            getMoves(Player);
            PlayerInCheck = Player == Player.White
                ? whiteKing.IsChecked()
                : blackKing.IsChecked();

            // if the current player is in check filter out those moves
            // which would allow him to remain in check
            if (PlayerInCheck)
            {
                CurrentMoves.Init(CurrentMoves.GetEnumerable().Where(moveEvadesCheck).ToArray());
            }
            return(this);
        }
Example #2
0
        public async Task CheckTurn()
        {
            try
            {
                var result = await HttpService.Get($"/endTurn/{GameSessionId}")
                             .ExecuteAsync <TurnResult>();

                GameTurn++;
                TurnResults.Add(result);
                CurrentMoves.ToList().ForEach(GameMoves.Add);
                CurrentMoves.Clear();
            }
            catch (System.Exception e)
            {
                await MessageService.ShowError(e.Message);
            }
        }
Example #3
0
        public async Task RestartGame()
        {
            try
            {
                var session = await HttpService.Get("/game").ExecuteAsync <GameSession>();

                GameSessionId = session.SessionId;
                Players.Clear();
                CurrentMoves.Clear();
                GameMoves.Clear();
                TurnResults.Clear();
                SessionBegun = true;
                GameTurn     = 1;
            }
            catch (System.Exception e)
            {
                await MessageService.ShowError(e.Message);
            }
        }
Example #4
0
        public async Task MakeMove(Player player, HandSymbol move)
        {
            try
            {
                var playerMove = new PlayerMove
                {
                    Move      = move,
                    PlayerId  = player.Id,
                    SessionId = GameSessionId
                };
                var result = await HttpService.Post("/move")
                             .AddBody(string.Empty, JsonConvert.SerializeObject(playerMove))
                             .ExecuteAsync <GameSession>();

                CurrentMoves.Clear();
                result.CurrentPlayerMoves.ForEach(CurrentMoves.Add);
            }
            catch (System.Exception e)
            {
                await MessageService.ShowError(e.Message);
            }
        }
Example #5
0
 public bool IsComplete() => !(CurrentMoves?.Any() ?? true);