C语言综合案例-猜拳游戏

C语言综合案例-猜拳游戏

功能实现:

​ 1.选择对手

​ 2.自己出拳

​ 3.对手出拳

​ 4.双方比较

​ 5.退出游戏

分析

通过C语言中的分支结构和循环结构来完成这个简单的猜拳游戏,根据需求将其功能分为5部分,通过循环结构和分支结构完善其功能。以简单的if…else,switch,while语句就可以完成。具体代码如下:

代码

/*************************************************************************
  > File Name:    demo.c
  > Author:       ZK
  > Description: C语言综合案例::猜拳游戏
  > Created Time: 2025年02月26日 星期三 21时33分04秒
 ************************************************************************/

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>


/**
 *需求:猜拳游戏1.0
 *步骤:
 *      1.选择对手
 *      2.自己出拳
 *      3.对手出拳
 *      4.双方比较
 *      5.退出游戏
 */


int main(int argc,char *argv[])
{
    //定义变量
    int is_stop = 1;    //标识变量,默认不退出
    int is_select_ct = 1;   //选择对手是否重复,默认重复
    int computer_no;    //对手序号
    char computer_name[20];//存储对手的名字

    int is_select_own = 1;//自己出拳是否重复,默认重复
    int own_no;         //自己出拳的序号
    char own_name[20];  //自己出拳的名字

    int ct_no;          //对手出拳的序号
    char ct_name[20];   //对手出拳的名字

    //游戏头部
    printf("=======================\n");
    printf("    猜拳游戏 v1.0版    \n");
    printf("=======================\n");

    while(is_stop)
    {
        /*****1.选择对手*****/
        while(is_select_ct)
        {
            printf("请选择您的对战玩家:\n[1] 哪吒  [2] 敖丙  [3] 申公豹\n");
            scanf("%d",&computer_no);

            switch(computer_no)
            {
                case 1:
                    //给字符数组赋值一个字符串常量
                    strcpy(computer_name,"哪吒");
                    is_select_ct = 0;   //终止循环
                    break;
                case 2:
                    strcpy(computer_name,"敖丙");
                    is_select_ct = 0;
                    break;
                case 3:
                    strcpy(computer_name,"申公豹");
                    is_select_ct = 0;
                    break;
                default:
                    strcpy(computer_name,"无效玩家");
                    is_select_ct = 1;   //重新循环
            }

            printf("您选择的对手是%s\n\n",computer_name);
        }

        
        /*****2.自己出拳*****/
        while(is_select_own)
        {
            printf("请选择您要出拳的序号:\n[1] 石头  [2] 剪刀  [3] 布\n");
            scanf("%d",&own_no);

            switch(own_no)
            {
                case 1:
                    strcpy(own_name,"石头");
                    is_select_own = 0;
                    break;
                case 2:
                    strcpy(own_name,"剪刀");
                    is_select_own = 0;
                    break;
                case 3:
                    strcpy(own_name,"布");
                    is_select_own = 0;
                    break;
                default:
                    strcpy(own_name,"无效出拳");
                    is_select_own = 1;//重新循环
            }

            printf("您出的是:%s\n\n",own_name);
        }


        /*****3.对手出拳*****/

        //通过随机数产生对手的出拳的序号(1~3)
        srand((unsigned)time(NULL));//以时间作为时间种子,降低随机数重复的概率
        //随机产生序号rand()函数生成的数据从0开始,含头不含尾巴
        ct_no = rand()%3+1;//默认生成0~2,我们需要改造成1~3
        switch(ct_no)
        {
            case 1:
                strcpy(ct_name,"石头");
                break;
            case 2:
                strcpy(ct_name,"剪刀");
                break;
            case 3:
                strcpy(ct_name,"布");
                break;
        }

        printf("%s出的是:%s\n\n",computer_name,ct_name);


        /*****4.双方比较*****/
        if ((own_no == 1 && ct_no == 2) || (own_no == 2 && ct_no == 3) || (own_no == 3 && ct_no == 1))
        {
            printf("恭喜,您获胜!\n\n");
        }
        else if(own_no == ct_no)
        {
            printf("平局!\n");
        }
        else
        {
            printf("很遗憾,您输了!\n");
        }


        /*****5.退出游戏*****/
        char stop;//输入一个字符来退出
        printf("是否退出游戏?[Y/N]\n");
        getchar();//消除换行符
        scanf("%c",&stop);

        if(stop == 'Y' || stop == 'y')
        {
            //结束所有内循环,否则仅退出外部循环,会失败
            is_select_ct = 0;
            is_select_own = 0;
            is_stop = 0;
            printf("\n游戏结束!\n");
        }
        else
        {
            is_select_ct = 1;
            is_select_own = 1;
            is_stop = 1;
        }
    }
    return 0;
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值