Пример #1
0
        public static List <MessageConfig> MoveCommand(int chatId, Direction direction)
        {
            var status               = MovCommand(chatId, direction);
            var username             = status.CurrentPlayer?.HeroName;
            List <MessageConfig> msg = new List <MessageConfig>();

            if (status.IsOtherTurn)
            {
                msg.Add(new MessageConfig
                {
                    Answer   = String.Format(Answers.NoTurn.RandomAnswer()),
                    PlayerId = chatId
                });
                return(msg);
            }
            if (status.IsGameEnd)
            {
                var character = CharacterRepository.Read(chatId);
                character.State = CharacterState.ChangeGameMode;
                msg.Add(new MessageConfig
                {
                    Answer   = String.Format(Answers.EndGame.RandomAnswer(), username),
                    PlayerId = chatId
                });
                return(msg);
            }
            if (status.PlayerActions.Contains(PlayerAction.OnWall))
            {
                msg.Add(new MessageConfig
                {
                    Answer   = String.Format(Answers.MoveWall.RandomAnswer(), username),
                    PlayerId = chatId
                });
                return(msg);
            }
            var messageList = new List <string>();

            messageList.Add(String.Format(Answers.MoveGo.RandomAnswer(), username));

            foreach (var item in status.PlayerActions)
            {
                var newString = StatusToMessage.MessageOnMoveAction(item, username);
                if (newString != null)
                {
                    messageList.Add(newString);
                }
            }
            msg.Add(new MessageConfig
            {
                Answer   = String.Join("\n", messageList),
                PlayerId = chatId
            });
            return(msg);
        }
Пример #2
0
        public static List <MessageConfig> ShootCommand(int userId, Direction direction)
        {
            List <MessageConfig> msg = new List <MessageConfig>();
            var status = GameCommandService.ShootCommand(userId, direction);

            //TODO: вынести в отдебный метод отправку "не ваш ход"
            if (status.IsOtherTurn)
            {
                msg.Add(new MessageConfig
                {
                    Answer   = String.Format(Answers.NoTurn.RandomAnswer()),
                    PlayerId = userId
                });
                return(msg);
            }

            var username   = status.CurrentPlayer.HeroName;
            var memberlist = MemberRepository.ReadMemberList(MemberRepository.ReadLobbyId(userId));
            var lobby      = LobbyRepository.Read(MemberRepository.ReadLobbyId(userId));
            var nextPlayer = lobby.Players[lobby.CurrentTurn];

            if (status.Result == AttackType.NoAttack)
            {
                for (int i = 0; i < memberlist.Count; i++)
                {
                    if (memberlist[i].UserId == userId)
                    {
                        msg.Add(new MessageConfig
                        {
                            Answer   = String.Format(Answers.NotBullet.RandomAnswer(), username),
                            PlayerId = memberlist[i].UserId
                        });
                    }
                    else
                    {
                        msg.Add(new MessageConfig
                        {
                            Answer   = String.Format(AnswersForOther.NotBullet.RandomAnswer(), username),
                            PlayerId = memberlist[i].UserId
                        });
                    }
                }
                msg.Find(e => e.PlayerId == nextPlayer.TelegramUserId).KeyBoardId = GetKeyboardType(nextPlayer);
                return(msg);
            }

            if (status.Result == AttackType.NoTarget)
            {
                msg.Add(new MessageConfig
                {
                    Answer = String.Format(Answers.ShootWall.RandomAnswer(), username,
                                           Extensions.DirectionToString(direction)),
                    PlayerId   = userId,
                    KeyBoardId = status.KeyboardType
                });

                msg.AddRange(memberlist
                             .Where(m => m.UserId != userId)
                             .Select(m => new MessageConfig
                {
                    Answer   = String.Format(AnswersForOther.ShootWall.RandomAnswer(), username, Extensions.DirectionToString(direction)),
                    PlayerId = m.UserId
                }));
                msg.Find(e => e.PlayerId == nextPlayer.TelegramUserId).KeyBoardId = GetKeyboardType(nextPlayer);
                return(msg);
            }
            var config = StatusToMessage.MessageOnShoot(status.Result, username, status.Target.HeroName,
                                                        direction.DirectionToString());

            msg.Add(new MessageConfig
            {
                Answer   = config.Item1,
                PlayerId = userId
            });
            msg.AddRange(memberlist
                         .Where(m => m.UserId != userId)
                         .Select(m => new MessageConfig
            {
                Answer   = config.Item2,
                PlayerId = m.UserId
            }));


            //if (status.ShootCount == false)
            msg.Find(e => e.PlayerId == userId).KeyBoardId = status.KeyboardType;
            msg.Find(e => e.PlayerId == nextPlayer.TelegramUserId).KeyBoardId = GetKeyboardType(nextPlayer);
            msg.Find(e => e.PlayerId == status.Target.TelegramUserId).Answer +=
                "Вы убиты. Для поиска игры воспользуйтесь командой /game";
            return(msg);
        }
Пример #3
0
        public static List <MessageConfig> MoveCommand(int chatId, Direction direction)
        {
            //TODO:
            var memberlist           = MemberRepository.ReadMemberList(MemberRepository.ReadLobbyId(chatId));
            var status               = GameCommandService.MoveCommand(chatId, direction);
            var username             = status.CurrentPlayer?.HeroName;
            List <MessageConfig> msg = new List <MessageConfig>();

            if (status.IsOtherTurn)
            {
                msg.Add(new MessageConfig
                {
                    Answer   = String.Format(Answers.NoTurn.RandomAnswer()),
                    PlayerId = chatId
                });
                return(msg);
            }

            if (status.IsGameEnd)
            {
                //TODO: рефактринг, заменить for на AddRabge и LINQ
                foreach (var member in memberlist)
                {
                    var character = CharacterRepository
                                    .ReadAll().Find(e => e.TelegramUserId == member.UserId);
                    character.State = CharacterState.ChangeGameMode;
                    CharacterRepository.Update(character);

                    if (member.UserId == chatId)
                    {
                        msg.Add(new MessageConfig
                        {
                            Answer   = String.Format(Answers.EndGame.RandomAnswer(), username),
                            PlayerId = member.UserId
                        });
                    }
                    else
                    {
                        msg.Add(new MessageConfig
                        {
                            Answer   = String.Format(AnswersForOther.EndGame.RandomAnswer(), username, Extensions.DirectionToString(direction)),
                            PlayerId = member.UserId
                        });
                    }
                }
                return(msg);
            }

            var lobby      = LobbyRepository.Read(MemberRepository.ReadLobbyId(chatId));
            var nextPlayer = lobby.Players[lobby.CurrentTurn];

            if (status.PlayerActions.Contains(PlayerAction.OnWall))
            {
                msg.Add(new MessageConfig
                {
                    Answer   = String.Format(Answers.MoveWall.RandomAnswer(), username) + '\n',
                    PlayerId = chatId
                });

                msg.AddRange(memberlist
                             .Where(m => m.UserId != chatId)
                             .Select(m => new MessageConfig
                {
                    Answer   = String.Format(AnswersForOther.MoveWall.RandomAnswer(), username, Extensions.DirectionToString(direction)),
                    PlayerId = m.UserId
                }));
                msg.Find(e => e.PlayerId == nextPlayer.TelegramUserId).KeyBoardId = GetKeyboardType(nextPlayer);
                return(msg);
            }

            string s           = "";
            var    messageList = new List <string>();

            foreach (var item in status.PlayerActions)
            {
                var newString = StatusToMessage.MessageOnMoveAction(item, username);
                if (newString != null)
                {
                    messageList.Add(newString);
                }
            }


            //   messageList.Add(String.Format(Answers.MovePlayer.RandomAnswer(), username, player.HeroName));

            s = string.Join("\\n", messageList);
            if (status.PlayerActions.Contains(PlayerAction.OnArsenal))
            {
                msg.Add(new MessageConfig
                {
                    Answer     = String.Format(Answers.MoveGo.RandomAnswer(), username) + '\n' + s,
                    PlayerId   = chatId,
                    KeyBoardId = KeyboardType.ShootwithBomb
                });
            }
            else
            {
                msg.Add(new MessageConfig
                {
                    Answer   = String.Format(Answers.MoveGo.RandomAnswer(), username) + '\n' + s,
                    PlayerId = chatId,
                });
            }

            msg.AddRange(memberlist
                         .Where(m => m.UserId != chatId)
                         .Select(m => new MessageConfig
            {
                Answer   = String.Format(AnswersForOther.MoveGo.RandomAnswer(), username, Extensions.DirectionToString(direction)) + s,
                PlayerId = m.UserId
            }));
            if (status.PlayersOnSameCell != null)
            {
                string answ1 = "", answ2 = "";
                foreach (var player in status.PlayersOnSameCell)
                {
                    answ1 += String.Format(Answers.MovePlayer.RandomAnswer(), player.HeroName) + '\n';
                    answ2 += String.Format(AnswersForOther.MovePlayer.RandomAnswer(), username, player.HeroName,
                                           Extensions.DirectionToString(direction));
                }
                msg.Add(new MessageConfig
                {
                    Answer   = answ1,
                    PlayerId = chatId
                });

                msg.AddRange(memberlist
                             .Where(m => m.UserId != chatId)
                             .Select(m => new MessageConfig
                {
                    Answer   = answ2,
                    PlayerId = m.UserId
                }));
            }
            msg.Find(e => e.PlayerId == nextPlayer.TelegramUserId).KeyBoardId = GetKeyboardType(nextPlayer);
            return(msg);
        }
