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晚