Example #1
0
        public void Jogada(string comando, string mensagem, string jogador, Delegate onTerminadoCallBack = null, Delegate onErroCallback = null)
        {
            try
            {
                _ForcaContextStrategy = new ForcaContextStrategy(comando);

                var feedBack = _ForcaContextStrategy.ExecutarAcao(Forca, Jogador: jogador, Mensagem: mensagem);

                Forca = feedBack.Jogo;

                CallbackModel = new CallbackModel
                {
                    UserName      = jogador,
                    Mensagem      = feedBack.Mensagem,
                    ChannelName   = BotAppSettings.ChannelName,
                    JogoEncerrado = (Forca == null)
                };

                if (CallbackModel.JogoEncerrado)
                {
                    this.Finalizar(onErroCallback: onErroCallback);
                }

                onTerminadoCallBack?.DynamicInvoke(CallbackModel);
            }
            catch (Exception e)
            {
                onErroCallback?.DynamicInvoke(new CallbackModel
                {
                    Mensagem    = e.Message,
                    ChannelName = BotAppSettings.ChannelName
                });
            }
        }
 public ForcaRetornoJogadaModel Realizar(ForcaModel forcaModel, string Jogador = "", string Mensagem = "")
 {
     return(new ForcaRetornoJogadaModel
     {
         Mensagem = "Comando não reconhecido",
         Jogo = forcaModel
     });
 }
        public ForcaRetornoJogadaModel Realizar(ForcaModel _Forca, string Jogador = "", string Mensagem = "")
        {
            if (_Forca == null)
            {
                _RetornoJogadaModel.Mensagem = $"Nenhum jogo iniciado, use !iniciarjogo para criar um novo.";
                return(_RetornoJogadaModel);
            }

            _RetornoJogadaModel.Jogo = _Forca;

            //Existe jogador?
            if (!_Forca.Participantes.Any(p => p.Nome.ToLower() == Jogador.ToLower()))
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} use o comando !participar para jogar.";
                return(_RetornoJogadaModel);
            }

            //Jogador não possui tentativas?
            if (_Forca.Participantes.Any(p => p.Nome.ToLower() == Jogador.ToLower() && p.Tentativas == 0))
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} suas tentativas acabaram, aguarde o próximo jogo.";
                return(_RetornoJogadaModel);
            }

            //Valida formato de resposta
            var chute = Mensagem.Split(' ');

            if (!chute.Length.Equals(2))
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} para chutar use o comando !chute <palavra>!";
                return(_RetornoJogadaModel);
            }

            //Valida se chute corresponde a palavra
            var resposta       = chute[1].ToLower();
            var isChuteCorreto = _Forca.Palavra.ToLower().Equals(resposta);

            if (!isChuteCorreto)
            {
                //_RetornoJogadaModel.Mensagem = $"@{Jogador} seu chute está errado!";
                return(_RetornoJogadaModel);
            }

            _RetornoJogadaModel.Mensagem = $"@{Jogador} chutou corretamente! A palavra é {_Forca.Palavra.ToUpper()}";
            HubSingleton.Instance.ForcaHubContext.Clients.All.encerradocomvencedor(_RetornoJogadaModel.Mensagem);
            _RetornoJogadaModel.Jogo = null;

            var moedasGanhas = _Forca.Palavra.Length * 10;

            var jogador = new JogadorModel {
                Nome = Jogador, Moedas = moedasGanhas
            };

            _RankingRepositorio.AtualizarRanking(jogador);

            return(_RetornoJogadaModel);
        }
