3个C语言练手小项目,掌握常用的流程控制语句——猜拳游戏

练习一:猜拳游戏

主要功能描述:

需求:用户和电脑玩"石头剪刀布"游戏
游戏规则:共三局,胜一局积1分,三局两胜。

每轮先由用户出拳,屏幕提示:
请出拳[1-石头,2-剪刀,3-布]
用户通过键盘选择1,2,3表示他的出拳;
电脑则生成1,2,3三个随机数,含义:[1-石头,2-剪刀,3-布]

三局之后显示结果格式如下:
human vs computer
3 : 0
恭喜,你赢了电脑!
sorry,你败给了电脑!

1.首先,我们先对整个程序进行分析,我们需要分别获取用户和电脑的出拳。可以分别编写两个函数进行获取,并且保证用户输入值得合法性。

//获取用户的出拳,并返回选择对应的数值
int userchoice()
{
    int userChoice;
    do
    {
        printf("\n请出拳[1-石头,2-剪刀,3-布]:\n");
        scanf("%d",&userChoice);
        //判断用户输入的选择是否合法
        if(userChoice>0 && userChoice<4)
        {
            break;
        }else{
            printf("输入的值不合法,请重新输入:\n");
        }
    }
    while(1);
    return userChoice;
}

下面我们获取电脑的出拳,我们最主要的难点在于如何让电脑产生一个1-3的随机数,这里C语言提供了一个随机数发生器。
用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是 rand()srand() 函数。这两个函数的工作过程如下:
1)首先给 srand() 提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;
2)然后调用 rand(),它会根据提供给 srand() 的种子值返回一个随机数(在0到32767之间)
3)根据需要多次调用 rand(),从而不间断地得到新的随机数;
4)无论什么时候,都可以给 srand() 提供一个新的种子,从而进一步“随机化” rand() 的输出结果。

// 获取电脑的出拳
int computerchoice()
{
    int computerChoice;
    /*设置随机种子,因为种子设置后不宜被直接使用,这部分可以
    放入主函数中*/
    //srand(time(0));
    computerChoice = rand()%3+1; 	//产生一个1-3的随机数
    return computerChoice;
}

2.为了让玩家有更好的游戏体验,我们需要提供一个方法来分别展示玩家和电脑本回合的出拳;

//展示你和电脑的出拳
char * showchoice(int choice)
{
    char * pChar=NULL;
    switch(choice){
    case 1:
        pChar="石头";
        break;
    case 2:
        pChar="剪刀";
        break;
    default:
        pChar="布";
    }
    return pChar;
}

3.接下来就是猜拳游戏最主要的胜负规则判断了,我们一般规定三局两胜,平局不算,完成三局后产生游戏结果;

//返回用户和电脑的输赢
int returnResult()
{
    int userwin=0;
    int computerwin=0;
    int userChoice,computerChoice;
    while((userwin+computerwin)<3 )
    {
    	//分别调用上面的两个方法获取用户和电脑的出拳
        userChoice = userchoice();
        computerChoice = computerchoice();

        printf("你的出拳:%s,电脑的出拳:%s\n",showchoice(userChoice),showchoice(computerChoice));

        if(userChoice == computerChoice)
        {
            printf("这把平局,继续来。。\n");
        }
        else if(userChoice == 1 && computerChoice == 2 || userChoice == 2 && computerChoice == 3 || userChoice == 3 && computerChoice == 1)
        {
            userwin++;
            printf("这把你赢了!厉害!\n");
        }
        else
        {
            computerwin++;
            printf("这把电脑赢了!\n");
        }
        printf("\n");
    }
    printf("\n\thuman\tvs\tcomputer\n");
    printf("\t%d\t:\t%d",userwin,computerwin);
    if(userwin>computerwin)
    {
        return 1;
    }else{
        return 0;
    }
}

4.最后主函数部分,按照游戏的先后逻辑调用函数完成整体的功能

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int result;
    //设置随机种子
    srand(time(0));
    
    printf("=========猜拳游戏开始==========\n");
    result = returnResult();
    printf("\n");
    if(result == 1)
    {
        printf("\n\t恭喜,你赢了电脑!\n");
    }else{
        printf("\n\tSorry,你败给了电脑!\n");
    }
    printf("\n=============游戏结束=============");
    return 0;
}

5.测试一下

=========猜拳游戏开始==========

请出拳[1-石头,2-剪刀,3-布]:
3
你的出拳:布,电脑的出拳:剪刀
这把电脑赢了!


请出拳[1-石头,2-剪刀,3-布]:
1
你的出拳:石头,电脑的出拳:剪刀
这把你赢了!厉害!


请出拳[1-石头,2-剪刀,3-布]:
5
输入的值不合法,请重新输入:

请出拳[1-石头,2-剪刀,3-布]:
2
你的出拳:剪刀,电脑的出拳:石头
这把电脑赢了!


        human   vs      computer
        1       :       2

        Sorry,你败给了电脑!

=============游戏结束=============

总结:这样我们就完成了这个小游戏,程序中使用了最基础的循环和条件判断语句,逻辑简单适合C语言初学者练手。
此外程序还有许多可以改进的地方,例如
a.使用 system(“cls”) 在玩家与电脑的对战回合结束时清屏;
b.在每一轮结束后可以征求用户“是否继续游戏”;
程序实现方式很多,这只是其中最为普通的一种,文章中有啰嗦和不合适的地方,希望大家看到后能够交流指正,一起成长。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值