예제 #1
0
        /// <summary>
        /// Computes a guess for a user.
        /// </summary>
        /// <param name="guess">User's guess in format 12345678, where each number represents a color</param>
        /// <param name="name">User's nickname</param>
        /// <returns></returns>
        internal bool MakeGuess(string guess, string name)
        {
            CurrentUsersGuessed.Add(name);

            Guesses.Add(name, guess);

            if (Guesses.Count == Users.Count)
            {
                return(true);
            }
            else
            {
                string remainingUsers = "";
                lock (Users)
                {
                    foreach (var user in Users)
                    {
                        if (!CurrentUsersGuessed.Contains(user))
                        {
                            remainingUsers += user + ", ";
                        }
                    }
                    if (remainingUsers.Length > 0)
                    {
                        RemainingUsers = remainingUsers.Remove(remainingUsers.LastIndexOf(','));
                    }
                }

                return(false);
            }
        }
예제 #2
0
        public int CalculateScore(int CurrentGuess)
        {
            int runningTotal = 0;

            Guesses.Add($"{CurrentGuess} @ {DifficultyLevel}");
            int score = 0;

            CurrentGuessCount += 1;
            if (CurrentGuess == SecretNumber && CurrentGuessCount == 1)
            {
                score += 10;
            }
            else if (CurrentGuess == SecretNumber && CurrentGuessCount == 2)
            {
                score += 6;
            }
            else if (CurrentGuess == SecretNumber && CurrentGuessCount == 3)
            {
                score += 2;
            }
            else
            {
                GameOver = true;
            }

            if (CurrentGuess == SecretNumber)
            {
                LevelComplete = true;
            }

            Score = score;

            return(runningTotal);
        }
예제 #3
0
        public int CalculateScore(int CurrentGuess)
        {
            int runningTotal = 0;

            //Guesses.Add(CurrentGuess);
            Guesses.Add($"{CurrentGuess} @ {DifficultyLevel}");

            if (CurrentGuess == SecretNumber && CurrentGuessCount == 1)
            {
                Score        += 10;
                LevelComplete = true;
            }
            else if (CurrentGuess == SecretNumber && CurrentGuessCount == 2)
            {
                Score        += 6;
                LevelComplete = true;
            }
            else if (CurrentGuess == SecretNumber && CurrentGuessCount == 3)
            {
                Score        += 2;
                LevelComplete = true;
            }
            else if (CurrentGuessCount >= 3)
            {
                GameOver = true;
            }

            CurrentGuessCount++;
            return(runningTotal);
        }
예제 #4
0
파일: Question.cs 프로젝트: mdelonge/PLM
        private void AddWrongAnswers(int maxAnswer, List <GameAnswer> gameAnswers)
        {
            string guess;
            int    igameAns = maxAnswer;

            if (maxAnswer > gameAnswers.Count)
            {
                igameAns = gameAnswers.Count;
            }
            int    maxIteration = gameAnswers.Count * 5;
            int    iterations   = 0;
            Random r            = new Random(DateTime.Now.Second);

            while (Guesses.Count <= igameAns)
            {
                if (maxIteration > iterations)
                {
                    break;
                }
                guess = gameAnswers.ElementAt(r.Next(0, gameAnswers.Count - 1)).AnswerString;
                if (!Guesses.Contains(guess))
                {
                    Guesses.Add(guess);
                }
                iterations++;
            }
            if (Guesses.Count < igameAns)
            {
                ForceAnswers(gameAnswers, igameAns);
            }
        }
예제 #5
0
 public void UpdateGuesses(List <Guess> list)
 {
     foreach (Guess g in list)
     {
         if (!CheckAlreadyInside(g))
         {
             Guesses.Add(g);
         }
     }
 }
예제 #6
0
 private void DivideAllProdsBy(int n)
 {
     Guesses.Add(n);
     for (int i = 0; i < Products.Count; i++)
     {
         if (Products[i] % n == 0)
         {
             Products[i] /= n;
         }
     }
 }
예제 #7
0
파일: Question.cs 프로젝트: mdelonge/PLM
 private void ForceAnswers(List <GameAnswer> ga, int igameAns)
 {
     foreach (GameAnswer item in ga)
     {
         if (!Guesses.Contains(item.AnswerString))
         {
             if (Guesses.Count <= igameAns)
             {
                 Guesses.Add(item.AnswerString);
             }
         }
     }
 }
