public async Task <BoardIndex> GetShot(string playerWebApiUrl, ISinglePlayerGame game, string?apiKey = null) { var client = httpClientFactory.GetHttpClient(playerWebApiUrl); var url = BuildPathWithKey("getShot", apiKey); var shotRequest = new ShotRequest(game.LastShot, game.ShootingBoard.ToShortString()); var request = new HttpRequestMessage() { Method = HttpMethod.Post, RequestUri = new Uri(url, UriKind.Relative) }; request.Content = new StringContent(JsonSerializer.Serialize(shotRequest, jsonOptions), Encoding.UTF8, MediaTypeNames.Application.Json); var response = await client.SendAsync(request, getShotTimeout); var responseShotString = await response.Content.ReadFromJsonAsync <string>(); if (string.IsNullOrEmpty(responseShotString)) { throw new InvalidShotException(null, "Player returned no or empty shot"); } if (!BoardIndex.TryParse(responseShotString, out var responseShot)) { throw new InvalidShotException(responseShotString, "Player returned invalid shot"); } return(responseShot); }
public SinglePlayerGameViewModel(ISinglePlayerGame singlePlayerModel, ISettingsModel settingsModel) { this.singlePlayerModel = singlePlayerModel; this.settingsModel = settingsModel; this.singlePlayerModel.PropertyChanged += delegate(Object sender, PropertyChangedEventArgs e) { NotifyPropertyChanged("VM_" + e.PropertyName); }; }
static void ShootSomeRandomShots(ISinglePlayerGame game) { var rand = new Random(); while (true) { for (var i = rand.Next(10, 30); i > 0; i--) { game.Shoot(new BoardIndex(rand.Next(10), rand.Next(10))); } if (game.GetGameState(BattleshipBoard.Ships) == SinglePlayerGameState.InProgress) { break; } } }
/// <summary> /// Constructor. /// </summary> /// <param name="singlePlayerModel">Model.</param> /// <param name="settingsViewModel">Settings viewModel.</param> public SinglePlayerGameViewModel(ISinglePlayerGame singlePlayerModel, ISettingsViewModel settingsViewModel) { this.singlePlayerModel = singlePlayerModel; this.settingsViewModel = settingsViewModel; this.singlePlayerModel.ConnectionLost += HandleConnectionLost; //Set property changed delegate. this.singlePlayerModel.PropertyChanged += delegate(Object sender, PropertyChangedEventArgs e) { NotifyPropertyChanged("VM_" + e.PropertyName); }; this.singlePlayerModel.EnableControls += HandleEnable; }