C语言石头剪子布游戏(详解保姆级)

石头剪子布游戏:
(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;
}

如有错误或者建议欢迎各位在评论区留言:

  • 14
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C语言·懿

感谢各位大佬观赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值