예제 #8
0
        public void play()
        {
            while (!isWin)
            {
                Console.WriteLine("Entrer une lettre : ");

                char letter      = char.ToUpper(Console.ReadKey(true).KeyChar);
                int  letterIndex = WordToGuess.GetIndexOf(letter);

                Console.WriteLine();

                if (letterIndex != -1)
                {
                    Console.WriteLine($"Bravo, vous avez trouver la lettre : {letter}");
                    Guesses.Add(letter);
                }
                else
                {
                    Console.WriteLine($"la lettre {letter} ne se trouve pas dans le mot à deviner !");
                    Misses.Add(letter);
                }

                if (Misses.Count > 0)
                {
                    Console.WriteLine($"Erreurs ({Misses.Count}) : {string.Join(", ", Misses)}");
                }

                currentWordGuessed = PrintWordToGuess();


                if (currentWordGuessed.IndexOf('_') == -1)
                {
                    isWin = true;
                    Console.WriteLine("Félicitation vous avez gagnez la partie ! ");
                    Console.ReadKey();
                }

                if (Misses.Count >= maxErrors)
                {
                    Console.WriteLine("Dommage, c'est perdu ! ");
                    Console.ReadKey();
                    break;
                }
            }
        }
        /// <summary>
        /// Permet de jouer au jeu du pendu.
        /// </summary>
        public void Play()
        {
            while (!isWin)
            {
                Console.WriteLine("Entrez une lettre :");

                char letter = char.ToUpper(Console.ReadKey(true).KeyChar);

                int letterIndex = WordToGuess.GetIndexOf(letter);

                Console.WriteLine();

                if (letterIndex != -1)
                {
                    Console.WriteLine("Vous avez trouvé la lettre : {0}", letter);
                    Guesses.Add(letter);
                }
                else
                {
                    Console.WriteLine("La lettre {0} ne se trouve pas dans le mot", letter);
                    Misses.Add(letter);
                }

                Console.WriteLine($"Erreurs ({Misses.Count}) : {string.Join(", ", Misses)}");

                currentWordGuessed = PrintWordToGuess();

                if (currentWordGuessed.IndexOf('_') == -1)
                {
                    isWin = true;
                    Console.WriteLine("Gagné");
                    Console.ReadKey();
                }

                if (Misses.Count >= maxErrors)
                {
                    Console.WriteLine("Perdu !");
                    Console.WriteLine("le mot a trouver était : " + WordToGuess.Text);
                    Console.ReadKey();
                    break;
                }
            }
        }
예제 #10
0
        /// <summary>
        /// Permet de jouer au jeu du pendu.
        /// Cette méthode lit la touche sur laquelle l'utilisateur a appuyé
        /// jusqu'à ce que la partie soit gagné ou perdue (10 erreurs).
        /// </summary>
        public void Play()
        {
            while (!isWin)
            {
                Console.WriteLine("Donnez moi une lettre :");

                char letter = char.ToUpper(Console.ReadKey(true).KeyChar);

                int letterIndex = WordToGuess.GetIndexOf(letter);

                Console.WriteLine();

                if (letterIndex != -1)
                {
                    Console.WriteLine("Bravo, vous avez trouvé la lettre : {0}", letter);
                    Guesses.Add(letter);
                }
                else
                {
                    Console.WriteLine("La lettre {0} ne se trouve pas dans le mot à deviner !", letter);
                    Misses.Add(letter);
                }

                Console.WriteLine($"Erreurs ({Misses.Count}) : {string.Join(", ", Misses)}");

                currentWordGuessed = PrintWordToGuess();

                if (currentWordGuessed.IndexOf('_') == -1)
                {
                    isWin = true;
                    Console.WriteLine("Félicitations, c'est gagné !");
                    Console.ReadKey();
                }

                if (Misses.Count >= maxErrors)
                {
                    Console.WriteLine("C'est perdu !");
                    Console.ReadKey();
                    break;
                }
            }
        }
