游戏要求:
电脑随机生成一个1~100之间的数字
猜数字
玩家猜小了,电脑会告诉:猜小了
玩家猜大了,电脑会告诉:猜大了
玩家猜对了,电脑会告诉:恭喜你,猜对了
进入游戏,我们看到的应该是菜单界面,
####################
######1.PLAY########
######0.DEFEA#######
####################但是考虑到游戏不止玩一次,所以菜单应该在游戏结束后还会继续出现,所以应该有一个循环,while for do 三种循环的话选择do while 循环
然后我们上面的这个菜单界面我们应该装在一个函数menu( )中 这是一个好的习惯,把某个东西打包,然后使用。
void menu() { printf("####################n"); printf("######1.PLAY########n"); printf("###T##0.DEFEA#######n"); printf("####################n"); }
出来菜单后应该是让玩家选择,所以 所以应该是“请输入1或0进行选择,然后再输入一个数字”
便是这样
#includeint main() { int n = 0; do { menu(); printf("请输入1/0选择"); scanf("%d", &n); } while (); }
输入完数字后 我们边可以用Switch语句进行 *** 作
如下:
上述便是小游戏的大致轮廓,下面我稍微对这个轮廓大致做一个解释。
我们可以观察到我们这个游戏的循环条件便是n的值,因为循环中“0表示假,非0表示真”
所以我们只要不输入0,那么循环便可以一直进行,则游戏也可以一直进行。然后代码中的default是默认,指的是输入除了0和1,都会执行default。
So,现在只差一东西,游戏game()的函数怎么写
首先我们要想一下,猜数字我们要是一个随机值,那么该如何使计算机产生一个随机值?
我们生活当中有一个东西是一直在变化的——时间(time)
这边我介绍一个库函数——rand 这个库函数生成随机数便是根据时间的变化来产生的
我们可以看到rand函数的作用是“生成一个伪随机数。”
同时可以看到
但是使用rand函数之前要使用一个srand函数 其作用是设置随机数生成器
随机数生成器代码如下
srand( (unsigned)time( NULL ) );
这边我们对这个函数不讨论,了解即可!
猜数字不可能一次就中,因此,应该当进入游戏后一个循环,直到游戏结束。
设计如下
然后这个循环前面加上rand()函数即可 生成一个随机数。
这边又有一个东西要注意**
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX.
这个库函数的返回值是0到RAND_MAX 我们在vs编译器中搜索到
这个随机数字最大可以到几万,因此根据题意我们可以采取rand()%100+1的措施
***还有注意点就是那个随机数生成器的位置安放
是放在game函数里面还是放在主函数中呢?
我们可以想到最初用这个函数是因为时间一直在变化的,我们上代码试试看效果。
结果显示,如果我们放在game函数中,那么如果我们按的很快,那么随机数字就是一样的
因为srand函数在循环内的话,它每次循环都会产生一个新的数字,而数字是根据时间的变化来的,因此在很短很短的时间内时间是不会变化的,因此产生的随机数字也是不变的,所以:
我们应该把srand函数放在主函数,保证随机数一开始就生成了,这样才可。
这样子,就算我按1后接着按enter建再快都不会是相同的数字,也就保证了游戏的可玩性
最后博主贴出完整代码,后期若还可以优化我会持续更新的啦!
#include#include #include void menu() { printf("####################n"); printf("######1.PLAY########n"); printf("###T##0.DEFEAT######n"); printf("####################n"); } void game() { int guess = 0; int r = 0; srand((unsigned)time(NULL)); r = rand() % 100 + 1; //printf("%d", r); while (1) { printf("猜数字->n"); scanf("%d", &guess); if (guess > r) { printf("猜大了!n"); } else if (guess < r) { printf("猜小了!n"); } else { printf("猜对了!n"); break; } } } int main() { int n = 0; srand((unsigned)time(NULL)); do { menu(); printf("请输入1/0选择n"); scanf("%d", &n); switch (n) { case 1: game(); break; case 0:printf("DEFEATn"); break; default:printf("请输入正确数字n"); break; } } while (n); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)