private async Task ComputerMove(object _) { var state = await GetState(); var engine = new C4Engine(state.Board, state.Score, state.NumPieces); engine.ComputerMove(state.CurrentPlayer, 5); await UpdateState(engine, state); }
public async Task MakeMove(int col) { var state = await GetState(); var engine = new C4Engine(state.Board, state.Score, state.NumPieces); engine.MakeMove(state.CurrentPlayer, col); await UpdateState(engine, state); var gameInfo = await StateManager.GetStateAsync <GameDto>("gameInfo"); if (gameInfo.GameType == GameTypeDto.SinglePlayer) { timer = RegisterTimer(ComputerMove, null, TimeSpan.Zero, Timeout.InfiniteTimeSpan); } }
private async Task UpdateState(C4Engine engine, GameStateDto currentState) { var state = new GameStateDto { Board = engine.Board, Score = engine.Score, NumPieces = engine.NumPieces, Winner = engine.IsWinner(), Host = Environment.MachineName, LastUpdated = DateTimeOffset.UtcNow, CurrentPlayer = currentState.CurrentPlayer == 1 ? 2 : 1, }; if (state.Winner != 0) { for (var k = 0; k < 69; k++) { if (state.Score[state.Winner - 1][k] == 16) { for (var i = 0; i < 6; i++) { for (var j = 0; j < 7; j++) { if (C4Engine.Map[i][j][k] == 1) { state.WinningGrid[i][j] = state.Winner; } } } } } } await StateManager.SetStateAsync("gameState", state); GetEvent <IGameActorEvents>().GameStateChanged(state); }