예제 #11
0
        void RunGameLoop()
        {
            HangmanConsoleWriter.PrintGuesses(Guesses);

            GenerateTiles();
            var guess = HangmanConsoleWriter.RequestInput();

            if (HangmanInputValidation.ValidateInput(guess))
            {
                var guessCharacter = guess[0];
                Guesses.Add(guessCharacter);

                if (!WordToGuess.Contains(guessCharacter))
                {
                    NumberOfWrongGuesses++;
                }
                else
                {
                    if (HaveWeWonYet())
                    {
                        GameIsOngoing = false;

                        HangmanConsoleWriter.WinnerOutput(WordToGuess);
                        return;
                    }
                }
            }
            else
            {
                HangmanConsoleWriter.InvalidGuess();
            }

            DrawHangman();

            CheckNumberOfWrongGuesses();
        }
예제 #12
0
        private async Task PotentialGuess(SocketMessage msg)
        {
            try
            {
                if (!(msg is SocketUserMessage))
                {
                    return;
                }

                if (msg.Channel != GameChannel)
                {
                    return;                  // message's channel has to be the same as game's
                }
                if (msg.Content.Length == 1) // message must be 1 char long
                {
                    if (++MessagesSinceLastPost > 10)
                    {
                        MessagesSinceLastPost = 0;
                        try
                        {
                            await GameChannel.SendConfirmAsync("Hangman Game",
                                                               ScrambledWord + "\n" + GetHangman(),
                                                               footer : string.Join(" ", Guesses)).ConfigureAwait(false);
                        }
                        catch { }
                    }

                    if (!(char.IsLetter(msg.Content[0]) || char.IsDigit(msg.Content[0])))// and a letter or a digit
                    {
                        return;
                    }

                    var guess = char.ToUpperInvariant(msg.Content[0]);
                    if (Guesses.Contains(guess))
                    {
                        MessagesSinceLastPost = 0;
                        ++Errors;
                        if (Errors < MaxErrors)
                        {
                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman(),
                                                             footer : string.Join(" ", Guesses)).ConfigureAwait(false);
                        }
                        else
                        {
                            await End().ConfigureAwait(false);
                        }
                        return;
                    }

                    Guesses.Add(guess);

                    if (Term.Word.ToUpperInvariant().Contains(guess))
                    {
                        if (GuessedAll)
                        {
                            try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { }

                            await End().ConfigureAwait(false);

                            return;
                        }
                        MessagesSinceLastPost = 0;
                        try
                        {
                            await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman(),
                                                               footer : string.Join(" ", Guesses)).ConfigureAwait(false);
                        }
                        catch { }
                    }
                    else
                    {
                        MessagesSinceLastPost = 0;
                        ++Errors;
                        if (Errors < MaxErrors)
                        {
                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman(),
                                                             footer : string.Join(" ", Guesses)).ConfigureAwait(false);
                        }
                        else
                        {
                            await End().ConfigureAwait(false);
                        }
                    }
                }
            }
            catch (Exception ex) { _log.Warn(ex); }
        }
예제 #13
0
 public void CompleteRound(int index)
 {
     Guesses.Add(PossibleLetters[index]);
     AppendSecretWord(index);
 }
