Exemplo n.º 1
0
        private void SeachQuestion(Dictionary <string, List <Pays> > dicoPays, out Pays paysChoisit)
        {
            Random rnd            = new Random();
            int    indexContinent = rnd.Next(dicoPays.Keys.Count);
            string keyPays        = dicoPays.Keys.ElementAt(indexContinent);

            //Choisir pays
            var listPays  = dicoPays[keyPays];
            int indexPays = rnd.Next(listPays.Count);

            paysChoisit = listPays[indexPays];
            LambdaLogger.Log("Capotale ==> " + paysChoisit.capitale);
            paysChoisit.capitale        = paysChoisit.capitale;
            paysChoisit.capitaleEncoded = Phonex.Encode(paysChoisit.capitale);

            LambdaLogger.Log("Capitale Encoded ==> " + paysChoisit.capitale);
        }
Exemplo n.º 2
0
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task <SkillResponse> FunctionHandler(SkillRequest input, ILambdaContext context)
        {
            S3Client = new AmazonS3Client(BucketRegion);
            string source;
            //Construct response
            var response = new SkillResponse
            {
                Response = new ResponseBody()
            };

            response.Response.ShouldEndSession = false;
            IOutputSpeech innerResponse = null;
            string        reponse       = "";

            //Récupérer la session
            var         playerSession = input.Session;
            PlayerState playerScore   = new PlayerState();

            //Récupérer le fichier xml
            source = await GetS3File(S3Client);

            Monde monde = new Monde();

            if (source != null)
            {
                //LambdaLogger.Log("source : " + source.ToString());
                monde = JsonConvert.DeserializeObject <Rootobject>(source).monde;
            }
            else
            {
                LambdaLogger.Log("memory is null");
            }

            Dictionary <string, List <Pays> > dicoPays = new Dictionary <string, List <Pays> >();

            foreach (var c in monde.continent)
            {
                dicoPays.Add(c.nom, c.pays);
            }

            // Traiter la demande du joueur
            if (input.Request.GetType() == typeof(LaunchRequest))
            {
                LambdaLogger.Log("Skill Request Type : Lunch Request");
                reponse = "Bienvenue dans Capitales du monde. " +
                          "Dites 'commencer' pour démarrer le jeu. Pour connaitres les règles dites 'aide'";
            }
            else if (input.Request.GetType() == typeof(IntentRequest))
            {
                playerScore = RestoreState(playerSession);

                var inputRequest = (IntentRequest)input.Request;
                LambdaLogger.Log($"Skill Request Type : IntentRequest {inputRequest.Intent.Name}");
                Pays paysChoisit;

                switch (inputRequest.Intent.Name)
                {
                case "StartGame":
                    SeachQuestion(dicoPays, out paysChoisit);
                    playerScore = SaveState(paysChoisit, 0);
                    reponse     = $"C'est quoi la capitale du {paysChoisit.nom} ?";
                    break;

                case "NextQuestion":
                    reponse = $"La reponse était {playerScore.Pays.capitale}.";

                    SeachQuestion(dicoPays, out paysChoisit);

                    playerScore = SaveState(paysChoisit, playerScore.Score);
                    reponse    += $" Question suivante, C'est quoi la capitale du {paysChoisit.nom} ?";
                    break;

                case "RepeatQuestion":
                    paysChoisit = playerScore.Pays;
                    reponse     = $"C'est quoi la capitale du {paysChoisit.nom} ?";
                    break;

                case "ProposeChoices":
                    reponse = "choix";
                    break;

                case "GetHint":
                    paysChoisit = playerScore.Pays;
                    reponse     = $"Le nom de la capitale commence par la lettre, {paysChoisit.capitale.First()} ?";
                    break;

                case "Response":
                    var rep = inputRequest.Intent.Slots["reponse"].Value;
                    paysChoisit = playerScore.Pays;

                    double encodedRep = Phonex.Encode(rep);
                    LambdaLogger.Log($"======> {paysChoisit.capitale} / {rep} / {encodedRep}");
                    if (encodedRep == paysChoisit.capitaleEncoded)
                    {
                        reponse = $"Bravo, c'est la bonne réponse. Votre score est mainteant {++playerScore.Score} points.";

                        // Choisir nouvelle question
                        SeachQuestion(dicoPays, out paysChoisit);
                        playerScore = SaveState(paysChoisit, playerScore.Score);
                        reponse    += $" Question suivante, quelle est la capitale du {paysChoisit.nom} ?";
                    }
                    else
                    {
                        reponse = "Dommage, ce n'est pas bon";
                    }
                    break;

                case BuiltInIntent.Help:
                    reponse = "Pour lancer le jeu dites commencer : Je vous annonce un pays et vous devez trouver la capitale. Chaque bonne réponse vous donne un score de 1. " +
                              "Dites indice pour avoie un indice. Question suivante pour changer de question. " +
                              "Vous pouvez à tout moment sortir du jeu en disant stop.";
                    break;

                case "AMAZON.FallbackIntent":
                    reponse = "Je ne comprend pas votre demande";
                    break;

                case BuiltInIntent.Stop:
                case BuiltInIntent.Cancel:
                    LambdaLogger.Log($"built-in stop/cancel intent ({inputRequest.Intent.Name})");
                    break;

                default:
                    reponse = "Je ne comprend pas votre demande";
                    break;
                }
            }

            // Construire la réponse
            innerResponse = new SsmlOutputSpeech();
            ((SsmlOutputSpeech)innerResponse).Ssml = $"<speak>{reponse}</speak>";
            response.Version = "1.0";
            response.Response.OutputSpeech = innerResponse;
            response.SessionAttributes     = new Dictionary <string, object> {
                [SESSION_STATE_KEY] = playerScore
            };

            return(response);
        }