服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言详细实现猜拳游戏流程

C语言详细实现猜拳游戏流程

2022-12-07 13:36这个需求做不了. C/C++

在学习了循环、分支、和函数之后,可以写一些简单的小游戏来给自己的编程之路增添一份乐趣。不仅提升了编码能力,还可以边学边玩,简直妙哉妙哉

一、游戏逻辑

1.打印选择菜单(1.play,0.exit)

2.提示玩家0、1、2 分别代表石头、剪刀、布

3.设置与计算机博弈次数

4.为计算机设置出拳(调用rand()函数生成0、1、2其中一个随机数)

5.玩家出拳

6.判断输赢

7.展示玩家和计算机出的拳

8.若退出游戏展示玩家胜负与平局信息

 

二、思维导图

C语言详细实现猜拳游戏流程

 

三、游戏过程

C语言详细实现猜拳游戏流程

 

四、代码分析

1.设置随机数的方法

C语言详细实现猜拳游戏流程

仅仅使用rand()函数来生成随机数是不行的,因为它每玩一次生成的随机数都是相同的,即随机数不随机,所以要通过srand()函数,种下一个随机种子,来产生随机数。根据时间每时每刻都是变化的,可以用time()时间函数来产生种子。

C语言详细实现猜拳游戏流程

C语言详细实现猜拳游戏流程

这里 time_t 的类型就是在C语言中被定义为长整型,而srand()函数的参数类型unsignedint(无符号整形),所以使用时要强制类型转换,而且**time()**函数,不需要设置参数,故用NULL代替。

2.设置计算机出拳的方法

comp = rand() % 3;

调用 rand() 函数 %3 就可以得到有个0~2之间的数值

3.判断输赢的方法

C语言详细实现猜拳游戏流程

据图可以看出只需要判断 (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<stdio.h>
#include<time.h>
#include<stdlib.h>
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("\a\n%d平 %d败 %d胜\n", draw, lose, win);
	return 0;
}

到此这篇关于C语言详细实现猜拳游戏流程的文章就介绍到这了,更多相关C语言猜拳游戏内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_63033419/article/details/124832992

延伸 · 阅读

精彩推荐
  • C/C++利用C++实现从std::string类型到bool型的转换

    利用C++实现从std::string类型到bool型的转换

    利用C++实现从std::string类型到bool型的转换。需要的朋友可以过来参考下。希望对大家有所帮助...

    C++教程网10152021-01-06
  • C/C++C++第11版本中的一些强大的新特性小结

    C++第11版本中的一些强大的新特性小结

    这篇文章主要介绍了C++第11版本中的一些强大的新特性小结,需要的朋友可以参考下...

    Kernel Panic6492021-03-18
  • C/C++浅谈C语言中的注释风格小结

    浅谈C语言中的注释风格小结

    今天小编就为大家分享一篇浅谈C语言中的注释风格小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    grey_csdn9742021-08-10
  • C/C++c++异常处理机制示例及详细讲解

    c++异常处理机制示例及详细讲解

    本篇文章主要是对c++异常处理机制示例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助...

    C++教程网7102021-01-15
  • C/C++vscode分享代码插件Polacode介绍

    vscode分享代码插件Polacode介绍

    这篇文章主要介绍了vscode分享代码插件Polacode的相关知识,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值...

    陈莺莺呀10402021-09-08
  • C/C++C语言实现扫雷游戏小项目

    C语言实现扫雷游戏小项目

    这篇文章主要为大家详细介绍了C语言实现扫雷游戏小项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    XATU的弟中之弟3582022-03-03
  • C/C++C++中正则表达式的使用方法详解

    C++中正则表达式的使用方法详解

    几乎所有的编程语言都支持正则表达式。 C++从C++11开始直接支持正则表达式。除了编程语言之外,大多数文本处理程序都使用正则表达式。本文将探讨正则...

    求则得之,舍则失之4772022-11-28
  • C/C++详解C++编程中的嵌套类的声明与其中的函数使用

    详解C++编程中的嵌套类的声明与其中的函数使用

    这篇文章主要介绍了C++编程中的嵌套类的声明与其中的函数使用,嵌套类即在一个类的范围内声明和编写另一个类,需要的朋友可以参考下...

    C++教程网9522021-03-23