阿哇旭的第一个小游戏来了~捣蛋~(C语言)

目录

引言

1.开发环境

2.游戏介绍

3.生成随机数

3.1 rand()函数

3.2 srand()函数

3.3 time()函数

4.主体思路

4.1 选择模块

4.2 菜单模块

4.3 游戏模块

 5.关机奖励

5.1 system()函数

5.2 关机指令 

5.3 strcmp()函数

5.4 取消关机指令 

6.完整代码


引言

        阿哇旭作为一个小白,一个简单的C语言小游戏无非提高了我学习C语言的兴趣,相信大家也是如此。接下来,我将用到之前介绍的分支与循环,为大家带来我设计这个猜数字小游戏的方法与思路。

        话不多说,让我们一起来看看吧!

1.开发环境

        集成开发环境(IDE):Visual studio 2022,若要使用scanf函数,请添加如下注释:

#define _CRT_SECURE_NO_WARNINGS
//忽略scanf函数的安全警告

2.游戏介绍

1.电脑通过随机数生成器生成一定区间的随机数段(例:1~100);

2.玩家输入要猜测的数字,在此过程中,电脑根据输入数字的大小给出猜大了、猜小了及猜对了的文字反馈;

3.玩家共有五次的猜测机会,机会用完则会有关机惩罚;

4.输入指定的自定义密钥(例:“我是猪”),即可取消关机程序。

本次的重点,如何实现随机数的生成?相信知道这个知识点的小伙伴已经迫不及待了。

3.生成随机数

        在主函数中,为实现真正的随机而引用了时间戳的概念。

        什么是时间戳?

一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。通俗的讲,就是表示某一刻的时间。

        时间戳的计算方法

格林威治时间(1970年01月01日00时00分00秒)起至现在的总秒数。

        根据时间戳的概念,可以看出每时每刻的时间戳都是的独一无二的,配合函数使用来实现真正意义上的随机。

3.1 rand()函数

        用于生成随机数,rand 函数会返回一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器上是32767

函数名:rand

头文件:

函数原型:int rand(void);

参数:无参数

返回值:返回生成的随机数

在本游戏中生成1~100的随机数

对rand取余就是0~99

rand()%100+1的范围就是1~100;

3.2 srand()函数

        初始化随机数的发生器,程序中在调用 rand 函数之前先调用 srand 函数,通过 srand 函数的参数 seed 来设置 rand 函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。

函数名:srand

头文件:

函数原型:void srand(unsigned seed);

参数:unsigned seed 要设置随机时间的种子,其值为整数

返回值:无返回值

3.3 time()函数

        获取系统时间

函数名:time

头文件:

函数原型:long time(long *t);

参数:当前系统时间

返回值:返回当前系统时间

补充:

   (1) t1=time(NULL)或t1=time(0)
      将空指针传递给time()函数,并将time()返回值赋给变量t1;
   (2) time(&t2)
      将变量t2的地址作为实参传递给time()函数,函数自动把结果传递给t2,不需要额外的赋值语句 。

        主要代码如下:

srand((unsigned)time(NULL));
int ret = rand() % 100 + 1;/*随机生成1~100之间的数字*/

4.主体思路

1.首先设计游戏菜单;

2.让玩家选择 1.开始游戏    0.退出游戏;

3.若输入其他数字则提示玩家重新输入。

4.1 选择模块

int main()
{
	system("cls");
	system("color 70");
	srand((unsigned)time(NULL));
	int num = 0;
	do
	{
		menu();
		printf("请输入游戏选项数字:\n");
		scanf("%d", &num);
		switch (num)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("选择错误,请重新选择\n");
		}
	} while (num);
		
	return 0;
}

4.2 菜单模块

        该模块不需要返回任何值,即用无类型函数 void 

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

        阿哇旭现在的能力有限,只能设计简单的选择菜单,还希望多多包涵,如果有大佬帮助我设计实现就更好了。

4.3 游戏模块

玩家进行数字的猜测,共有五次的猜测机会,机会用完则会有关机惩罚。

          主要代码如下:

/*游戏函数*/
void game()
{
	int count = 5;/*可以猜测的次数*/
	int guess = 0;/*玩家猜测的数字*/
	int ret = rand() % 100 + 1;/*随机生成1~100之间的数字*/
	while (count)
	{
		printf("\n请输入要猜测的数字:\n");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("数字猜大了\n");
		}
		else if (guess < ret)
		{
			printf("数字猜小了\n");
		}
		else
		{
			printf("恭喜你,数字猜对了,来个奖励\n");
			printf("请输入密钥,取消关机程序");

			//Shutdown();/*可以取消该处注释,不论是猜测机会用完还是猜中数字,均执行关机指令*/
		}
		count--;/*每猜测一次,次数减少一,直至为零*/
		printf("你还有%d次机会\n", count);
	}
	if (count == 0)
	{
		Shutdown();
	}
}

 5.关机奖励

