如何完成一个猜数字小游戏

匿名 (未验证) 提交于 2019-12-03 00:26:01

想要用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; }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!