详解C语言实现猜数字游戏

 更新时间:2022年01月18日 15:14:17   作者:build.code  
这篇文章主要为大家介绍了C语言实现猜数字游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>

前言:本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法。

一:猜数字游戏基本介绍&对程序预期

.猜数字游戏,顾名思义,就是系统随机给出一个数字,玩家对这个数字进行猜测,如果玩家猜测的数字大于给出的数字,则系统会提示猜大了,如果玩家猜测的数字小于给出的数字,则系统会提示猜小了,这样逐步缩小猜测范围,直到玩家猜对为止。

2.程序预期:猜数字结束后,玩家如果猜对了的话可以继续游戏,也可以退出游戏

二:程序设计思路

1.总体思路:

首先,实现游戏功能必须要有一个菜单来提示玩家如何进行操作。其次,为了代码具有可读性,可以将游戏部分函数和菜单部分函数作为两个子函数,然后在主函数调用他们。然后我们为了实现玩家可以多次游戏可以使用循环。

综上所述,我们应该设计两个子函数:菜单函数和游戏函数。一个主函数

2.菜单部分函数:

菜单部分函数

void menu()
{
	
	printf("***********************************************\n");
	printf("*************************1play*****************\n");
	printf("*************************0exit*****************\n");
	printf("***********************************************\n");
}

菜单函数设计相对简单,只是为了提示玩家如何操作

3.游戏部分函数

void game()
{
	srand((unsigned int)time(NULL));
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("猜数字\n");
		int guess = 0;
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜对了\n");
			break;
		}
		
	}
}

①在游戏函数部分,首先要生成随机数,生成随机数的方法如下:

C语言中提供了生成随机数的函数rand函数

rand函数会返回一个0到RAND-MAX的随机整数,使用这个函数需要包含头文件<stdlib.h>

但是rand函数每次生成的随机数相同,所以只用rand函数不够,所以要使用srand()函数增加随机性 

后一句中说明在使用rand函数前要定义一个srand()函数

如画线句所示,srand函数的作用就是一个随机数的生成的种子。

而且需要一个无符号整型,在srand函数中括号输入一个随机数字即可生成随机数,时间正是一个一直在变化的数字。

在这里提出一个时间戳的概念:时间戳是指格林威治时间1970年01月01日00时00分00秒 (北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

因为srand需要的参数是无符号类型,所以对time进行强制类型转换。time后不需要参数,所以给他一个空指针。

使用srand((unsigned int)time(NULL))

输入time返回一个时间戳

需要一个头文件<time.h>

因为给出的随机数范围太大,所以需要限定随机数范围

如下:int ret = rand()%100+1,将随机数限定在0-100区间,便于猜测

②:猜数字环节

利用while循环来逐步缩小猜测范围,当猜测的数字等于随机数时提示”猜对了“。

4.主函数部分

int main()
{
	int input = 0;
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("输入错误,请重新输入");
		}
	} while (input);
	return 0;
}

主函数中使用了switch语句,和do-while语句

主要目的是为了玩家选择是否进入游戏

5.代码主体

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<time.h>void menu(){printf("***********************************************\n");printf("*************************1play*****************\n");printf("*************************0exit*****************\n");printf("***********************************************\n");}void game(){srand((unsigned int)time(NULL));int ret = rand() % 100 + 1;while (1){printf("猜数字\n");int guess = 0;scanf("%d", &guess);if (guess > ret){printf("猜大了\n");}else if (guess < ret){printf("猜小了\n");}else{printf("猜对了\n");break;}}}int main(){int input = 0;do{menu();scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("输入错误,请重新输入");}} while (input);return 0;}#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
void menu()
{
	printf("***********************************************\n");
	printf("*************************1play*****************\n");
	printf("*************************0exit*****************\n");
	printf("***********************************************\n");
}
void game()
{
	srand((unsigned int)time(NULL));
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("猜数字\n");
		int guess = 0;
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜对了\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("输入错误,请重新输入");
		}
	} while (input);
	return 0;
}

三:总结

此程序主要为了熟悉循环和分支的具体用法,并且学会利用时间戳和rand函数生成随机数。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • OpenCV实现车牌字符分割(C++)

    OpenCV实现车牌字符分割(C++)

    这篇文章主要为大家详细介绍了OpenCV实现车牌字符分割,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 纯C语言实现火车售票系统

    纯C语言实现火车售票系统

    这篇文章主要为大家详细介绍了纯C语言实现火车售票系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 浅谈C/C++ 语言中的表达式求值

    浅谈C/C++ 语言中的表达式求值

    下面小编就为大家带来一篇浅谈C/C++ 语言中的表达式求值。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Qt实现实时鼠标绘制图形

    Qt实现实时鼠标绘制图形

    这篇文章主要介绍了Qt中QGraphicsView架构下如何实现实时鼠标绘制图形,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-02-02
  • C语言实现abs和fabs绝对值

    C语言实现abs和fabs绝对值

    这篇文章主要介绍了C语言实现abs和fabs绝对值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C++超详细分析讲解内联函数

    C++超详细分析讲解内联函数

    为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数
    2022-06-06
  • C语言中带头双向循环链表基本操作的实现详解

    C语言中带头双向循环链表基本操作的实现详解

    无头单向非循环链表结构简单,一般不会单独用来存数据。而带头双向循环链表的结构较为复杂,一般用在单独存储数据。本文将介绍带头双向循环链表的基本操作,需要的可以参考一下
    2022-11-11
  • 实例详解C++中指针与引用的区别

    实例详解C++中指针与引用的区别

    引用是C++引入的重要机制(C语言没有引用),它使原来在C中必须用指针来实现的功能有了另一种实现的选择,在书写形式上更为简洁,那么引用的本质是什么,它与指针又有什么关系呢?这篇文章主要给大家介绍了关于C++中指针与引用的区别,需要的朋友可以参考下
    2021-07-07
  • QT中线程池QThreadPool类概念和使用方法详解

    QT中线程池QThreadPool类概念和使用方法详解

    这篇文章主要为大家介绍了QT中线程池QThreadPool类概念和使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C语言中getchar()与putchar()函数详解

    C语言中getchar()与putchar()函数详解

    本文主要介绍了C语言中getchar()与putchar()函数详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01

最新评论