在 C# 中创建石头剪刀布游戏

Saad Aslam 2023年10月12日
在 C# 中创建石头剪刀布游戏

本文将讨论使用 C# 开发石头剪刀布游戏的过程。我们将使用 Visual Studio 创建控制台应用程序、名称和项目。

C# 中创建石头剪刀布游戏

为了制作这个游戏,我们将遵循以下步骤:

  • 接受用户的输入。
  • 随机生成输出。
  • 比较所有可能的选择。
  • 宣布获胜者。
  • 重新开始游戏。

该程序的运行将包括多种功能和方法。一旦接收到用户的输入,系统会将其与系统产生的输入进行比较。

该系统产生的输入将是随机的;因此,它可能提供三个选项中的任何一个:石头、布或剪刀。一旦接收到两个输入,它将进行条件渲染。

条件渲染将作为决定是否宣布获胜者或没有获胜者的基础,并进行抽签。

using System;

namespace Hello_World {
  class Program {
    static void Main(string[] args) {}
  }
}

这些行将位于代码的开头,并将在正常程序流程开始时保留。

string ui, si;
int r;
Console.Write("What do you choose?\n\n Rock/ Paper/ Scissors? ");
ui = Console.ReadLine();
Random rnd = new Random();
r = rnd.Next(1, 4);

siui 是用户输入和系统输入作为字符串的两个变量,因此用户应该输入他们选择的完整拼写。r 变量是为计算机将生成的随机数用于选择的整数类型变量。

Console.Write("What do you choose?\n\n Rock/ Paper/ Scissors? ") 语句写在屏幕上并要求用户输入他们的选择。ui = Console.ReadLine() 语句从用户那里获取输入并将其存储到 ui 变量中。

Random rnd = new Random() 语句为随机数创建变量 rnd 以用于随后生成随机数。r = rnd.Next(1, 4) 语句生成 1 到 3 范围内的随机数并将其存储到 r 变量中。

switch (r) {
  case 1:
    si = "Rock";
    Console.WriteLine("Computer chose Rock");
    if (ui == "Rock" || ui == "rock") {
      Console.WriteLine("\nIt is a draw");
    } else if (ui == "Paper" || ui == "paper") {
      Console.WriteLine("\nYou Win!");
    } else {
      Console.WriteLine("\nYou Lose!");
    }
    break;
}

switch() 中,如果 r 变量包含 1 到 4 之间的任何数字,我们会考虑选项。在情况 1 中,我们检查随机数是否为 1,如果是,我们设置系统输入 si 变摇滚。

之后,我们使用 Console.WriteLine("Computer choose Rock") 语句在控制台上写入,该语句会在屏幕上打印计算机选择 Rock。然后我们使用 if 条件来查看用户输入的内容供他们选择。

if (ui == "Rock"||ui == "rock") 语句检查用户是否也输入了 rock,那么这是一个平局,它将通过 Console.WriteLine("\nIt is a draw")。如果不是,那么我们将通过 else if(ui == "Paper"||ui == "paper") 来检查,如果它不是石头,那么用户输入的是布?

如果 yes,则用户赢了,这将由 Console.WriteLine("\nYou Win!"); 打印。

如果用户没有输入我们检查的两个选项,很明显用户输入了剪刀,所以用户输了。所以,我们最后使用了 else,它会打印 You Lose!

最后,break 语句用于退出 switch()

case 2:
  si = "Paper";
  Console.WriteLine("Computer chose Paper");
  if (ui == "Rock" || ui == "rock") {
    Console.WriteLine("\nYou Lose!");
  } else if (ui == "Paper" || ui == "paper") {
    Console.WriteLine("It is a draw");
  } else {
    Console.WriteLine("You win");
  }
  break;

在情况 2 中,我们检查随机数是否为 2,然后我们将系统输入 si 变量设置为布。之后,我们使用 Console.WriteLine("Computer choose Paper") 在控制台上书写,它会在屏幕上打印计算机选择布的信息。

然后,我们使用 if 条件来查看用户输入的内容供他/她选择。if (ui == "Rock"||ui == "rock") 语句检查用户是否也输入了 rock,则用户将输,并通过 Console.WriteLine(" 打印在屏幕上\n 你松了!");

如果不是,那么我们通过 else if(ui == "Paper"||ui == "paper") 检查它是否不摇滚,那么用户输入的是布吗?如果 yes,则为平局。它将由 Console.WriteLine("It is a draw"); 打印。

如果用户没有输入我们检查过的两个选项,很明显用户输入了剪刀,因此用户赢得了游戏。所以,我们最后使用了 else,它将由 Console.WriteLine("You win"); 打印。

break 语句用于退出 switch()

case 3:
  si = "Scissors";
  Console.WriteLine("Computer chose Scissors");
  if (ui == "Rock" || ui == "rock") {
    Console.WriteLine("\nYou Win!");
  } else if (ui == "Paper" || ui == "paper") {
    Console.WriteLine("You Lose");
  } else {
    Console.WriteLine("It is a draw");
  }
  break;

