(文中提及函数如有需要请到MSDN查询用法)
一、新学内容
- rand函数基础
- time函数应用
二、代码主体
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
char player=0;
int computer=0;
int result=0;
srand(time(NULL));
printf("A:剪刀\nB:石头\nC:布\nD:退出\n");
scanf("%c", &player);
while (1)
{
switch (player)
{
case 65:
case 97:
player = 6;
printf("你出了剪刀\n");
break;
case 66:
case 98:
player = 9;
printf("你出了石头\n");
break;
case 67:
case 99:
player = 12;
printf("你出了布\n");
break;
case 68:
case 100:
printf("游戏退出\n");
break;
}
computer = (rand()%4);
switch (computer)
{
case 1:
printf("电脑出了剪刀\n");
break;
case 2:
printf("电脑出了石头\n");
break;
case 3:
printf("电脑出了布\n");
break;
}
result = (int)player + computer;
if (result==9||result==10||result==14)
{
printf("你赢了");
return 0;
}
else if (result==8||result==12||result==13)
{
printf("你输了");
return 0;
}
else
{
printf("平局");
return 0;
}
}
}
三、浅谈思路
想要写出剪刀石头布程序,首先需要解决的第一件事就
如何让系统来是判定胜负
这里使用的是对玩家与电脑出招赋值
根据双方所出招式(突然词穷了)赋值之和来判定胜负
所以 就需要随机取值
四、代码解读
这段代码有一个对于初学者来说的难点(因为我学那本书里没有0.0):
随机取值
C语言里随机取值使用
rand()
但是rand()函数为假随机, 理解为同一个rand只有第一次生成的数字为随机。
后面在此运行都为第一次生成的数字(个人理解 错误请纠正)。
所以这里要引入一个新的函数
srand()
可以看到MSDN里中定义为给rand()函数一个初始种子值。
如果初始种子是一样的话,
那么rand函数随机生成数字也是一样的(不重启情况下)。
srand一次运行只用执行一次 所以将其放在while循环之外。
但又遇到一个问题,如何让种子每次都不一样呢?
于是 我们再次引入函数
time()
我们看到time()函数返回值为从19701.1午夜到现在的秒数
即每时每刻返回值都不同
由于不需要存储这个值 所以直接设定为NULL
即 time(NULL)
确定界限
再使用取余来确定上限(原理为余数不会大于除数)
将取余后的值加上一个数字来确定下限、
例:
a=(rand()%10+50)
a范围即为50-59
如此 随机取值结束
五、闲谈
新手们都要加油啊!!
应该会日更吧?
有不足或者缺陷欢迎指出!!