Exemplo n.º 1
0
        //если пользователь ввел exit очистить состояние пользователя
        //если пользователь в игре, вызывать метод Answer для нужной игры
        //если пользователь не в игре, выполнять команды
        private static async void Bot_OnMessage(object sender, MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }
            Console.WriteLine(message.Text);
            var state = StateDAO.GetState(UserDAO.GetUser(message.From.Id));

            if (message.Text.ToLower() == "exit")
            {
                state.GameState = "";
                state.GameId    = 3; //Несуществующая игра
                StateDAO.UpdateState(state);
                await Bot.SendTextMessageAsync(message.From.Id, "Игра завершена! Перейти к списку игр /List_of_games");
            }
            else if (state.GameId != 3) //ID несуществующая игра
            {
                await Bot.SendTextMessageAsync(message.From.Id, GetGame(state.GameId).Answer(message.From.Id, message.Text));
            }
            else
            {
                await MakeCommands(message);
            }
        }
Exemplo n.º 2
0
        public override string Answer(int userId, string message)
        {
            var user  = UserDAO.GetUser(userId);
            var state = StateDAO.GetState(user);

            if (state.GameState == "")
            {
                var word = FindWord(userId, "");
                state.GameState = "0;" + word + ";" + word + ",";
                StateDAO.UpdateState(state);
                return(word + ". Чтобы посмотреть набранные очки и закончить игру напишите result");
            }
            var userData = new UserData(state);

            if (message.ToLower() != "result")
            {
                message = message.ToLower();
                if (IsWordRight(userData, message))
                {
                    var prevPoints = userData.Points++;
                    userData.UsedWords.Add(message);
                    state.GameState = userData.Points +
                                      new string(state.GameState.Skip(prevPoints.ToString().Length).ToArray()) + message + ",";
                    StateDAO.UpdateState(state);
                    return("правильно! слов найдено: " + userData.Points);
                }
                else
                {
                    return("не засчитано");
                }
            }
            state.GameState = "";
            StateDAO.UpdateState(state);
            return(string.Format("Итог: {0}. Перейти к списку игр /List_of_games", userData.Points));
        }
Exemplo n.º 3
0
        private State ConvertToState(char LastUsedChar, List <string> UsedWords, int userId)
        {
            var state = StateDAO.GetState(UserDAO.GetUser(userId));

            state.GameState = LastUsedChar + "@" + string.Join(",", UsedWords.ToArray());
            return(state);
        }
Exemplo n.º 4
0
        public override string Answer(int userId, string message)
        {
            var user  = UserDAO.GetUser(userId);
            var state = StateDAO.GetState(user);

            if (message.Length != 1)
            {
                return("некорректный ввод, введите одну букву.");
            }
            if (state.GameState == "")
            {
                var word    = FindWord(userId, "");
                var nowWord = new string(word
                                         .Select(c =>
                {
                    if (char.IsLetter(c))
                    {
                        return('*');
                    }
                    return(c);
                })
                                         .ToArray());
                state.GameState = word + ";" + nowWord + ";0";
                Console.WriteLine(state.GameId);
                Console.WriteLine(state.GameState);
                StateDAO.UpdateState(state);
                return("отгадайте слово: " + nowWord + ". Введите букву.");
            }
            var userData = new UserData(state);

            if (userData.NowWord.Contains('*'))
            {
                var a = Logic(userData, message.ToLower().First());
                userData.NowWord = a.Item1;
                var b = Logic(userData, message.ToUpper().First());
                userData.NowWord = b.Item1;
                if (a.Item2 == false && b.Item2 == false)
                {
                    userData.NumTry++;
                }
                state.GameState = userData.Word + ";" + userData.NowWord + ";" + userData.NumTry;
                StateDAO.UpdateState(state);
            }

            if (userData.NowWord.Contains('*'))
            {
                return(string.Format("{0}, использовано попыток: {1}", userData.NowWord, userData.NumTry));
            }
            state.GameState = "";
            StateDAO.UpdateState(state);
            return(string.Format("Вы отгадали слово {0}!, использовано попыток: {1}", userData.Word, userData.NumTry));
        }
Exemplo n.º 5
0
        private List <string> GetUsedWords(int userId)
        {
            var state = StateDAO.GetState(UserDAO.GetUser(userId));

            if (state.GameState.Length == 0)
            {
                return(new List <string>());
            }
            else
            {
                return(state.GameState.Split('@')[1].Split(',').ToList());
            }
        }
Exemplo n.º 6
0
        private char GetLastUsedChar(int userId)
        {
            var state = StateDAO.GetState(UserDAO.GetUser(userId));

            if (state.GameState.Length == 0)
            {
                return(' ');
            }
            else
            {
                return(Convert.ToChar(state.GameState.Split('@')[0]));
            }
        }
Exemplo n.º 7
0
        // если пользователь выбрал игру, изменить состояние пользователя
        private static async void Bot_OnCallbackQuery(object sender, CallbackQueryEventArgs e)
        {
            var message = e.CallbackQuery;

            foreach (var game in Games)
            {
                if (game.Name == e.CallbackQuery.Data)
                {
                    var state = StateDAO.GetState(UserDAO.GetUser(message.From.Id), game.Id);
                    StateDAO.UpdateState(state);
                    await Bot.SendTextMessageAsync(message.From.Id, "Введите что-нибудь чтобы начать" + game.Name +
                                                   "! Чтобы завершить игру напишите - exit.");

                    break;
                }
            }
        }