【C语言入门】猜数字游戏

本文详细介绍了如何为初学者设计一个小型的猜数字游戏,包括项目框架、菜单选项、用户输入处理、随机数生成以及游戏循环。作者通过实例展示了如何使用函数、条件语句和循环来实现游戏逻辑。
摘要由CSDN通过智能技术生成

前言:

初学者在经过一段时间的学习后,经常会需要一个代码量较小难度适中的项目练手,而“猜数字游戏”就是一个及其经典的小游戏项目,多次出现在各种书籍资料中,本篇文章就来讲解一下猜数字游戏的组成。

正文:

项目框架:

要写出一个项目,就要先构思这个项目该如何实现,接下来跟着笔者的脚步来一步步分析。

首先,一个游戏要有一个菜单,提供可先的选项,供用户选择。所以会有这样一部分代码

void menu()
{
	printf("**********************\n");
	printf("***** 1 开始游戏 *****\n");
	printf("***** 0 结束游戏 *****\n");
	printf("**********************\n");
}

可以看出改代码是用函数体的方式封装的,这样是为了使我们的代码可读性更高,同时也更高级。同时笔者在菜单中给出了两个选项,那么我们的代码就围绕这两个选项去写。可以看出有选项就要有选择,那么我们就要有一个变量来接我们的选择所以这里我们要定义一个变量

	int input = 0;

 有了变量,还要来把用户的选择接住

		scanf("%d", &input);

 当用户做出选择后,要有代码去承接后面不同选择所带来的不同效果,而效果也就是进入和退出游戏两种这里笔者用分支语句去写,当然也要考虑用户输入不合法的情况,所以0和1以外的情况也要考虑到如下

switch (input)
{
case 1:Game(); 
	break;
case 0:printf("游戏结束\n");
	break;
default:printf("输入有误,请重新输入\n");
}

当然游戏坑能玩一次不能尽兴要满足能够带开一次反复去使用的效果,这就要用到循环语句

do
{
	menu();
	scanf("%d", &input);
	switch (input)
	{
	case 1:Game(); 
		break;
	case 0:printf("游戏结束\n");
		break;
	default:printf("输入有误,请重新输入\n");
	}
} while (input);

这里用的是do-while循环,该循环的特点是先进行一次循环再进行条件判断,放到这里正合适。因为每次进入循环用户都要做出选择,所以这里笔者将菜单函数体放到了循环中,而且循环的条件是用户的选择值,当选择为0时结束循环,至此该项目的大体框架就完成了。

项目核心:

如果 上文框架是骨骼的话,接下来的内容就是血肉,用户想要猜数字,那么就得有数字可猜,还要使项目有可玩性,所以要猜的数就要是一个随机数,那么接下来就来设置随机数

	srand((unsigned int)time(NULL));
	int var = rand() % 101 ;

这行代码就是用 srand()来使rand()产生一个随机数种子,这里再对随机数对101取余,使得随机数范围为0-100。接下来就是对用户猜的数与随机数进行比较,后做出相应反应

	printf("请输入您猜的数字\n");
	scanf("%d", &guess);
	if (var == guess)
	{
		printf("猜对了!\n");
		break;
	}
	else if (var > guess)
	{
		printf("猜小了!\n");
	}
	else
	{
		printf("猜大了!\n");
	}
	

当然,用户猜一次就猜对的概率也是很小,所以这部分代码也要用循环结构去写

while (1)
{
	printf("请输入您猜的数字\n");
	scanf("%d", &guess);
	if (var == guess)
	{
		printf("猜对了!\n");
		break;
	}
	else if (var > guess)
	{
		printf("猜小了!\n");
	}
	else
	{
		printf("猜大了!\n");
	}
	
}

 至此Game()函数可写成如下

void Game()
{
	int guess = 0;
	int var = rand() % 101 ;
	while (1)
	{
		printf("请输入您猜的数字\n");
		scanf("%d", &guess);
		count++;
		if (var == guess)
		{
			printf("猜对了!\n");
			break;
		}
		else if (var > guess)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("猜大了!\n");
		}
		
	}
	
}

还要注意的是srand();函数要用到头文件<stdlib.h>,time();函数要用到头文件<time.h>

项目封装:

其实这种小量代码的项目用一个源文件就够了,但是为了了解大代码量的项目如何去写,这里对代码进行简单分化,我用了一个头文件,两个源文件如下

头文件:

名称:Game.h
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void menu();
void Game();

源文件:

名称:NumberGuessingGames
#include"Game.h"

int main()
{
	int input = 0;
	int choose = 0;
	srand((unsigned int)time(NULL));
	
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:Game(); 
			break;
		case 0:printf("游戏结束\n");
			break;
		default:printf("输入有误,请重新输入\n");
		}
	} while (input);

	return 0;
}

void menu()
{
	printf("**********************\n");
	printf("***** 1 开始游戏 *****\n");
	printf("***** 0 结束游戏 *****\n");
	printf("**********************\n");
}
名称:Game.c
#include"Game.h"

void Game()
{
	int guess = 0;
	int var = rand() % 101 ;
	while (1)
	{
		printf("请输入您猜的数字\n");
		scanf("%d", &guess);
		count++;
		if (var == guess)
		{
			printf("猜对了!\n");
			break;
		}
		else if (var > guess)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("猜大了!\n");
		}
		
	}
	
}

结语:

至此猜数字游戏告一段落,该项目代码已上传至资源,开源可取,各位也再思考一下如何丰富玩法,如控制猜数次数,计算胜率,等等。

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

衫裤_跑路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值