石头剪子布游戏: (1)定义游戏规则 剪刀 干掉 布 石头 干掉 剪刀 布 干掉石头 (2)显示玩家开始猜拳 (3)接收玩家输入的内容 (4)让电脑随机产生一种拳 (5)判断比较 (1)玩家赢的情况(显示玩家赢了) (2)电脑赢的情况(显示电脑赢了) (3)平局(显示平局)
首先我们需要让电脑随机出拳:
这里用rand函数(调用stdlib.h库)来生成随机数,代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
//1.让电脑随机出拳
int cm = rand();
printf("%i\n",cm); //%i 指定整数 %d十进制整数
return 0;
}
应该有小伙伴发现了,随机数一直都是一个相同吧
的数,因为C语言提供的rand函数 默认的是一个伪随机数,所以我们还需要用到srand函数(调用time.h库)为初始化随机数生成器,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
//1.让电脑随机出拳
srand(time(NULL));
int cm = rand();
printf("%i\n",cm); //%i 指定整数 %d十进制整数
return 0;
}
如果大家不懂或者想更深层了解可以看这个rand和srand函数
接下来就是猜拳游戏规则:
0代表石头 1代表剪刀 2代表布
那我们怎么把随机数控制在0 1 2这三个数呢?
我们可以用模于3来实现:
0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0
具体如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
//1.让电脑随机出拳
srand(time(NULL));
int cm = rand() % 3;
printf("%i\n",cm); //%i 指定整数 %d十进制整数
return 0;
}
好,接下来就是 提示用户如何输入 ,定义变量保存用户的输入,接收用户的输入,代码如下:
//2.提示用户如何输入
printf("请出拳:0.剪刀 1.石头 2.布\n");
//3.定义变量保存用户的输入
int number;
//4.接收用户的输入
scanf("%d", &number);
注意如果用户输入非法数据呢? 这里我们知道非法数据肯定是小于0大于2的,所以你懂得:
//6.排出非法数据
if (number < 0 || number > 2) {
printf("您输入的数据不对!");
}
第一种实现方法:判断用户和电脑出拳的几种情况从而去确定谁输谁赢和平手,游戏规则如下:
* 猜拳游戏规则: * 0代表石头 1代表剪刀 2代表布 * 电脑 用户(输了) 用户(赢了) * 0 1 2 * 1 2 0 * 2 0 1
代码如下:
else if((cm == 0 && number == 2) ||
(cm == 1 && number == 0) ||
(cm == 2 && number == 1)){
//赢了
printf("电脑出的是:%d,用户出的是:%d,用户赢了\n",cm,number);
}else if((cm == 0 && number == 1 ||
cm == 1 && number == 2 ||
cm == 2 && number == 0)){
//输了
printf("电脑出的是:%d,用户出的是:%d,用户输了\n",cm,number);
}else{
printf("电脑出的是:%d,用户出的是:%d,打平了\n",cm,number);
}
完整代码如下(可以拿去运行实践一下):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
// 1.让电脑随机出拳
srand(time(NULL));
int cm = rand() % 3;
// printf("%i\n",cm);
// 2.提示用户如何输入
printf("请出拳:0.剪刀 1.石头 2.布\n");
// 3.定义变量保存用户的输入
int number;
// 4.接收用户的输入
scanf("%d", &number);
// 5.判断电脑和用户出拳
// 6.排出非法数据
if (number < 0 || number > 2)
{
printf("您输入的数据不对!");
}
// 7.判断出拳,输出结果
//第一种方法:
else if ((cm == 0 && number == 2) ||
(cm == 1 && number == 0) ||
(cm == 2 && number == 1))
{
//赢了
printf("电脑出的是:%d,用户出的是:%d,用户赢了\n", cm, number);
}
else if ((cm == 0 && number == 1 ||
cm == 1 && number == 2 ||
cm == 2 && number == 0))
{
//输了
printf("电脑出的是:%d,用户出的是:%d,用户输了\n", cm, number);
}
else
{
printf("电脑出的是:%d,用户出的是:%d,打平了\n", cm, number);
}
return 0;
}
第二种实现方法:用电脑出的拳 - 用户的出的拳的出的结果判断谁输谁赢,游戏规则如下:
* //赢了 * 0 - 2 = -2 * 1 - 0 = 1 * 2 - 1 = 1 * * //输了 * 0 - 1 = -1 * 1 - 2 = -1 * 2 - 0 = 2
代码如下:
else
{
int temp;
temp = cm - number;
if (temp == -2 || temp == 1)
{
printf("电脑出的是:%d,用户出的是:%d,用户赢了\n", cm, number);
}
else if (temp == -1 || temp == 2)
{
printf("电脑出的是:%d,用户出的是:%d,用户输了\n", cm, number);
}
else
{
printf("电脑出的是:%d,用户出的是:%d,打平了\n", cm, number);
}
}
完整代码如下(可以拿去运行实践一下):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
// 1.让电脑随机出拳
srand(time(NULL));
int cm = rand() % 3;
// printf("%i\n",cm);
// 2.提示用户如何输入
printf("请出拳:0.剪刀 1.石头 2.布\n");
// 3.定义变量保存用户的输入
int number;
// 4.接收用户的输入
scanf("%d", &number);
// 5.判断电脑和用户出拳
// 6.排出非法数据
if (number < 0 || number > 2)
{
printf("您输入的数据不对!");
}
// 7.判断出拳,输出结果
//第二种方法:
else
{
int temp;
temp = cm - number;
if (temp == -2 || temp == 1)
{
printf("电脑出的是:%d,用户出的是:%d,用户赢了\n", cm, number);
}
else if (temp == -1 || temp == 2)
{
printf("电脑出的是:%d,用户出的是:%d,用户输了\n", cm, number);
}
else
{
printf("电脑出的是:%d,用户出的是:%d,打平了\n", cm, number);
}
}
return 0;
}
如有错误或者建议欢迎各位在评论区留言: