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;
}