public ViewResult RsvpForm(GuessResponse guessResponse)
 {
     if (ModelState.IsValid)
     {
         Repository.AddResponse(guessResponse);
         return(View("Thanks", guessResponse));
     }
     else
     {
         return(View());
     }
 }
示例#2
0
        public void UpdateMine(Guess guess, GuessResponse response)
        {
            var tile = _tiles.FirstOrDefault(t => t.Guess == guess);

            if (tile != null && !response.Outcome.Equals("bomb"))
            {
                tile.Type = TileType.Money;
                Invalidate();
            }

            if (!string.IsNullOrWhiteSpace(response.Bombs))
            {
                ShowHiddenMines(response.Bombs);
            }
        }
示例#3
0
        public void botGuess()
        {
            if (!_games.Keys.Contains(Context.ConnectionId))
            {
                Clients.Client(Context.ConnectionId).postHistory("Error", "Start a new game before sending guesses");
                return;
            }

            GameData gameData = _games[Context.ConnectionId];
            string   guess;

            if (gameData.previousAttempts.Count == 0)
            {
                guess = "11112233"; // Fixed first guess;
            }
            else
            {
                MastermindFitnessCalculator mastermindFitnessCalculator = new MastermindFitnessCalculator();
                mastermindFitnessCalculator.setPreviousAttempts(gameData.previousAttempts);

                GeneticAlgorithm ga = new GeneticAlgorithm(mastermindFitnessCalculator);

                char[] guessArray = ga.calculateNextGuess(20);
                guess = new string(guessArray);
            }

            GuessRequest request = new GuessRequest()
            {
                game_key = _games[Context.ConnectionId].game_key, code = AxiomzenMastermind.convertGuess(guess)
            };
            GuessResponse response = AxiomzenMastermind.guess(request);

            gameData.previousAttempts.Add(new Attempt()
            {
                Guess = guess.ToCharArray(), Exact = response.result.exact, Near = response.result.near
            });

            Clients.Client(Context.ConnectionId).postHistory("Guess", string.Format("Code: {0}, Exact: {1}, Near: {2}, Attempts: {3}", guess, response.result.exact, response.result.near, response.num_guesses));

            if (response.solved)
            {
                Clients.Client(Context.ConnectionId).postHistory("Congratulations!", "You guessed the secret code!");
            }
        }