在案例 3 中,我们检查随机数是否为 3,然后我们将系统输入 si 变量设置为剪刀。之后,我们在控制台上通过 Console.WriteLine("Computer choose Scissors") 行在屏幕上打印计算机选择了剪刀。

然后我们使用 if 条件来查看用户输入的内容供他们选择。if (ui == "Rock"||ui == "rock") 行检查用户是否也输入了 rock,然后用户将获胜,并由 Console.WriteLine("\nYou Win!"); 一行打印到屏幕上。

如果不是,那么我们通过 else if(ui == "Paper"||ui == "paper") 行检查,如果它不是石头,那么用户输入的是布吗?如果 yes,则用户将输掉游戏。它将由 Console.WriteLine("You Lose"); 打印出来。

如果用户没有输入我们检查的两个选项,很明显用户输入了剪刀,所以游戏是平局。所以我们最后使用了 else,它会被 Console.WriteLine("It is a draw"); 打印出来。

default:
  Console.WriteLine("invalid entry!");
  break;

switch 作用域的末尾,我们还使用了 default:,这是一种在没有匹配大小写时运行的默认情况。如果 r 变量的值不是 1 到 3,这是一种安全预防措施。

然后我们将用 Console.WriteLine("invalid entry!"); 在屏幕上打印 invalid entry!

如果你愿意,你可能不会在代码中创建和使用 si 变量,因为决策是使用随机数变量 r 做出的。

如果你希望用户输入 yesno 再次玩游戏,那么你应该使用如下代码。

using System;
namespace Hello_World {
  class Program {
    static void Main(string[] args) {
      bool play = true;
      string q;
      while (play) {
        // all the above code of the game goes here
        Console.WriteLine("\nDo you want to play again?  ");
        q = Console.ReadLine();
        if (q == "yes" || q == "Yes") {
          continue;
        } else if (q == "no" || q == "No") {
          play = false;
        } else {
          Console.WriteLine("invalid entry!\nQuiting...!");
          play = false;
        }
      }
    }
  }
}

我们创建了一个布尔类型的 play 变量,用于 while 循环。最初,它设置为 true,因此循环将无限运行,直到 play 变量设置为 false。

你可以将所有游戏代码放在 while 循环中,然后,你可以使用 Console.WriteLine("\nDo you want to play again? "); 要求用户再次玩或不玩。无论用户输入什么,都将使用 q= Console.ReadLine(); 行存储在 q 变量中。

之后,我们将再次使用 if 条件来查看用户输入的内容。

if(q=="yes"||q=="Yes") 语句检查用户的输入,如果它等于是或否。如果用户输入了 yes,则 continue 语句用于跳过其余的循环语句并从头开始循环。

如果用户没有输入 yes 而是输入 no,则条件 else if(q=="no"||q=="No") 为真,play 变量为由 play=false; 行设置为 false,循环将停止,程序将终止。

如果用户输入了除 yesno 之外的任何其他内容,则 invalid entry 将通过 Console.WriteLine("invalid entry!\nQuiting...!"); 打印在屏幕上。而 play 将再次为假,程序将终止。

完整源代码:

using System;

namespace Hello_World {
  class Program {
    static void Main(string[] args) {
      bool play = true;
      string q;
      while (play) {
        string ui, si;
        int r;
        Console.Write("What do you choose?\n\n Rock/ Paper/ Scissors? ");
        ui = Console.ReadLine();
        Random rnd = new Random();
        r = rnd.Next(1, 4);
        switch (r) {
          case 1:
            si = "Rock";
            Console.WriteLine("Computer chose Rock");
            if (ui == "Rock" || ui == "rock") {
              Console.WriteLine("\nIt is a draw");
            } else if (ui == "Paper" || ui == "paper") {
              Console.WriteLine("\nYou Win!");
            } else {
              Console.WriteLine("\nYou Lose!");
            }
            break;
          case 2:
            si = "Paper";
            Console.WriteLine("Computer chose Paper");
            if (ui == "Rock" || ui == "rock") {
              Console.WriteLine("\nYou Lose!");
            } else if (ui == "Paper" || ui == "paper") {
              Console.WriteLine("It is a draw");
            } else {
              Console.WriteLine("You win");
            }
            break;
          case 3:
            si = "Scissors";
            Console.WriteLine("Computer chose Scissors");
            if (ui == "Rock" || ui == "rock") {
              Console.WriteLine("\nYou Win!");
            } else if (ui == "Paper" || ui == "paper") {
              Console.WriteLine("You Lose");
            } else {
              Console.WriteLine("It is a draw");
            }
            break;
          default:
            Console.WriteLine("invalid entry!");
            break;
        }
        Console.WriteLine("\nDo you want to play again?  ");
        q = Console.ReadLine();
        if (q == "yes" || q == "Yes") {
          continue;
        } else if (q == "no" || q == "No") {
          play = false;
        } else {
          Console.WriteLine("invalid entry!\nQuiting...!");
          play = false;
        }
      }
    }
  }
}
作者: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn