C语言之猜数字小游戏(附完整源码)

本文通过之前所学的C语言基础知识来设计一个简单的C语言猜数字小游戏,代码中包含分支语句、循环语句、函数等基础知识。

1. 猜数字游戏功能介绍

1.电脑会随机生成一个1-100的数字。
2.玩家用户开始猜数字。
    a> 猜大了,提醒猜大了,继续猜。
    b> 猜小了,提醒猜小了,继续猜。
    c> 猜对了,恭喜猜对了,结束游戏。
3.玩了一局如果想再玩一局可以继续玩,不用退出程序。

2. 猜数字之菜单

通过设计一个简易的菜单函数,来提醒玩家选择开始游戏还是结束游戏,选择 1 表示开始游戏,选择 0 表示结束游戏。

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

3. 猜数字之主函数(main)

int main() {

	int a = 0; // 1 0

	srand((unsigned int)time(NULL));

	do {
		menu();
		printf("请输入1/0:\n");
		scanf("%d", &a);
		switch (a) {
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}

	} while (a);

	return 0;
}

        要使结束一把游戏可以继续玩而无需退出程序,所以我们需要用到循环语句,而第一局无论玩与否都需要给玩家显示出菜单进行提示,故使用do...while()循环语句效果最佳。
        我们选择1表示开始游戏,选择0表示结束游戏,而选择其他则默认输入错误,故而有多种选择,即是一种多分支语句,这里我们选择switch分支语句。

4. 猜数字之game函数

void game() {

	int random_num = rand() % 100 + 1;

	int input = 0;
	while (1) {
		printf("请输入你猜的数字:\n");
		scanf("%d", &input);
		if (input > random_num) {
			printf("猜大了,请重新猜\n");
		}
		else if (input < random_num) {
			printf("猜小了,请重新猜\n");
		}
		else {
			printf("恭喜您猜对了\n");
			Sleep(2000);
			system("cls");
			printf("上一把的数字为:%d\n", random_num);
			break;
		}
	}

}

game函数是用来完成游戏的主要功能,即功能介绍中的1、2点。
        1. 电脑随机生成一个数字  ——  我们只需要调用rand()函数即可。
        2.玩家用户开始猜数字  ——  定义一个input变量来表示玩家猜的数字,而没猜对需要继续猜,故这里也需要用到一个循环语句。玩家猜的数字需要与电脑产生的随机数字进行比较,有猜大、猜小、猜对三种选择情况,要进行判断比较所以这里选择if的多分支语句而不是switch语句。

到此猜数字小游戏的所有功能就实现了,下面来讲解上述代码中用到的拓展知识

5. 涉及的拓展知识

5.1 rand()函数

        rand()函数可以生成随机数,随机数的范围是0-32767之间,使用rand()函数需要包含头文件stdlib.h (注:cstdlib是C++中的头文件)。我们在调用rand时必须先调用srand 函数,否则每次运行程序的随机数是一样的。
        rand()%100是让电脑产生的随机数除以100取余,使得产生的随机数在0-99之间,而rand()%100+1则使随机数的范围在1-100之间,最终达到猜数字小游戏的需求。

5.2 srand()函数

        srand()函数是一个初始化随机数的生成器,即对于调用srand中使用的每个不同值,伪随机数生成器可以预期在后续调用rand()函数中生成不同的连续结果。srand()函数在整个程序中只需要调用一次即可。
        为了生成类似随机数的数字,要给srand传递一个变化的值。而恰好计算机上时间是时刻变化着的,所以我们给srand函数赋一个time函数 —— time函数可以返回一个时间戳。

srand((unsigned int)time(NULL));

5.3 Sleep函数

        Sleep函数的功能类似于暂停,即让程序等待一定时间(单位:毫秒)再继续执行后续代码,Sleep(2000)即让程序等待2秒。

6. 完整代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>

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

void game() {

	int random_num = rand() % 100 + 1;
	int input = 0;
	while (1) {
		printf("请输入你猜的数字:\n");
		scanf("%d", &input);
		if (input > random_num) {
			printf("猜大了,请重新猜\n");
		}
		else if (input < random_num) {
			printf("猜小了,请重新猜\n");
		}
		else {
			printf("恭喜您猜对了\n");
			Sleep(2000);
			system("cls");
			printf("上一把的数字为:%d\n", random_num);
			break;
		}
	}

}

int main() {

	int a = 0; // 1 0
	
	srand((unsigned int)time(NULL));
	
	do {
		menu();
		printf("请输入1/0:\n");
		scanf("%d", &a);
		switch (a) {
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}

	} while (a);

	return 0;
}

程序运行效果如下图:

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值