最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
C语言详细实现猜拳游戏代码示例
时间:2022-06-25 04:29:08 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下C语言详细实现猜拳游戏代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一、游戏逻辑
1.打印选择菜单(1.play,0.exit)
2.提示玩家0、1、2 分别代表石头、剪刀、布
3.设置与计算机博弈次数
4.为计算机设置出拳(调用rand()函数生成0、1、2其中一个随机数)
5.玩家出拳
6.判断输赢
7.展示玩家和计算机出的拳
8.若退出游戏展示玩家胜负与平局信息
二、思维导图
三、游戏过程
四、代码分析
1.设置随机数的方法
仅仅使用rand()函数来生成随机数是不行的,因为它每玩一次生成的随机数都是相同的,即随机数不随机,所以要通过srand()函数,种下一个随机种子,来产生随机数。根据时间每时每刻都是变化的,可以用time()时间函数来产生种子。
这里 time_t 的类型就是在C语言中被定义为长整型,而srand()函数的参数类型unsignedint(无符号整形),所以使用时要强制类型转换,而且**time()**函数,不需要设置参数,故用NULL代替。
2.设置计算机出拳的方法
comp = rand() % 3;
调用 rand() 函数 %3 就可以得到有个0~2之间的数值
3.判断输赢的方法
据图可以看出只需要判断 (human - comp + 3) % 3 的值是 0、1 还是 2 就可以判断是平局、计算机赢还是电脑赢。
代码示例:
void disp_result(is_winer) { switch (is_winer) { case 0: printf("平局n"); draw++;//平局次数加1 break; case 1: printf("计算机赢n"); lose++;//失败次数加1 break; case 2: printf("玩家赢n"); win++;//获胜次数加1 break; } }
is_winer 中存放的是 (human - comp + 3) % 3 的值,利用 switch 语句判断其结果,再输出对应的语句。变量draw、lose、win是用来统计玩家战绩信息。
4.玩家猜拳
控制玩家输入的范围是0~2之间的数值
倘若玩家输入的数值不是0~2之间的,程序就无法正常运行了,所以要控制范围。
可以利用do while循环来达到此目的。
代码示例:
do { scanf("%d", &human);//玩家出拳 printf("n"); if (human < 0 || human > 2) { printf("输入错误,重新输入n"); } is_winer = (human - comp + 3) % 3; disp_result(is_winer);//判断输赢的函数 Dishumanplayer(human);//展示玩家出的拳 Discomplayer(comp);//展示计算机出拳 } while (human < 0 || human > 2);//控制玩家输出范围是0~2
if 语句的作用是用来当玩家输入的数值超过了范围时,对其进行提示输入错误。
五、完整代码
#include#include #include int draw = 0;//统计平局数 int lose = 0;//统计失败数 int win = 0;//统计获胜数 int human = 0;//玩家手势 int comp = 0;//计算机手势 int is_winer = 0;//判断胜负 void menu() { printf("****************************************n"); printf("*************** 猜拳游戏 ***************n"); printf("****************************************n"); printf("*************** 1.play ****************n"); printf("*************** 0.exit ****************n"); printf("****************************************n"); } void Displayer(int comp, int human)//展示计算机和玩家出拳的函数 { printf("计算机出的是:"); switch (comp) { case 0: printf("石头n"); break; case 1: printf("剪刀n"); break; case 2: printf("布n"); break; } printf("玩家出的是:"); switch (human) { case 0: printf("石头n"); break; case 1: printf("剪刀n"); break; case 2: printf("布n"); break; } } //判断输赢 void disp_result(is_winer) { switch (is_winer) { case 0: printf("平局n"); draw++;//平局次数加1 break; case 1: printf("计算机赢n"); lose++;//失败次数加1 break; case 2: printf("玩家赢n"); win++;//获胜次数加1 break; } } void game() { printf("(0)-石头,(1)-剪刀,(2)-布n"); printf("猜拳游戏开始!!!n"); int number = 0;//猜拳次数 printf("请选择猜拳次数:"); scanf("%d", &number); while (number) { comp = rand() % 3;//计算机出拳 printf("玩家出拳:"); do { scanf("%d", &human);//玩家出拳 printf("-----------猜拳游戏-------------n"); if (human < 0 || human > 2) { printf("输入错误,重新输入n"); } is_winer = (human - comp + 3) % 3; disp_result(is_winer);//判断输赢的函数 Displayer(comp, human);//展示出拳 } while (human < 0 || human > 2);//控制玩家输出范围是0~2 number--; } } int main() { srand((int)time(NULL)); int input = 0; do { menu(); printf("选择玩游戏还是退出游戏!!!n"); printf("请选择:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏n"); break; default: printf("选择错误,重新选择n"); break; } } while (input); //展示玩家成绩 printf("an%d平 %d败 %d胜n", draw, lose, win); return 0; }
相关文章
- 《无限暖暖》织衣蛛获得方法 12-26
- 《无限暖暖》美食家蜜蜂获得方法 12-26
- 《无限暖暖》泳镜蝽获得方法 12-26
- 《无限暖暖》芭蕾豆娘获得方法 12-26
- 《无限暖暖》刺绣蛾获得方法 12-26
- 《无限暖暖》尖帽仙获得方法 12-26