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); }
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); }
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); }
public ForcaRetornoJogadaModel ExecutarAcao(ForcaModel forcaModel, string Jogador = null, string Mensagem = null) { return(_ForcaStrategy.Realizar(forcaModel, Jogador, Mensagem)); }