前言:
初学者在经过一段时间的学习后,经常会需要一个代码量较小,难度适中的项目练手,而“猜数字游戏”就是一个及其经典的小游戏项目,多次出现在各种书籍资料中,本篇文章就来讲解一下猜数字游戏的组成。
正文:
项目框架:
要写出一个项目,就要先构思这个项目该如何实现,接下来跟着笔者的脚步来一步步分析。
首先,一个游戏要有一个菜单,提供可先的选项,供用户选择。所以会有这样一部分代码
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");
}
}
}
结语:
至此猜数字游戏告一段落,该项目代码已上传至资源,开源可取,各位也再思考一下如何丰富玩法,如控制猜数次数,计算胜率,等等。