C语言:失败就关机的猜数字游戏!

大家有没有玩过猜数字游戏?在一个范围内,出题人选好数字后,由你来猜数字,如果猜对了,游戏结束,猜错了就重新猜。如果猜错次数过多,就要接受惩罚。今天我们将用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;
}

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值