利用C语言编写“剪刀石头布”小游戏

目录
  • 前言
  • 一、游戏原理
  • 二、C语言代码
    • 1.引入函数
    • 2.初始页面显示
    • 3.游戏过程及结果
  • 总结

    前言

    大家好~

    我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布。

    希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序)

    我也会虚心接受大家的建议~

    一、游戏原理

    “剪刀石头布”这个游戏,想必大家都很熟悉了。

    两个人在玩游戏时,事先都不知道对方将要出什么,这中间存在着一种随机性。

    而这种随机性相当于C语言里stdlib.h库中rand()函数,rand()函数用来产生随机数,因为rand是根据提供给srand()的种子值返回一个随机数,所以要使每次随机的结果不一样,需要在srand()函数里引用time()函数,因为每一次运行程序的时间是不同的,所以seed会不同,运行出来的结果也会不同。

    补充:

    rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。

    rand函数需要有srand()函数用来设置rand()产生随机数时的随机数种子。

    参数seed是整数,通常可以利用time(0)或geypid(0)的返回值作为seed。

    首先将游戏者(gamer)的选项输入,并用switch分三种情况,将输入的A、B、C(或a、b、c)转换为整数(Gamer),然后用rand函数在1-3中随机产生一个整数来代表计算机(computer)的选项,再将两个整数相加,最后用switch来分类讨论,输出结果。

    (因水平有限,我目前只能想到用这种方法来判断胜负,所以要避免两种不同情况相加出的结果相同)

    二、C语言代码

    1.引入函数

    代码如下:

    #include "stdio.h"
    #include "stdlib.h"
    #include "time.h"
    

    2.初始页面显示

    代码如下:

    int main()
    {
     char Gamer=0;
     int computer,gamer;
     int result;
     while (1) 
     {
      printf("这个小游戏是——剪刀石头布,\n你要出:\n");
      printf("A:剪刀\nB:石头\nC:布\n");
      scanf_s("%c", &Gamer);
      switch (Gamer) 
      {
      case 65 | 97: //A a
       gamer = 4; 
       break;
      case 66 | 98: //B b
       gamer = 7; 
       break;
      case 67 | 99: //C c
       gamer = 10; 
       break;
      
      default:
       printf("你的选择为%c\n选择错误,退出...\n", Gamer);
       system("pause");
       return 0;
       break;
      }
    

    3.游戏过程及结果

      srand((unsigned)time(0));//每一次的seed都不同
      computer = rand() % 3+1;
      result = gamer + computer;
      printf("电脑出了:");
      switch (computer)
      {
      case 3:printf("剪刀\n"); break;
      case 1:printf("石头\n"); break;
      case 2:printf("布\n"); break;
      }
      printf("你出了:");
      switch (gamer)
      {
      case 4:printf("剪刀\n"); break;
      case 7:printf("石头\n"); break;
      case 10:printf("布\n"); break;
      }
      if (result == 6 || result == 10 || result == 11)
       printf("你赢了!");
      else if (result == 5 || result == 9 || result == 13) 
       printf("电脑赢了!");
      else 
       printf("平手");
      system("pause>nul&&cls"); //清屏
     }
     return 0;
    }

    总结

    以上就是有关于游戏的思路和代码,编写程序前,我查阅了一些资料,并且询问了他人,在这个过程中,我有学到许多新知识.

    但是因为水平有限,程序代码还是很繁琐,方法也不是最好的,希望能通过进一步的学习,开拓自己的思路,用更快捷的方法编写程序。

    本文转自网络,如有侵权请联系客服删除。