Example #4
0
 public void Finalizar(Delegate onTerminadoCallBack = null, Delegate onErroCallback = null)
 {
     try
     {
         Forca = null;
         this.IsJogoIniciado        = false;
         this._ForcaContextStrategy = null;
     }
     catch (Exception e)
     {
         onErroCallback?.DynamicInvoke(new CallbackModel
         {
             Mensagem    = e.Message,
             ChannelName = BotAppSettings.ChannelName
         });
     }
 }
        public ForcaRetornoJogadaModel Realizar(ForcaModel _Forca, string Jogador = null, string Mensagem = "")
        {
            if (_Forca != null)
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} já existe um jogo em andamento";
                _RetornoJogadaModel.Jogo     = _Forca;
                return(_RetornoJogadaModel);
            }

            HubSingleton.Instance.ForcaHubContext.Clients.All.iniciando();

            var novaPalavra = _PalavrasService.ObterPalavra();

            if (string.IsNullOrEmpty(novaPalavra.Valor))
            {
                _RetornoJogadaModel.Mensagem = "Não foi possível iniciar o jogo";
                return(_RetornoJogadaModel);
            }


            _Forca = new ForcaModel
            {
                Palavra = novaPalavra.Valor
            };

            var listSegredo = new List <string>();

            foreach (var item in Enumerable.Range(0, novaPalavra.QtdLetras))
            {
                listSegredo.Add("#");
            }

            var segredo = string.Join("", listSegredo);

            _Forca.Segredo = segredo;

            _RetornoJogadaModel.Mensagem =
                $"A palavra contem {novaPalavra.QtdLetras} letras. A palavra é: '{_Forca.Segredo}', que os jogos começem! Usem !participar para entrar no jogo {EmotesConsts.PogChamp}";

            _RetornoJogadaModel.Jogo = _Forca;

            HubSingleton.Instance.ForcaHubContext.Clients.All.iniciado(_Forca);

            return(_RetornoJogadaModel);
        }
        public ForcaRetornoJogadaModel Realizar(ForcaModel _Forca, string Jogador = "", string Mensagem = "")
        {
            if (_Forca == null)
            {
                _RetornoJogadaModel.Mensagem = $"Nenhum jogo iniciado, use !iniciarjogo para criar um novo.";
                return(_RetornoJogadaModel);
            }

            _RetornoJogadaModel.Jogo = _Forca;

            var returnfeedback = string.Empty;
            var textoJogadores = _Forca.Participantes.Count > 1 ? "jogadores" : "jogador";

            var jogadorJaParticipando = _Forca
                                        .Participantes
                                        .Any(p => p.Nome.ToLower() == Jogador.ToLower());

            //Se o jogador já entrou no jogo, avisar ele.
            if (jogadorJaParticipando)
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} você já entrou no jogo. Use !resposta <letra>, !chute <palavra> para jogar. Até o momento temos {_Forca.Participantes.Count} {textoJogadores}.";
                return(_RetornoJogadaModel);
            }

            var novoJogador = new JogadorModel
            {
                Nome = Jogador
            };

            _Forca.Participantes.Add(novoJogador);

            HubSingleton.Instance.ForcaHubContext.Clients.All.adicionajogador(novoJogador);

            _RetornoJogadaModel.Mensagem = $"@{Jogador} você entrou no jogo. Use !resposta <letra>, !chute <palavra> para jogar. Até o momento temos {_Forca.Participantes.Count} {textoJogadores}.";
            _RetornoJogadaModel.Jogo     = _Forca;

            return(_RetornoJogadaModel);
        }
