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

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

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述,于2022-01-07发表于Science,主要讨论了癌症中的三级淋巴结构(Tertiary Lymphoid Structures, TLS)及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称(中文)通讯作者介绍第一作者Ton N. Schumacher荷兰癌症研究所通讯作者之一通讯作者Daniela S. Thomm

oracle11.2g递归查询(树形结构查询)

转自: 一 二 简单语法介绍 一、树型表结构:节点ID 上级ID 节点名称二、公式: select 节点ID,节点名称,levelfrom 表connect by prior 节点ID=上级节点IDstart with 上级节点ID=节点值 oracle官网解说 开发人员:SQL 递归: 在 Oracle Database 11g 第 2 版中查询层次结构数据的快速