栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

石头剪子布游戏:
(1)定义游戏规则
  剪刀 干掉 布
  石头 干掉 剪刀
  布 干掉石头
(2)显示玩家开始猜拳
(3)接收玩家输入的内容
(4)让电脑随机产生一种拳
(5)判断比较
(1)玩家赢的情况(显示玩家赢了)
(2)电脑赢的情况(显示电脑赢了)
(3)平局(显示平局)

 首先我们需要让电脑随机出拳:

 这里用rand函数(调用stdlib.h库)来生成随机数,代码如下:

#include 
#include 
int main(void) 
{
    //1.让电脑随机出拳
    int cm = rand(); 
    printf("%in",cm);    //%i 指定整数 %d十进制整数
    return 0;
}

应该有小伙伴发现了,随机数一直都是一个相同吧

的数,因为C语言提供的rand函数 默认的是一个伪随机数,所以我们还需要用到srand函数(调用time.h库)为初始化随机数生成器,代码如下:

#include 
#include 
#include 
int main(void) 
{
    //1.让电脑随机出拳
    srand(time(NULL));
    int cm = rand();
    printf("%in",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 
#include 
#include 
int main(void) 
{
    //1.让电脑随机出拳
    srand(time(NULL));
    int cm = rand() % 3;
    printf("%in",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 
#include 
#include 

int main(void)
{
    // 1.让电脑随机出拳
    srand(time(NULL));

    int cm = rand() % 3;
    // printf("%in",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 
#include 
#include 

int main(void)
{
    // 1.让电脑随机出拳
    srand(time(NULL));

    int cm = rand() % 3;
    // printf("%in",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;
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994106.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号