Example #7
0
        public ForcaRetornoJogadaModel Realizar(ForcaModel _Forca, string Jogador = null, string Mensagem = "")
        {
            if (_Forca == null)
            {
                _RetornoJogadaModel.Mensagem = $"Nenhum jogo iniciado, use !iniciarjogo para criar um novo.";
                return(_RetornoJogadaModel);
            }

            _RetornoJogadaModel.Jogo = _Forca;

            //Existe jogador?
            if (!_Forca.Participantes.Any(p => p.Nome.ToLower() == Jogador.ToLower()))
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} use o comando !participar para jogar.";
                return(_RetornoJogadaModel);
            }

            //Jogador não possui tentativas?
            if (_Forca.Participantes.Any(p => p.Nome.ToLower() == Jogador.ToLower() && p.Tentativas == 0))
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} suas tentativas acabaram, aguarde o próximo jogo.";
                return(_RetornoJogadaModel);
            }

            //Jogador mandou mensagem?
            if (string.IsNullOrEmpty(Mensagem))
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} não tenho bola de cristal, jogue usando !resposta <letra> ou chute uma palavra usando !chute <palavra>.";
                return(_RetornoJogadaModel);
            }

            //Tentativa está correta?
            var mensagemArray = Mensagem.ToLower().Split(' ');

            if (!mensagemArray.Length.Equals(2))
            {
                _RetornoJogadaModel.Mensagem = $"@{Jogador} jogue usando !resposta <letra> ou chute uma palavra usando !chute <palavra>.";
                return(_RetornoJogadaModel);
            }

            //Tentativa está correta?
            var resposta = mensagemArray.Last();

            if (!resposta.Length.Equals(1))
            {
                _RetornoJogadaModel.Mensagem = $"@{_RetornoJogadaModel.Mensagem} jogue usando !resposta <letra> ou chute uma palavra usando !chute <palavra>.";
                return(_RetornoJogadaModel);
            }

            var sbResposta = new StringBuilder(_Forca.Segredo);
            var letras     = _Forca.Palavra.Select(c => c).ToList();
            var icExisteOcorrenciaDaLetra = false;

            for (int index = 0; index < letras.Count; index++)
            {
                var letra = letras[index].ToString();
                if (!resposta.Equals(letra))
                {
                    continue;
                }
                sbResposta[index]         = resposta.ToCharArray()[0];
                icExisteOcorrenciaDaLetra = true;
            }
            _Forca.Segredo = sbResposta.ToString().ToUpper();

            if (icExisteOcorrenciaDaLetra)
            {
                //_RetornoJogadaModel.Mensagem = $"@{Jogador} você acertou uma letra da palavra: {_Forca.Segredo}.";

                HubSingleton.Instance.ForcaHubContext.Clients.All.respostacerta(_Forca.Segredo);

                if (!_Forca.Segredo.Contains("#"))
                {
                    _RetornoJogadaModel.Mensagem = $"@{Jogador} venceu! A palavra é {_Forca.Palavra}!";
                    HubSingleton.Instance.ForcaHubContext.Clients.All.encerradocomvencedor(_RetornoJogadaModel.Mensagem);
                    _RetornoJogadaModel.Jogo = null;

                    var moedasGanhas = _Forca.Palavra.Length * 10;

                    var jogador = new JogadorModel {
                        Nome = Jogador, Moedas = moedasGanhas
                    };

                    _RankingRepositorio.AtualizarRanking(jogador);

                    return(_RetornoJogadaModel);
                }

                _RetornoJogadaModel.Jogo = _Forca;
                return(_RetornoJogadaModel);
            }

            if (!icExisteOcorrenciaDaLetra)
            {
                _Forca.Participantes.SingleOrDefault(p => p.Nome.ToLower() == Jogador.ToLower()).Tentativas -= 1;
                var jogadorParticipante = _Forca.Participantes.SingleOrDefault(p => p.Nome.ToLower() == Jogador.ToLower());
                //_RetornoJogadaModel.Mensagem = $"@{Jogador} você não acertou, segue a palavra: {_Forca.Segredo}! Tentativas restantes: {jogadorParticipante.Tentativas}.";
                _RetornoJogadaModel.Jogo = _Forca;

                HubSingleton.Instance.ForcaHubContext.Clients.All.respostaErrada(jogadorParticipante);

                if (!_Forca.Participantes.Any(p => p.Tentativas > 0))
                {
                    _RetornoJogadaModel.Mensagem = $"Ninguém acertou, a palavra era {_Forca.Palavra}!";
                    HubSingleton.Instance.ForcaHubContext.Clients.All.encerradosemvencedor(_RetornoJogadaModel.Mensagem);
                    _RetornoJogadaModel.Jogo = null;
                    return(_RetornoJogadaModel);
                }

                return(_RetornoJogadaModel);
            }

            return(_RetornoJogadaModel);
        }
Example #8
0
 public ForcaRetornoJogadaModel ExecutarAcao(ForcaModel forcaModel, string Jogador = null, string Mensagem = null)
 {
     return(_ForcaStrategy.Realizar(forcaModel, Jogador, Mensagem));
 }