예제 #14
0
        private async Task PotentialGuess(SocketMessage msg)
        {
            try
            {
                if (!(msg is SocketUserMessage))
                {
                    return;
                }

                if (msg.Channel != GameChannel)
                {
                    return;                  // message's channel has to be the same as game's
                }
                if (msg.Content.Length == 1) // message must be 1 char long
                {
                    if (++MessagesSinceLastPost > 10)
                    {
                        MessagesSinceLastPost = 0;
                        try
                        {
                            await GameChannel.SendConfirmAsync("Hangman Game",
                                                               ScrambledWord + "\n" + GetHangman(),
                                                               footer : string.Join(" ", Guesses)).ConfigureAwait(false);
                        }
                        catch { }
                    }

                    if (!(char.IsLetter(msg.Content[0]) || char.IsDigit(msg.Content[0])))// and a letter or a digit
                    {
                        return;
                    }

                    var guess = char.ToUpperInvariant(msg.Content[0]);
                    if (Guesses.Contains(guess))
                    {
                        MessagesSinceLastPost = 0;
                        ++Errors;
                        if (Errors < MaxErrors)
                        {
                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman(),
                                                             footer : string.Join(" ", Guesses)).ConfigureAwait(false);
                        }
                        else
                        {
                            await End().ConfigureAwait(false);
                        }
                        return;
                    }

                    Guesses.Add(guess);

                    /*int HangmanCurrencyRewardAll = 5;
                     * int HangmanCurrencyRewardLetter = 1;*/

                    if (Term.Word.ToUpperInvariant().Contains(guess))
                    {
                        if (GuessedAll)
                        {
                            try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { }

                            //  giving reward
                            if (NadekoBot.BotConfig.HangmanCurrencyRewardAll > 0)
                            {
                                await CurrencyHandler.AddCurrencyAsync(msg.Author, $"Received {NadekoBot.BotConfig.CurrencyPluralName}", NadekoBot.BotConfig.HangmanCurrencyRewardAll, false).ConfigureAwait(false);

                                await GameChannel.SendConfirmAsync($"**{msg.Author}** received {NadekoBot.BotConfig.HangmanCurrencyRewardAll} {NadekoBot.BotConfig.CurrencySign}!").ConfigureAwait(false);
                            }

                            await End().ConfigureAwait(false);

                            return;
                        }
                        MessagesSinceLastPost = 0;
                        try
                        {
                            await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman(),
                                                               footer : string.Join(" ", Guesses)).ConfigureAwait(false);

                            if (NadekoBot.BotConfig.HangmanCurrencyRewardLetter > 0)
                            {
                                await CurrencyHandler.AddCurrencyAsync(msg.Author, $"Received {NadekoBot.BotConfig.CurrencyPluralName}", NadekoBot.BotConfig.HangmanCurrencyRewardLetter, false).ConfigureAwait(false);

                                await GameChannel.SendConfirmAsync($"**{msg.Author}** received {NadekoBot.BotConfig.HangmanCurrencyRewardLetter} {NadekoBot.BotConfig.CurrencySign}!").ConfigureAwait(false);
                            }
                        }
                        catch { }
                    }
                    else
                    {
                        MessagesSinceLastPost = 0;
                        ++Errors;
                        if (Errors < MaxErrors)
                        {
                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman(),
                                                             footer : string.Join(" ", Guesses)).ConfigureAwait(false);
                        }
                        else
                        {
                            await End().ConfigureAwait(false);
                        }
                    }
                }
            }
            catch (Exception ex) { _log.Warn(ex); }
        }
예제 #15
0
        private Task PotentialGuess(IMessage msg)
        {
            if (msg.Channel != GameChannel)
            {
                return(Task.CompletedTask); // message's channel has to be the same as game's
            }
            if (msg.Content.Length != 1)    // message must be 1 char long
            {
                if (++MessagesSinceLastPost > 10)
                {
                    MessagesSinceLastPost = 0;
                    Task.Run(async() =>
                    {
                        try { await GameChannel.SendConfirmAsync("Hangman Game", ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); } catch { }
                    });
                }
                return(Task.CompletedTask);
            }

            if (!(char.IsLetter(msg.Content[0]) || char.IsDigit(msg.Content[0])))// and a letter or a digit
            {
                return(Task.CompletedTask);
            }

            var guess = char.ToUpperInvariant(msg.Content[0]);

            // todo hmmmm
            // how do i want to limit the users on guessing?
            // one guess every 5 seconds if wrong?
            Task.Run(async() =>
            {
                try
                {
                    if (Guesses.Contains(guess))
                    {
                        ++Errors;
                        if (Errors < MaxErrors)
                        {
                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false);
                        }
                        else
                        {
                            await End().ConfigureAwait(false);
                        }
                        return;
                    }

                    Guesses.Add(guess);

                    if (Term.Word.ToUpperInvariant().Contains(guess))
                    {
                        if (GuessedAll)
                        {
                            try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { }

                            await End().ConfigureAwait(false);
                            return;
                        }
                        try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); } catch { }
                    }
                    else
                    {
                        ++Errors;
                        if (Errors < MaxErrors)
                        {
                            await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false);
                        }
                        else
                        {
                            await End().ConfigureAwait(false);
                        }
                    }
                }
                catch { }
            });
            return(Task.CompletedTask);
        }