Exemplo n.º 1
0
        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);
            };
        }
Exemplo n.º 3
0
            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;
        }