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); }
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); } }
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); } }
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); } }
public bool IsComplete() => !(CurrentMoves?.Any() ?? true);