想要用C代码完成一个简单游戏,需要分为三个部分,第一先要对整个游戏的逻辑进行分析,将其分为几个不同的功能模块;然后再根据每个模块的不同需求进行代码实现,最后将不同功能代码模块进行有序组合。
作为一个游戏首先要有一个菜单供玩家选择,而每个选项都代表不同的功能,这种多分支的票结构可以用switch语句很好实现,并能用其中的defalut语句进行玩家的错误操作提示。
每个游戏功能,都可以用一个函数进行封装,由于这个游戏非常简单,用一个函数足矣。
游戏的大体逻辑如下:
int main() { int input = 0; srand((unsigned int)time(NULL));//为了保证随机生成数起点不再变化,从而让rand函数生成的随机数均匀,故将其放在main函数内只调用一次。 do { menu(); printf("请选择:\n"); scanf("%d",&input); switch(input) { case 1: game(); break; case 0: printf("游戏结束\n"); break; default : printf("输入有误,请重新输入\n"); break; } }while (input); return 0; }
main函数是对整个游戏的逻辑进行实现,先给出一个大的框架,接着通过函数调用实现内部功能。
void menu() { printf("***********************************\n"); printf("*********** 1.play ***********\n"); printf("*********** 0.exit ***********\n"); printf("***********************************\n"); }
猜数字游戏,在猜之前需要生成一个随机的数字。
通过调用rand函数可以生成一个随机数。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int n = 0; int i = 0; scanf("%d",&n); printf("生成的%d个随机数分别为:\n",n); for (i=0; i<n; i++) { printf("%d ",rand()); } return 0; }
但在测试中发现,通过调用此函数,程序每次执行生成的“随机数”都是相同的。这是因为如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。那么随机种子相同,每次产生的随机数也会相同。
通过对rand函数的了解发现,再调用它之前,需要先调用srand函数生成一个随机数的起点。
生成随机数的起点可以通过time函数的调用来实现。time函数的返回值是当前时间点与计算机初始时间1970.01.01 00:00:00的差值。
可见,time函数的返回类型是一个长整形或者int类型,time函数的参数部分是一个名为timer的time_t *类型指针,在调用时可用NULL指针代替。
再来看看srand函数的参数类型:
srand需要传递的参数必须为unsiged int类型,所以需要对调用time函数返回的long/int进行强制类型转换。
void game () { int i = 0; int ret = 0; ret = rand()%100+1;//保证生成的随机数在1~100之间 printf("%d\n",ret); while (1) { printf("请输入你认为的数字:"); scanf("%d",&i); if (i>ret) { printf("猜大了\n"); } else if (i<ret) { printf("猜小了\n"); } else { printf("恭喜你!猜对了\n"); break; } } }
void menu() { printf("***********************************\n"); printf("*********** 1.play ***********\n"); printf("*********** 0.exit ***********\n"); printf("***********************************\n"); } void game () { int i = 0; int ret = 0; ret = rand()%100+1; printf("%d\n",ret); while (1) { printf("请输入你认为的数字:"); scanf("%d",&i); if (i>ret) { printf("猜大了\n"); } else if (i<ret) { printf("猜小了\n"); } else { printf("恭喜你!猜对了\n"); break; } } } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请选择:\n"); scanf("%d",&input); switch(input) { case 1: game(); break; case 0: printf("游戏结束\n"); break; default : printf("输入有误,请重新输入\n"); break; } }while (input); return 0; }
文章来源: 如何完成一个猜数字小游戏