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); }
/// <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); }