大家有没有玩过猜数字游戏?在一个范围内,出题人选好数字后,由你来猜数字,如果猜对了,游戏结束,猜错了就重新猜。如果猜错次数过多,就要接受惩罚。今天我们将用C语言来完成这个游戏。
一、游戏开始
要玩猜数字游戏,首先我们需要准备一个能产生随机数的程序,在这里可以使用一个rand函数;
rand函数是一个伪随机数发生器,可以返回伪随机数,这个随机数的范围是0~RAND_MAX,RAND_MAX的大小取决于编译器,在大部分编译器中,RAND_MAX是32767,rand函数所属库是stdlib.h,使用格式为rand()
那么,让我们尝试着生成几个伪随机数。
很明显,这是两段不同的代码,但是他们生成的伪随机数居然是一样的!这是为什么呢?
这是因为rand函数生成随机数列的种子默认是1,如果想要生成真正意义上的随机数,我们需要让种子是是变化的。这就需要我们在使用前调用srand函数进行初始化,因为时间是时刻在变的,所以一般我们用时间来初始化随机数种子,及srand((unsigned)time(NULL));这里的time也是一个函数,所属于time.h。
这样,rand函数才会返回随机数.
此外,我们还可以写一些游戏开头语,如是否进入游戏等
这里使用的strcmp是string compare的缩写,用来比较两个字符串并对其结果返回整数,基本形式为strcmp(str1,str2),如果两字符串相等则返回零,若str1<str2,则返回负数,str1>str2则返回正数。strcmp函数头文件是string.h。
二、游戏部分
针对游戏部分,我们可以写一个game函数。
在用srand函数初始化后,我们来确定一下数字范围,在这里我们用1~100举例.
因为rand的取值范围为0-32767,那么rand()%100的取值范围为0-99,加一为1-100;
我们将这个1-100的伪随机数赋值给r,作为本轮游戏中被猜的数字。用变量i来统计猜错的次数,用guess来表示玩家猜测的数字。
接着,我们可以用while和if来写猜测和循环的过程。在这里我们设置最多猜错次数为五次。
如果猜对了,我们打印出“congratulations!”并结束游戏,如果猜错次数超过五次,那我们同样结束游戏,玩家需要接受惩罚。
三、惩罚机制
这里的惩罚我们设置为让电脑关机,倒计时六十秒。如何让对方的电脑关机呢?
这里我们可以用到system(shutdown -s -t 60)。
system是一个属于stdlib.h的函数,用于发出一个DOS命令。比如,如果你在电脑的命令提示符里输入shutdown -s -t -60,你的电脑就会提示你在60s后关机,与之相对的,如果你输入shutdown -a,关机操作会被取消。
我们利用system函数来让对方的电脑关机,不过如果他承认自己“stupid”,我们也可以“放他一马”,使用system(shutdown -a)取消关机。代码实现如下:
到这里,游戏部分和惩罚部分就全部结束了。
四、代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void game() {
int r = rand() % 100 + 1;
printf("guess the number(1-100)\n");
int guess = 0, i = 0;
while (i < 5) {
scanf("%d", &guess);
if (guess == r) {
printf("congratulations!!!\n");
break;
}
else {
if (guess > r) {
printf("wrong!!it is too big! \nPlease try again!!!\n");
i++;
}
else {
printf("wrong!! it is too small! \nPlease try again!!!\n");
i++;
}
}
}
if (i == 5) {
system("shutdown -s -t 60");
printf("As a punishment for game failure, your computer will shut down in 60 seconds.\n");
printf("if you type 'stupid',you can cancel the shutdown.\n");
printf("you only have one chance\n");
}
char array[20];
scanf("%s", &array);
if (strcmp(array, "stupid") == 0)
system("shutdown -a");
else printf("I am sorry");
}
int main() {
srand((unsigned)time(NULL));
printf("Do you want to play GUESS THE NUMBER\n");
printf("please choose exit or enter\n");
char arr[20];
scanf("%s", &arr);
if (strcmp(arr, "exit") == 0);
else if (strcmp(arr, "enter") == 0) {
printf("welcome\n");
game();
}
else
printf("error! please choose again\n");
return 0;
}