private Embed Responding(RpsActors authorActor, RpsUserData authorUd, RpsUserData mentionUd, RpsPlayData authorPlayData, RpsPlayData mentionPlayData) { authorUd.Actor = authorActor; int mentionActor = (int)mentionUd.Actor; string authorMention = authorPlayData.Mention; string mentionedMention = mentionPlayData.Mention; string result = $"{mentionedMention} chose {ConvertActorToEmoji(mentionUd.Actor)}\n" + $"{authorMention} chose {ConvertActorToEmoji(authorUd.Actor)}\n\n"; GameState mentionState, authorState; string thumbnailWinner = string.Empty; //Responding wins if ((mentionActor + 1) % (int)RpsActors.Max == (int)authorActor) { result += $"{authorMention} wins! {CoinsInKeyText}"; authorState = GameState.Win; mentionState = GameState.Lose; thumbnailWinner = authorPlayData.ThumbnailIconUrl; } //Instigator wins else if (((int)authorActor + 1) % (int)RpsActors.Max == mentionActor) { result += $"{mentionedMention} wins! {CoinsInKeyText}"; mentionState = GameState.Win; authorState = GameState.Lose; thumbnailWinner = mentionPlayData.ThumbnailIconUrl; } //Draw else { result += "Draw game."; mentionState = authorState = GameState.Draw; } ProcessResults(mentionUd, mentionState, result, mentionedMention, out result); ProcessResults(authorUd, authorState, result, authorMention, out result); _usersActiveVs.Remove(authorUd); _usersActiveVs.Remove(mentionUd); if (_usersActiveVs.Count == 0) { _timerVs.Stop(); } return(new EmbedBuilder() .WithAuthor(TitleBuilder(authorPlayData)) .WithTitle("*GAME*") .WithThumbnailUrl(thumbnailWinner) .WithColor(Color.DarkOrange) .WithDescription(result).Build()); }
public Embed Play(RpsPlayData authorData, RpsPlayData?mentionData, RpsActors botActor = RpsActors.Max) { RpsActors rpsActor = ConvertInputIntoActor(authorData.Input); if (rpsActor == RpsActors.Max) { return(new EmbedBuilder().WithDescription("Wrong input. \nType either rock(r), paper(p), or scissors(s) to play.").Build()); } if (mentionData.HasValue) { return(VsPlayer(authorData, mentionData.Value)); } return(VsBot(authorData, botActor)); }
private string ConvertActorToEmoji(RpsActors actor) { switch (actor) { case RpsActors.Rock: return(":rock:"); case RpsActors.Paper: return(":roll_of_paper:"); case RpsActors.Scissors: return(":scissors:"); } return(string.Empty); }
private Embed Challenging(RpsActors playerActor, RpsUserData authorUd, RpsUserData mentionUd, RpsPlayData authorPlayData, RpsPlayData mentionPlayData) { authorUd.UserIdVs = mentionUd.UserId; authorUd.Actor = playerActor; authorUd.DateVs = DateTime.Now.AddDays(1); int i = FindIndex(authorUd.UserId); _users[i] = authorUd; _fileSystem.UpdateFile(authorUd); mentionUd.UserIdVs = authorUd.UserId; mentionUd.Actor = RpsActors.Max; mentionUd.DateVs = authorUd.DateVs; i = FindIndex(mentionUd.UserId); _users[i] = mentionUd; _fileSystem.UpdateFile(mentionUd); _usersActiveVs.Add(authorUd); _usersActiveVs.Add(mentionUd); if (!_timerVs.Enabled) { _timerVs.Start(); } string rps = $"{ConvertActorToEmoji(RpsActors.Rock)}{ConvertActorToEmoji(RpsActors.Paper)}{ConvertActorToEmoji(RpsActors.Scissors)}"; return(new EmbedBuilder() .WithTitle($"{rps}*GET READY FOR THE NEXT BATTLE*{rps}") .WithAuthor(TitleBuilder(authorPlayData)) .WithDescription($"{authorPlayData.Mention} " + "**VS** " + $"{mentionPlayData.Mention}\n\n" + $"{authorPlayData.Username} has already made a move.") .WithFields(new EmbedFieldBuilder { IsInline = true, Name = "Ends", Value = authorUd.DateVs }) .WithColor(Color.DarkOrange).Build()); }
private Embed VsBot(RpsPlayData playData, RpsActors botActor) { string userMention = playData.Mention; Random random = new Random(); int bot = botActor == RpsActors.Max ? random.Next(0, (int)RpsActors.Max) : (int)botActor; RpsActors playerActor = ConvertInputIntoActor(playData.Input); int player = (int)playerActor; string competition = $"{userMention} threw {ConvertActorToEmoji(playerActor)}\nBot threw {ConvertActorToEmoji((RpsActors)bot)}\n\n"; if (!Exists(playData.UserId, out RpsUserData ud)) { ud = CreateUser(playData); } GameState state; string processed = string.Empty; if ((bot + 1) % (int)RpsActors.Max == player) { state = GameState.Win; processed = CoinsInKeyText; } else if ((player + 1) % (int)RpsActors.Max == bot) { state = GameState.Lose; } else { state = GameState.Draw; } ud.Actor = playerActor; ProcessResults(ud, state, processed, userMention, out processed); Color color = new Color(0, 0, 0); EmbedFieldBuilder field = null; string icon = ""; switch (state) { case GameState.Win: processed = processed.Replace(userMention ?? string.Empty, ""); field = new EmbedFieldBuilder { IsInline = true, Name = "You won", Value = processed }; icon = _config[Statics.RpsLoseImage]; break; case GameState.Lose: color = Color.Red; processed = processed.Replace(userMention ?? string.Empty, ""); field = new EmbedFieldBuilder { IsInline = true, Name = "You lost", Value = processed }; icon = _config[Statics.RpsWinImage]; break; case GameState.Draw: color = Color.Gold; field = new EmbedFieldBuilder { IsInline = true, Name = "Draw game", Value = "+0 Rings" }; icon = _config[Statics.RpsDrawImage]; break; } return(new EmbedBuilder() .WithDescription(competition) .WithAuthor(TitleBuilder(playData)) .WithTitle("ARCADE MODE") .WithColor(color) .WithFields(field) .WithThumbnailUrl(icon) .Build()); }