C语言猜拳游戏

2016年最后一篇文章

今天闲来无事Google了一段C语言写的猜拳游戏的代码(本人水平比较低,几乎是刚入门),我没做什么修改。这个switch语句里面对result的处理让我眼前一新,原来是这么玩的,也算是学到了。

代码本身比较简单,算法上面也没有什么难理解的地方,所以我没有做什么修改,如果大家有兴趣可以完善一下交互的功能。

以下是代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h> int main(){
char gamer;
int computer;
int result; while (1){
printf ("这是一个猜拳小游戏,请选择你的爪子:\n");
printf ("A:剪刀\nB:石头\nC:布\nD:不玩了\n");
scanf ("%c%*c",&gamer);
switch (gamer){
case 65:
case 97:
gamer = 4;
break;
case 66:
case 98:
gamer = 7;
break; case 67:
case 99:
gamer = 10;
break;
case 68:
case 100:
return 0; default:
printf ("你的选择是%c 选择错误,退出...\n",gamer);
getchar();
system("cls");
return 0;
break;
}
srand ((unsigned)time(NULL)); //随机数种子
computer = rand()%3; //产生随机数并取余,得到电脑出拳
result = (int)gamer+computer; // 运算时要将char类型的gamer转换成int
printf ("电脑出了");
switch (computer){
case 0: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==7||result==11){
printf ("你赢了!");
}
else if (result==5||result==9||result==10){
printf ("电脑赢了!");
}
else{
printf ("平手");
}
system("pause>nul&&cls"); //暂停并清屏
}
return 0;
}

由于本人是新手,所以有些函数的功能还不是很清楚,在这里做一些小小的解释:

  • srand和rand函数:在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( inta)。可以利用srand((unsigned)time(NULL))来产生随机序列,因为没一次运行程序的时间是不同的。

    1. 首先给srand()提供一个种子,它是一个unsigned int 类型,其取值范围从0~65535.
    2. 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(0~32767).
    3. 根据需要多次调用rand(),从而不间断的得到新的随机数.
    4. 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果.
  • time()函数:用于获取时间戳,用time(null)获取当前时间戳。

      	2016.12.31晚
上一篇:70道阿里百度高频Java面试题(框架+JVM+多线程+算法+数据库)


下一篇:Git学习系列之Git基本操作提交项目(图文详解)