运用分支结构与循环结构写一个猜拳小游戏

2024-05-09 10:52

本文主要是介绍运用分支结构与循环结构写一个猜拳小游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面我们运用平常所学的知识来写一个小游戏,这样能够加强我们学习的趣味性,并且能够更加的巩固我们所学的知识。


游戏代码:

直接放代码:(手势可以使用数字来代替,比如0对应石头,1对应剪刀,2对应布)

#include<time.h>
#include<stdio.h>
#include<stdlib.h>int human;//人类出拳
int comp;//计算机出拳
int win_no;//胜利次数
int lose_no;//失败次数
int draw_no;//平局次数char *ha[] = {"石头",  "剪刀", "布"};
//游戏初始化
void initialize()
{human = 0;comp = 0;win_no = 0;lose_no = 0;draw_no = 0;srand(time(NULL));//随机生成种子printf("猜拳游戏开始\n");
}
//进行玩家输入和机器输入
void jyanken()
{int i = 0;comp = rand() % 3;do{printf("\a\n石头剪刀布……");for(;i < 3; i++){printf("(%d)%s", i, ha[i]);}printf(":");scanf("%d", &human);}while(!(human >= 0 && human <= 2));}
/*更新胜利/失败/平局的次数*/
void count_no(int result)
{switch(result){case 0:draw_no++; break;case 1:lose_no++; break;case 2:win_no++;  break;default:break;}
}/*显示判断结果*/
void disp_result(int result)
{switch(result){case 0:printf("平局");   break;case 1:printf("你输了"); break;case 2:printf("你赢了"); break;default:printf("错误\a"); break;}
}/*确认是否再次挑战*/
int comfirm_retry()
{int x;printf("再来一次吗……(1)是 (0)否");scanf("%d", &x);return x;
}int main()
{int judge;//胜负int retry;initialize();//游戏初始化do{jyanken();//运行猜拳游戏/*显示计算机和我选出的手势*/printf("我出%s, 你出%s.\n", ha[comp], ha[human]);judge = (human - comp + 3) % 3;count_no(judge);//统计胜负次数disp_result(judge);//显示胜负retry = comfirm_retry();}while(retry != 0);printf("胜:%d\n负:%d\n平局:%d", win_no, lose_no, draw_no);return 0;
}

全局变量的定义及其原因

首先,我们先进行设置全局变量,这个变量从程序的开始到结束都是始终存在的,设置全局变量的目的是因为,在使用函数分装代码时,大部分都能用到这些变量。

initialize()函数

接着创建initialize();函数进行初始化,此函数的功能是讲这些全局变量的值都初始化为0,并且使用srand()函数和time()函数生产一个伪随机数,也就是种子,这两个函数大家可以自行搜索一下。

jyanken();函数

紧接着我们创建jyanken();函数,此函数的功能是实现机器和玩家的出拳。

具体的实现方法:

comp = rand() % 3; rand()是上面生成种子的值,我们用它进行求余,可以得到余数为0,1,2的值,这些值可以表示机器所出的手势,之后进入do循环,利用for语句中的printf函数来显示玩家的选择界面,使用scanf函数来输入human的值,也就是我们所要选择的手势,在whlie语句内要确保输入的human的值在0—2内。

count_no()函数和disp_result()函数

接下来我们创建count_no()函数,此函数使用来实现对游戏进行胜局/败局/平局,局数的统计,我们利用形参result所谓判断胜负的依据,如何作为依据我们最后再来说明。

之后我们创建disp_result();函数,用来显示游戏对局的结果。函数功能的实现与上面的函数一致

comfirm_retry()函数

最后我们创建comfirm_retry();函数,功能是确认玩家是否继续进行游戏,函数的实现是得到一个你输入的返回值,该值将用于在主函数中判断跳出do循环的条件。

main函数中变量judge的作用:

在主函数中我们创建judge变量,这样对其进行赋值:judge = (human - comp + 3) % 3;

judge作为实参传给函数后能作为判断依据的原因

并且把这个变量作为实参传给count_no(),disp_result()函数,下面将解释为何这个实参的计算结果能作为判断的依据:

humancomphuman-comp(human-comp+3)%3
0000
1100
2200
玩家失败
humancomphuman-comp(human-comp+3)%3
02-21
1011
2111
玩家胜利
humancomphuman-comp(human-comp+3)%3
01-12
12-12
2022

游戏对局结果的显示:

使用printf函数,进行格式化输出,显示出win_no, lose_no, draw_no的结果。

这篇关于运用分支结构与循环结构写一个猜拳小游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973210

相关文章

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

CSS引入方式和选择符的讲解和运用小结

《CSS引入方式和选择符的讲解和运用小结》CSS即层叠样式表,是一种用于描述网页文档(如HTML或XML)外观和格式的样式表语言,它主要用于将网页内容的呈现(外观)和结构(内容)分离,从而实现... 目录一、前言二、css 是什么三、CSS 引入方式1、行内样式2、内部样式表3、链入外部样式表四、CSS 选