示例#4
0
        /// <summary>
        /// 向双方同时发送猜测结果
        /// </summary>
        /// <param name="data"></param>
        private void _GuessResponse(Message message)
        {
            GuessResponse guessResponse = message.Guessresponse;
            bool          destroyed     = guessResponse.Destroyed;
            PlaneLocator  planeLocator  = guessResponse.Loc;
            List <ChessBoard.Chessboard_Point> points = GameUtils.PlaneLocator_To_Points(planeLocator);

            if (GameUtils.GetGameStatus() == ClientInfo.game_status.rival_guessing)
            {
                foreach (ChessBoard.Chessboard_Point point in points)
                {
                    if (destroyed)
                    {
                        point.state = ChessBoard.point_state.destroy;
                    }
                    else
                    {
                        point.state = ChessBoard.point_state.miss;
                    }
                    ClientInfo.my_points.Enqueue(point);
                }
                GameUtils.SetGameStatus(ClientInfo.game_status.self_guessing);
            }
            else if (GameUtils.GetGameStatus() == ClientInfo.game_status.self_guessing)
            {
                foreach (ChessBoard.Chessboard_Point point in points)
                {
                    if (destroyed)
                    {
                        point.state = ChessBoard.point_state.destroy;
                    }
                    else
                    {
                        point.state = ChessBoard.point_state.miss;
                    }
                    ClientInfo.rival_points.Enqueue(point);
                }
                GameUtils.SetGameStatus(ClientInfo.game_status.rival_guessing);
            }
        }
        public static GuessResponse guess(GuessRequest guessRequest)
        {
            try
            {
                string url = serviceUrl + "guess?game_key=" + guessRequest.game_key
                             + "&code=" + guessRequest.code;

                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.Method      = "POST";
                request.ContentType = "text/json";

                using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                {
                    DataContractJsonSerializer jsonResponseSerializer = new DataContractJsonSerializer(typeof(GuessRequest));
                    jsonResponseSerializer.WriteObject(streamWriter.BaseStream, guessRequest);
                    streamWriter.Flush();
                    streamWriter.Close();
                }

                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        throw new Exception(String.Format("Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription));
                    }

                    DataContractJsonSerializer jsonResponseSerializer = new DataContractJsonSerializer(typeof(GuessResponse));
                    object        objResponse  = jsonResponseSerializer.ReadObject(response.GetResponseStream());
                    GuessResponse jsonResponse = objResponse as GuessResponse;
                    return(jsonResponse);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return(null);
            }
        }
示例#6
0
        public void sendGuess(string guess)
        {
            if (!_games.Keys.Contains(Context.ConnectionId))
            {
                Clients.Client(Context.ConnectionId).postHistory("Error", "Start a new game before sending guesses");
                return;
            }

            int guessInt;

            if (guess.Length != 8 || !int.TryParse(guess, out guessInt))
            {
                Clients.Client(Context.ConnectionId).postHistory("Error", "Wrong guess format, must be 8 digit code, with values from 1 to 8");
                return;
            }

            GuessRequest request = new GuessRequest()
            {
                game_key = _games[Context.ConnectionId].game_key, code = AxiomzenMastermind.convertGuess(guess)
            };
            GuessResponse response = AxiomzenMastermind.guess(request);

            GameData gameData = _games[Context.ConnectionId];

            gameData.previousAttempts.Add(new Attempt()
            {
                Guess = guess.ToCharArray(), Exact = response.result.exact, Near = response.result.near
            });

            Clients.Client(Context.ConnectionId).postHistory("Guess", string.Format("Code: {0}, Exact: {1}, Near: {2}, Attempts: {3}", guess, response.result.exact, response.result.near, response.num_guesses));

            if (response.solved)
            {
                Clients.Client(Context.ConnectionId).postHistory("Congratulations!", "You guessed the secret code!");
            }
        }
示例#7
0
        public async Task <JsonResult> Post([FromBody] GuessRequestBody requestBody)
        {
            JsonResult response;

            try
            {
                GuessResponse guessResponse = new GuessResponse()
                {
                    RequestId = requestContext.RequestId
                };

                if (!gameContext.CurrentPhase.Equals(PhaseType.Running))
                {
                    throw new GameNotInRunningPhaseException();
                }

                if (gameContext.Participants.Where(p => p.TeamId == User.Identity.Name && p.IsAlive != null && p.IsAlive == true).FirstOrDefault() == null)
                {
                    throw new TeamNotJoinedException();
                }

                var guesses = requestBody.Guesses;

                var body = PreProcess(requestBody);

                var validatedBody = Validate(body, User.Identity.Name);

                await Evaluate(validatedBody);

                await CommitGuess(validatedBody, requestBody);

                guessResponse.Data = new GuessResponseData {
                    Guesses     = validatedBody.Guesses,
                    GameId      = gameContext.GameId,
                    RoundId     = gameContext.RoundId,
                    RoundNumber = gameContext.RoundNumber,
                    Status      = gameContext.CurrentPhase.ToString()
                };

                response = new JsonResult(guessResponse)
                {
                    StatusCode = 200
                };
            }
            catch (GuessLimitExceededException)
            {
                response = new JsonResult(new GuessResponse
                {
                    RequestId = requestContext.RequestId,
                    Err       = new Error
                    {
                        Message     = "Guess Limit Exceeded",
                        Description = $"At max {MAX_GUESSES} guesses are allowd at a time"
                    }
                })
                {
                    StatusCode = 400
                };
            }
            catch (GameNotInRunningPhaseException)
            {
                response = new JsonResult(new GuessResponse
                {
                    RequestId = requestContext.RequestId,
                    Err       = new Error
                    {
                        Message     = "Game is not in running phase",
                        Description = "/guess api requests are only accepted in Running phase"
                    }
                })
                {
                    StatusCode = 400
                };
            }
            catch (TeamNotJoinedException)
            {
                response = new JsonResult(new GuessResponse
                {
                    RequestId = requestContext.RequestId,
                    Err       = new Error
                    {
                        Message     = "Team not alive or joined",
                        Description = "Either you have not joined this round or your team is dead."
                    }
                })
                {
                    StatusCode = 400
                };
            }
            catch (InvalidDataProvidedException)
            {
                response = new JsonResult(new GuessResponse
                {
                    RequestId = requestContext.RequestId,
                    Err       = new Error
                    {
                        Message     = "Invalid Request Body",
                        Description = "Please provide a proper body for the api"
                    }
                })
                {
                    StatusCode = 400
                };
            }
            catch (Exception)
            {
                logger.LogError($"Error Occurred while fetching current gamestatus");

                response = new JsonResult(new GuessResponse
                {
                    RequestId = requestContext.RequestId,
                    Err       = new Error
                    {
                        Message     = "Internal Server Error",
                        Description = "Server Failed to fetch Current Gamestatus"
                    }
                })
                {
                    StatusCode = 500
                };
            }


            return(response);
        }
 protected virtual void OnGuessResponse(object source, EventArgs e)
 {
     GuessResponse?.Invoke(source, e);
 }