学习C语言的第一个小游戏实现——猜数字

  嗨!大家好,经过之前的三章学习,我们已经基本掌握了什么是C语言、C语言中的数据类型以及分支与循环语句了。那既然学习了那么多知识,我们也是时候进行运用了。接下来这篇文章,我将会带领着大家来做一个比较简单的小游戏:

  “猜数字小游戏!!!”

目录

设计思路

代码实现

运行检验


设计思路

  那在做这个游戏之前,我们得先想好,它是什么样子的一个游戏。首先,作为一个游戏,肯定得需要一个菜单供玩家选择吧,里面至少应该有“开始游戏”“退出游戏”这样的选项才符合逻辑。所以我们需要做的第一步就是先在屏幕上打印一个菜单。

  那有了菜单以后,玩家会进行选择,如果他选了开始游戏,那么游戏正常进行。若他选择了退出游戏,那程序应该结束掉。所以,这里我们应该运用到选择语句来实现。还有,有些时候玩完一把游戏,我还想再玩一把。所以,程序应该只有在选择“退出游戏”的时候才结束,否者就会一直循环。

  那有了以上思路以后,我们就得考虑游戏的实现了,作为一个猜数字游戏。首先得由计算机生成一个随机的数,而且这个数生成以后,在这一局游戏中不会发生变化。不然很难猜得中。还需要考虑数字的范围,太大了,游戏难度太高。太小了,没什么可玩性。中和来看,我们可以考虑1~1000的范围,比较合理。

  那在计算机生成一个数字以后,我们就得提醒玩家进行猜测,通过键盘输入数字。然后将玩家输入的数字与电脑生成的数字进行对比。如果相同,那玩家胜利。如果不同???我们得考虑玩家不太可能一次性猜对,所以我们可以多给玩家几次机会,并且提供一些提示。具体允许玩家进行多少次,由你来决定。

  大概的一个设计思路就是这样,具体的细节我们就在代码的实现中进行探索和修改。

代码实现

  第一步,打印一个菜单,而且是可以进行循环的。考虑到无论如何,菜单都是优先打印的,所以,我们采用do...while循环来进行。

  这里,我们使用了函数的概念,大家可以理解为“printmenu()”出现的时候,代码就会跳到它的位置进行运算,所以这样我们就成功打印出了一个菜单。

   既然菜单打印出来了,那么我们就该为玩家提供选择的可能性,创建一个整型变量来接受玩家的选择:

  通过对整型变量“input”的结果判定来进行程序的不同执行方式。这里将input放入while循环的判断中,是当玩家选择0时,程序跳出do...while循环,从而结束游戏。否则,无论玩家选择什么,游戏都会不断的刷新开始。

  这里采用“puts”函数打印,是为了在这个阶段进行检验代码的有效性,避免后面写了一大堆,结果前面出错了就不好了。

  好了接下来,我们就设计一个“game”函数来实现,游戏内部的变化。

&emsp;&emsp;可以看到,我们通过“rand()”这个函数随机生成的数,是永恒不变了。rand函数的包含在头文件“<stdilb.h>”中,使用的时候需要引用一下。它的作用是使得计算机自动生成一个数。

&emsp;&emsp;而且,这里rand所生成的数其实并不是41,它远比41要大很多,因为我们给它的变量盒子是int类型的,所以它经过舍却多余的值,每次超过int类型的极限就会减去一个int的范围,所得到的结果才是41。于是,我们做出以下修改:

&emsp;&emsp;首先是对rand函数进行一个范围确定,然后:

&emsp;&emsp;在main函数的开头,使用srand函数来重置不同的答案。因为要每一局游戏的答案是唯一的,所以就不能将srand函数放入循环当中。time函数的头文件是<time.h>。

运行检验

&emsp;&emsp;好了,经过以上代码的书写,我们就成功制作了一个猜数字小游戏,接下来,我们来试验一下:

&emsp;&emsp;可以看到,我们的游戏运行很成功,那这就没什么问题了。大家可以开始动手做起来了!!!

&emsp;&emsp;下面附源代码:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void printmenu(void)
{
	puts("**********************************");
	puts("**********************************");
	puts("***********  1.开始游戏  *********");
	puts("***********  0.退出游戏  *********");
	puts("**********************************");
	puts("**********************************");
}

void game(void)
{
	int n = rand() % 1000 + 1;//rand函数是随机生成一个数的意思
	                         //通过%上1000+1,将范围控制在1~1000里。
	int input = 0;//创建一个局部变量,接受玩家的猜测
	while (1)//进行一个死循环,直到玩家猜对了,才结束
	{
		printf("你猜测的数字是>:");
		scanf("%d", &input);
		if (input < n)
		{
			puts("笨蛋,猜小了!!!");
		}
		else if (input > n)
		{
			puts("傻瓜,猜大了!!!");
		}
		else
		{
			puts("恭喜你,答对了!!!");
			break;
		}
	}
}

int main(void)
{
	int input = 0;
	srand((unsigned int)time(NULL));//通过srand重置起点的方式来进行不同的答案生成
	                                //但是srand也是近乎固定的,于是使用time函数来进行变化取值
	do
	{
		printmenu();
		printf("玩家请选择>:");
		scanf("%d", &input);
		if (input == 1)
		{
			puts("游戏开始!!!");
			game();
		}
		else if (input == 0)
		{
			puts("游戏结束!!!");
		}
		else
		{
			puts("输入错误,请重新输入!!!");
		}
	} while (input);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值