Ejemplo n.º 1
0
        private AliceResponse Restart(AliceRequest request)
        {
            var phrase = new Phrase("Ты точно хочешь закончить эту игру и начать новую?", _yesNoButtons);

            _gameplayService.PauseForRestart(request.State.Session);
            return(phrase.Generate(request));
        }
Ejemplo n.º 2
0
        private AliceResponse Enter(AliceRequest request, bool restart = false)
        {
            bool newUser = _gameplayService.EnterIsNewUser(request.State.User, request.State.Session);

            Phrase phrase = restart switch
            {
                true => new Phrase(
                    "[audio|dialogs-upload/008dafcd-99bc-4fd1-9561-4686c375eec6/cb19ca47-2ef6-4788-b09f-0d47776e4de3.opus]" +
                    "Начинаем новую игру. Перечисли имена игроков:",
                    _prepareButtons
                    ),
                false when newUser => new Phrase(
                    "[audio|dialogs-upload/008dafcd-99bc-4fd1-9561-4686c375eec6/cb19ca47-2ef6-4788-b09f-0d47776e4de3.opus]" +
                    "Привет. В этой игре я буду загадывать тебе или вам с друзьями определения, " +
                    "а вы должны называть слова. Кто больше угадал — тот и выиграл.\n\n" +
                    "Для начала перечисли имена игроков:",
                    _prepareButtons
                    ),
                _ => new Phrase(
                    "[audio|dialogs-upload/008dafcd-99bc-4fd1-9561-4686c375eec6/cb19ca47-2ef6-4788-b09f-0d47776e4de3.opus]" +
                    "Привет! Чтобы начать игру, перечисли имена игроков:",
                    _prepareButtons
                    )
            };

            return(phrase.Generate(request));
        }
Ejemplo n.º 3
0
        private AliceResponse Repeat(AliceRequest request)
        {
            var phrase = new Phrase(
                GameplayService.ReadWord(request.State.Session, _soundEngine, ReadMode.Repeat),
                _ingameButtons
                );

            return(phrase.Generate(request));
        }
Ejemplo n.º 4
0
        private AliceResponse Exit(AliceRequest request)
        {
            var           phrase   = new Phrase("Выхожу из игры. Возвращайся!");
            AliceResponse response = phrase.Generate(request);

            response.Response.EndSession = true;

            return(response);
        }
Ejemplo n.º 5
0
        private AliceResponse Help(AliceRequest request)
        {
            Phrase phrase;

            switch (request.State.Session.Step)
            {
            case SessionStep.AwaitNames:
                phrase = new Phrase(
                    "Ты в игре «Шляпа», в которой я буду говорить тебе или вам с друзьями короткие определения, " +
                    "а вы должны отгадывать слова. Прямо сейчас назови мне имена игроков по порядку, " +
                    "либо можешь сказать, что играть будешь только ты.",
                    _prepareButtons
                    );
                break;

            case SessionStep.Game:
                SessionState state = request.State.Session;
                bool         multi = state.Players.Length > 1;
                phrase = new Phrase(
                    $"{(multi ? "Вы" : "Ты")} в игре «Шляпа», в которой я говорю " +
                    $"{(multi ? "вам" : "тебе")} короткие определения, " +
                    $"а {(multi ? "вы отгадываете" : "ты отгадываешь")} слова. " +
                    $"Прямо сейчас я дала {(multi ? $"игроку по имени {state.CurrentPlayer.Name}" : "тебе")} " +
                    "очередное задание, и жду на него ответ. Можно попросить меня повторить задание, если нужно," +
                    " или пропустить его, сказав «Не знаю».",
                    _ingameButtons
                    );
                break;

            case SessionStep.AwaitRestart:
                phrase = new Phrase(
                    "Ты в игре «Шляпа», в которой я буду говорить тебе или вам с друзьями" +
                    " короткие определения, по которым нужно отгадывать слова. " +
                    "Сейчас ты можешь начать новую игру сказав «Да» и выйти сказав «Нет»",
                    _yesNoButtons
                    );
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(phrase.Generate(request));
        }
Ejemplo n.º 6
0
        private AliceResponse SetUpGame(AliceRequest request)
        {
            Phrase        phrase;
            List <string> names = request.Request.Nlu.Tokens.Except(new [] { "и" }).ToList();

            if (request.HasIntent("only_me"))
            {
                names = new List <string> {
                    "я"
                }
            }
            ;

            if (names.Count == 0)
            {
                phrase = new Phrase(
                    "Назови подряд имена всех игроков, либо скажи, что играть будешь только ты.",
                    _prepareButtons
                    );
                return(phrase.Generate(request));
            }
            else if (names.Count > 10)
            {
                phrase = new Phrase(
                    "Пока что играть могу не более десяти человек на одном устройстве. Перечисли не более десяти имён.",
                    _prepareButtons
                    );
                return(phrase.Generate(request));
            }

            SessionState state = request.State.Session;

            _gameplayService.Start(request.State.User, state, names.ToArray());

            // read first word
            string playersNum  = names.Count.ToPhrase("игрок", "игрока", "игроков");
            string startPhrase = $"Отлично, {playersNum}, начинаем. " +
                                 $"\n\n{GameplayService.ReadWord(state, _soundEngine, ReadMode.First)}";

            return(new Phrase(startPhrase, _ingameButtons).Generate(request));
        }
    }