目录

5.1 system()函数

       用于发出一个DOS命令

函数名:system

头文件:

函数原型:int system(const char *command);

参数:char *command为需要执行的DOS命令

返回值:命令执行成功返回0,执行失败返回-1

5.2 关机指令 

system("shutdown -s -t 60");
/*system()执行windows系统的命令,定时60秒关机*/

        若想去整你的朋友,可以将60改为0,猜中数字立即关机,但不要顺着网线来打我呀。

 5.3 strcmp()函数

        比较两个字符串的大小

函数名:strcmp

头文件:

函数原型:int strcmp(const char *str1,const char *str2);

参数:str1和str2为要比较的字符串

返回值:str1 >  str2,返回 1;

            str1 <  str2,返回 -1;

            str1 == str2,返回 0。

 5.4 取消关机指令 

        当然,可以取消关机指令,但如果是立即关机,我也没办法咯。

system("shutdown -a");
/*取消关机*/

         主要代码如下:

/*关机函数*/
int Shutdown()
{
	char arr[20] = { 0 };
	/*system()执行windows系统的命令,为定时关机*/
	system("shutdown -s -t 60");
again:
	printf("你的电脑将在60秒后关机\n");
	printf("请输入密钥,取消关机程序:\n");
	scanf("%s", &arr);
	/*利用strcmp函数判断输入的字符是否为指定密钥*/
	if (strcmp(arr, "我是猪") == 0)
	{
		/*取消关机*/
		system("shutdown -a");
		printf("已取消关机,感谢游玩!");
		printf("\n");
	}
	else
	{
		goto again;/*使用goto语句实现迭代*/
	}
}

6.完整代码

我将代码分装在两个 标头.c 文件和一个 标头.h 文件中,可以让代码更清晰,后期可维护性更高。

该部分我放在test.c文件中,用作游戏逻辑的实现。 

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
/*游戏菜单*/
void menu()
{
	printf("******** 选择菜单 ********\n");
	printf("******** 1.play ********\n");
	printf("******** 0.exit ********\n");
	printf("************************\n");
}

int main()
{
	system("color 70");/*美化程序运行界面*/
    /*使用time函数的返回值设置种子*/
    /*因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换*/
	srand((unsigned)time(NULL));
		int num = 0;
	do
	{
		menu();
		printf("请输入游戏选项数字:\n");
		scanf("%d", &num);
		switch (num)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("选择错误,请重新选择\n");
		}
	} while (num);
		
	return 0;
}

 该部分我放在game.h文件中, 用作函数的声明

#pragma once

//关机函数声明
int Shutdown();

//游戏函数声明
void game();

该部分我放在game.c文件中, 用作函数的实现。

/*关机函数*/
int Shutdown()
{
	char arr[20] = { 0 };
	/*system()执行windows系统的命令,为定时关机*/
	system("shutdown -s -t 60");
again:
	printf("你的电脑将在60秒后关机\n");
	printf("请输入密钥,取消关机程序:\n");
	scanf("%s", &arr);
	/*利用strcmp函数判断输入的字符是否为指定密钥*/
	if (strcmp(arr, "自定义密钥") == 0)
	{
		/*取消关机*/
		system("shutdown -a");
		printf("已取消关机,感谢游玩!");
		printf("\n");
	}
	else
	{
		goto again;/*使用goto语句实现迭代*/
	}
}

/*游戏函数*/
void game()
{
	int count = 5;/*可以猜测的次数*/
	int guess = 0;/*玩家猜测的数字*/
	int ret = rand() % 100 + 1;/*随机生成1~100之间的数字*/
	while (count)
	{
		printf("\n请输入要猜测的数字:\n");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("数字猜大了\n");
		}
		else if (guess < ret)
		{
			printf("数字猜小了\n");
		}
		else
		{
			printf("恭喜你,数字猜对了,来个奖励\n");
			printf("请输入密钥,取消关机程序");

			//Shutdown();/*可以取消该处注释,不论是猜测机会用完还是猜中数字,均执行关机指令*/
		}
		count--;/*每猜测一次,次数减少一,直至为零*/
		printf("你还有%d次机会\n", count);
	}
	if (count == 0)
	{
		Shutdown();
	}
}

        至此,整个游戏的方法与思路讲解完了,快去邀请你的好朋友来玩吧。也请动动你们的手指点赞+收藏,若有不足,还望各位指正!这将对我有很大的帮助。

你可能感兴趣的:(游戏,游戏,c语言,开发语言)