【问题标题】:How do you set a losing condition on a C++ Game?如何在 C++ 游戏中设置失败条件?
【发布时间】:2021-03-05 09:26:24
【问题描述】:

/我尝试在 C++ 上创建一个猜数游戏,我继续编写一个程序,生成一个从 1 到 1000 的随机数,并设置一个获胜条件。也就是说,如果用户输入随机生成的数字,那么他们就赢了。但我也想设置一个失败的条件。例如,用户在输掉游戏之前只有 10 次尝试。我有一种感觉,答案很简单,但我根本无法投入其中。\

#include <string>
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void tips()
{
    std::cout << "Pay attention to what the system inputs.\n";
    std::cout << "If Too High, Lower you're number base on your latest guess\n";
    std::cout << "If Too Low,  Guess a higher number base on your latest guess\n";
}

void help()
{
    std::cout << "The Instruction of the game is to guess the random generated number from one to a thousand\n";
}

void quit_game()
{
    std::cout << "You have quited the Game\n";
}

void play_game()
{
    int random = rand() % 1001; 
    std::cout << "Guess A Number:\n";
    while(true)
    {
        int guess;
          std::cin >> guess;
         if(guess == random)
        {
            std::cout << "You Are Victorous!\n";
            break;
        } else if (guess < random)
        {
            std::cout << "Too low\n";
        }else
        {
            std::cout << "Too high\n";
        }
    }
}

int main ()
{
  srand(time(NULL));
  int selected;
  do
    {
     std::cout << "0. Quit Game" << std::endl << "1. Play Game\n";
     std::cout << "2. Help" << std::endl << "3. Tips\n";
     std::cin >> selected;

       switch (selected)
       {
        case 0:
           quit_game();
             break;
        case 1:
           play_game();
             break;
        case 2:
           help();
             break;
        case 3:
           tips();
            break;
       
       default:
           std::cout << "You have entered an invalid option\n";
       }
    }

  while (selected != 0);
}

【问题讨论】:

    标签: c++ random numbers case


    【解决方案1】:

    您可以使用 for 循环来代替 while(true)

    #include <string>
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    void tips()
    {
        std::cout << "Pay attention to what the system inputs.\n";
        std::cout << "If Too High, Lower you're number base on your latest guess\n";
        std::cout << "If Too Low,  Guess a higher number base on your latest guess\n";
    }
    
    void help()
    {
        std::cout << "The Instruction of the game is to guess the random generated number from one to a thousand\n";
    }
    
    void quit_game()
    {
        std::cout << "You have quited the Game\n";
    }
    
    void play_game(std::size_t max_guesses)
    {
        int random = rand() % 1001; 
        std::cout << "Guess A Number:\n";
        for(std::size_t i=0;i<max_guesses;++i)
        {
            int guess;
              std::cin >> guess;
            if(guess == random)
            {
                std::cout << "You Are Victorous!\n";
                return;
            } else if (guess < random)
            {
                std::cout << "Too low\n";
            }else
            {
                std::cout << "Too high\n";
            }
        }
    
        std::cout << "You Lost!\n";
        return;
    }
    
    int main ()
    {
      srand(time(NULL));
      constexpr std::size_t num_guesses=5;
      int selected;
      do
        {
         std::cout << "0. Quit Game" << std::endl << "1. Play Game\n";
         std::cout << "2. Help" << std::endl << "3. Tips\n";
         std::cin >> selected;
    
           switch (selected)
           {
            case 0:
               quit_game();
                 break;
            case 1:
                play_game(num_guesses);
                 break;
            case 2:
               help();
                 break;
            case 3:
               tips();
                break;
           
           default:
               std::cout << "You have entered an invalid option\n";
           }
        }
    
      while (selected != 0);
    }
    

    【讨论】:

      【解决方案2】:

      您可以在 play_game 函数中使用另一个变量来跟踪玩家的尝试次数。

      void play_game()
      {
          static const int MAX_GUESSES = 10; // You can change this
          int number_of_guesses = 0;
      
          int random = rand() % 1001; 
          std::cout << "Guess A Number:\n";
          while(true)
          {
              int guess;
                std::cin >> guess;
               if(guess == random)
              {
                  std::cout << "You Are Victorous!\n";
                  break;
              } else if (guess < random)
              {
                  std::cout << "Too low\n";
              }else
              {
                  std::cout << "Too high\n";
              }
      
              ++number_of_guesses;
              if (number_of_guesses == MAX_GUESSES)
              {
                  std::cerr << "Too many guesses!" << std::endl;
                  break;
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        您需要使用一个全局变量作为最大尝试次数,并使用另一个变量来计算用户播放次数。

        const unsigned Maximum_try = 10;
        
        void play_game()
        {
            static unsigned number_of_play = 0;
            int random = rand() % 1001;
            std::cout << "Guess A Number:\n";
            while (true)
            {
                int guess;
                std::cin >> guess;
                number_of_play++;
                if (guess == random)
                {
                    std::cout << "You Are Victorous!\n";
                    break;
                }
                else if (guess < random)
                {
                    std::cout << "Too low\n";
                }
                else
                {
                    std::cout << "Too high\n";
                }
        
                if (number_of_play == Maximum_try)
                {
                    std::cout << "The answer was: " << random << std::endl;
                    std::cout << "YOU LOSE! Try again dear :-)\n";
                    number_of_play = 0; 
                    break;
                }
            }
        }
        

        【讨论】:

        • 尽可能避免全局,它就在这里。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多