Ejemplo n.º 7
0
        private AliceResponse Hint(AliceRequest request, string prefix = "")
        {
            SessionState state = request.State.Session;

            _gameplayService.HintTaken(state);

            if (request.State.Session.Step == SessionStep.Game)
            {
                var phrase = new Phrase(
                    $"{prefix}Подскажу:\n" +
                    $"{state.CurrentWord.Definition.ToUpperFirst()}.\n" +
                    GameplayService.ReadHint(request.State.Session, _soundEngine),
                    _ingameButtons
                    );

                return(phrase.Generate(request));
            }

            return(Help(request));
        }
Ejemplo n.º 8
0
        private AliceResponse Answer(AliceRequest request)
        {
            SessionState state    = request.State.Session;
            string       word     = state.CurrentWord.Word;
            string       wordSaid = string.Join("", request.Request.Nlu.Tokens);
            AnswerResult result   = _gameplayService.Answer(request.State.User, request.State.Session, wordSaid);
            string       sound    = result == AnswerResult.Right
                ? "[audio|dialogs-upload/008dafcd-99bc-4fd1-9561-4686c375eec6/7fbd83e1-7c22-468d-a8fe-8f0439000fd6.opus]"
                : "[audio|dialogs-upload/008dafcd-99bc-4fd1-9561-4686c375eec6/ac858f28-3c34-403c-81c7-5d64449e4ea7.opus]";

            string prefix = sound;

            if (result == AnswerResult.SeccondAttempt)
            {
                return(Hint(request, prefix));
            }

            if (result == AnswerResult.Wrong)
            {
                prefix += request.HasScreen()
                    ? $"Правильный ответ: {word.ToUpper()}.\n\n[p|300]"
                    : $"Твой ответ: {wordSaid.ToUpper()}, а правильный: {word.ToUpper()}.\n\n[p|300]";
            }

            var phrase = new Phrase(prefix);

            if (state.CurrentWord == null)
            {
                // game finished
                phrase += new Phrase(
                    "[audio|alice-sounds-game-win-3.opus]Игра завершена!\n" +
                    $"{GameplayService.ReadScore(request.State.User, state)}\n\nХочешь начать новую игру?",
                    _yesNoButtons
                    );
                return(phrase.Generate(request));
            }

            // continue game
            if (state.NeedShowScore())
            {
                _gameplayService.SetScoreShown(state);

                // continue game read score
                phrase += new Phrase(
                    GameplayService.ReadScoreOnDemand(state, state.LeftShown),
                    _ingameButtons
                    );

                // read left words
                if (!state.LeftShown)
                {
                    _gameplayService.SetLeftShown(state);
                    phrase += new Phrase(GameplayService.ReadWordsLeft(state));
                }

                // read word
                phrase += new Phrase(GameplayService.ReadWord(request.State.Session, _soundEngine, ReadMode.Normal, true));
            }
            else
            {
                // just continue game
                phrase += new Phrase(
                    GameplayService.ReadWord(request.State.Session, _soundEngine),
                    _ingameButtons
                    );
            }

            return(phrase.Generate(request));
        }
Ejemplo n.º 9
0
        protected virtual AliceResponse CreateResponse(AliceRequest request)
        {
            Phrase phrase = Respond(request);

            return(phrase.Generate(request));
        }