Пример #4
0
        public static List <MessageConfig> StabCommand(int userId)
        {
            //TODO: Назвать все userId и playerId в одном стиле
            var status = GameCommandService.StabCommand(userId);
            List <MessageConfig> msg = new List <MessageConfig>();
            var lobby      = LobbyRepository.Read(MemberRepository.ReadLobbyId(userId));
            var nextPlayer = lobby.Players[lobby.CurrentTurn];

            if (status.IsOtherTurn)
            {
                msg.Add(new MessageConfig
                {
                    Answer   = String.Format(Answers.NoTurn.RandomAnswer()),
                    PlayerId = userId
                });
                return(msg);
            }

            var memberlist = MemberRepository.ReadMemberList(MemberRepository.ReadLobbyId(userId));
            var username   = status.CurrentPlayer.HeroName;

            if (status.Result == AttackType.NoAttack)
            {
                for (int i = 0; i < memberlist.Count; i++)
                {
                    if (memberlist[i].UserId == userId)
                    {
                        msg.Add(new MessageConfig
                        {
                            Answer   = String.Format(Answers.StabWall.RandomAnswer(), username),
                            PlayerId = memberlist[i].UserId
                        });
                    }
                    else
                    {
                        msg.Add(new MessageConfig
                        {
                            Answer   = String.Format(AnswersForOther.StabWall.RandomAnswer(), username),
                            PlayerId = memberlist[i].UserId
                        });
                    }
                }

                msg.Find(e => e.PlayerId == nextPlayer.TelegramUserId).KeyBoardId = GetKeyboardType(nextPlayer);
                return(msg);
            }


            var config = StatusToMessage.MessageOnStab(status.Result, username, status.Target.HeroName);

            msg.Add(new MessageConfig
            {
                Answer   = config.Item1,
                PlayerId = userId
            });

            msg.AddRange(memberlist
                         .Where(m => m.UserId != userId)
                         .Select(m => new MessageConfig
            {
                Answer   = config.Item2,
                PlayerId = m.UserId
            }));
            msg.Find(e => e.PlayerId == nextPlayer.TelegramUserId).KeyBoardId = GetKeyboardType(nextPlayer);
            msg.Find(e => e.PlayerId == status.Target.TelegramUserId).Answer +=
                "Вы убиты. Для поиска игры воспользуйтесь командой /game";
            return(msg);
        }