/*************************************************************************
> File Name:
demo06.c
> Author: FPF
> Description: 基于流程控制相关知识实现《猜拳游戏》
> Created Time: 2025年02月13日 星期四 14时09分35秒
************************************************************************/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
/**
* 需求:猜拳游戏1.0
* 步骤:
*
1. 选择对手
*
*
*
2. 自己出拳
3. 对手出拳
4. 双发比较
*/
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];
// 游戏是否退出,默认不退出
// 默认,选择对手操作是否重复,默认重复
// 默认,自己出拳操作是否重复,默认重复
// 自己出拳的序号
// 自己出拳的名字
// 对手出拳的序号
// 对手出拳的名字
// 游戏头部i
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;
}
综合案例:猜拳游戏
最新推荐文章于 2025-04-30 18:07:56 发布