C语言实现猜数字小游戏

前言与概述

本文章讲述如何通过C语言开发一款猜数字的小游戏,开发这款小游戏会让你在学习编程道路上获得更多成就感和快乐。

程序功能

①:文字从两端向中间汇聚的欢迎界面

②:输入密码登录游戏

③:简约美观的游戏主界面

④:深挖猜数字游戏背后运行逻辑

⑤:丰富多样的程序功能

⑥:无限次数的游戏体验

欢迎界面

代码功能:

为了给用户更好的游戏体验,可以在游戏开始之前,简单的制作一个欢迎界面。

示例代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
	char welcome[] = "welcome to guess number game !!!";
	char replace[] = "********************************";
	int left = 0;
	int right = strlen(replace) - 1;
	while (left <= right)
	{
		replace[left] = welcome[left];
		replace[right] = welcome[right];
		printf("%s", replace);
		Sleep(500);
		system("cls");
		left = left + 1;
		right = right - 1;
	}

	printf("%s", replace);
	return 0;
}

模拟运行:

 

代码分析:

首先,定义两个字符串数组,一个字符串数组用于记录将要输出的原语句,另一个字符串数组是一堆星号,用于实现文字替换。接着,定义left变量储存数组左边下标,定义right变量储存数组右边下标。然后,每当变量left的值小于等于变量right的值时,就进入while循环。将welcome数组中变量left的值(下标)访问的元素赋予replace数组中变量left的值(下标)访问的元素,再将welcome数组中变量right的值(下标)访问的元素赋予replace数组中变量right的值(下标)访问的元素,从而实现文字替换。以字符串的形式打印数组replace的所有元素。并休息500毫秒、清空屏幕。调整变量left的值(加一)、变量right的值(减一)。再返回条件表达式,如果条件成立,进入循环语句块,条件不成立,离开循环语句。当循环语句结束后,以字符串的形式打印数组replace的所有元素。

补充说明:

1.strlen()函数,用于输出字符串的长度,头文件是string.h

2.数组总长度减一就是数组最后元素的下标

3.变量left的值小于变量right的值说明数组中还有元素没有替换,变量left的值等于变量right的值说明数组中所有元素完成替换。

4.Sleep()函数用于暂停程序的运行,单位毫秒,在代码中,Sleep(500);表示暂停程序运行0.5秒。其头文件是windows.h

5.system(“cls”);用于清空屏幕上所有内容,其头文件是stdlib.h

密码正确进入游戏

代码功能:

用户有三次输入密码的机会,如果三次都输入错误就会退出游戏,密码输错,程序会提示“密码错误”。只有密码正确,才可以进入游戏。

默认密码:123456

示例代码:

#include <string.h>
#include <stdio.h>
int main()
{
	int count = 0;
	printf("请输入登录密码:\n");
	char password[] = { 0 };
	for (count = 1; count <= 3; count++)
	{
		scanf("%s", password);
		if (strcmp(password, "123456") == 0)
		{
			printf("密码正确,正在登陆游戏……\n");
			break;
		}
		else {
			printf("密码错误!\n");
		}
	}
	if (count > 3)
	{
		printf("连续三次密码输入错误,退出游戏!\n");
		goto end;
	}
end:
	return 0;
}

模拟运行: 

代码分析:

 strcmp()函数用于比较两个字符串的大小(实际上比较的是两个字符串ASCII码值的大小),如果两个字符串相等,返回0;如果第一个字符串大,返回>0的值;相反,返回<0的值。其头文件是string.h

设计游戏主界面

示例代码:

#include <stdio.h>
void menu()
{
	printf("*************************\n");
	printf("******输入1开始游戏******\n");
	printf("******输入0退出游戏******\n");
	printf("******输入2关闭电脑******\n");
	printf("*************************\n");
}
int main()
{
	menu();
	return 0;
}

模拟运行: 

游戏运行逻辑

代码功能:

设计一个game函数,由计算机生成一个随机数,让用户猜测。如果用户猜的数比随机数大,就告诉用户“你猜的数大了”,如果用户猜的数比随机数小,就告诉用户“你猜的数小了”。如果用户猜的数等于这个随机数,就告诉用户“恭喜你,猜对了!”,并告诉用户使用多少次机会猜对。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
	int times = 0;
	int number = rand() % 100 + 1;
	int guess = 0;
	printf("现有一个1-100的数,请猜测它:\n");
	while (guess != number)
	{
		printf("请输入你猜测的数:\n");
		scanf("%d", &guess);
		times = times + 1;
		if (guess > number)
		{
			printf("你猜的数大了\n");
		}
		else if (guess < number)
		{
			printf("你猜的数小了\n");
		}
		else {
			printf("恭喜了!猜对了!\n");
			printf("你只用%d次就猜对了正确答案,超过了百分之九十九的玩家!\n", times);
			break;
		}
	}

}
int main()
{
	srand(time(0));
	game();
	return 0;
}

运行结果: 

代码分析:

如何生成随机数?

C语言提供了rand函数用于生成随机数,但rand函数单独使用,生成的是伪随机数(多次生成的随机数是相同的)。于是需要调用srand()函数,使用srand()函数需要整型数字作为种子。通过特殊的算法将这个整型数字转换为随机数。但如果种子不变,生成的随机数也是相同的。于是,需要一个时刻都在变化的整型数字作为种子。时间戳就是时刻变化的数字。它是当前时间与计算机开始时间的时间差。time(0)用于获取当前时间的时间戳。srand(time(0))只需要调用一次即可,快速多次调用,会导致生成的随机数相近甚至相同。

补充说明:

  1. %100可以将生成的随机数控制在0~99,如果+1,生成的随机数范围就在1-100。
  2. rand()函数和srand()函数的头文件是stdlib.h  time()函数的头文件是time.h

 关机程序实现

代码功能:

当用户玩累了,想休息一会,需要关闭计算机。通过此代码,可以实现快速关机,当然用户也可以通过输入提示语句取消关机。

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	char del[] = { 0 };
	system("shutdown -s -t 60");
	printf("输入\"open\"可以取消关机命令\n");
	scanf("%s", del);
	if (strcmp(del, "open") == 0)
	{
		system("shutdown -a");
	}
	return 0;
}

代码分析:

system("shutdown -s -t 60");用于在1分钟后关闭计算机,-s表示执行关机操作,-t表示设置指定时间关机,单位秒。 system("shutdown -a");用于取消关机命令。

用户交互平台

代码功能:

让用户输入一个数字,如果输入1就进入游戏,输入0就退出程序,输入2就执行关机命令,输入其它数字,就提示输入错误,并要求重新输入数字。当用户玩完一局游戏后,可以重新选择。

示例代码:

do
{
	menu();
	scanf("%d", &input);
	switch (input)
	{
	case 1:
	{
		game();
		break;
	}
	case 2:
	{
		system("shutdown -s -t 60");
		printf("输入\"open\"可以取消关机命令\n");
		scanf("%s", del);
		if (strcmp(del, "open") == 0)
		{
			system("shutdown -a");
		}
		break;
	}
	case 0:
	{
		printf("正在退出游戏,请稍后……\n");
		break;
	}
	default:
	{
		printf("输入错误,请重新输入!\n");
		break;
	}
	}
} while (input);

代码分析:

本代码,使用do while循环语句,循环条件是用户输入的值。switch-case语句用于根据用户输入的值进入相应的语句块。程序运行会先进入menu函数,并等待用户输入数字,如果输入1,进入game()函数,输入0,循环条件不成立,退出程序,输入2,进入关机命令,并输出提示语句。输入其它数字、再次输入1会再次进入menu函数,并等待用户输入数字。

 源代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//定义游戏主界面
void menu()
{
	printf("*************************\n");
	printf("******输入1开始游戏******\n");
	printf("******输入0退出游戏******\n");
	printf("******输入2关闭电脑******\n");
	printf("*************************\n");
}
//定义游戏运行逻辑
void game()
{
	int times = 0;
	int number = rand() % 100 + 1;
	int guess = 0;
	printf("现有一个1-100的数,请猜测它:\n");
	while (guess != number)
	{
		printf("请输入你猜测的数:\n");
		scanf("%d", &guess);
		times = times + 1;
		if (guess > number)
		{
			printf("你猜的数大了\n");
		}
		else if (guess < number)
		{
			printf("你猜的数小了\n");
		}
		else {
			printf("恭喜了!猜对了!\n");
			printf("你只用%d次就猜对了正确答案,超过了百分之九十九的玩家!\n", times);
			break;
		}
	}

}
int main()
{
	int input = 0;
	char del[] = { 0 };
	int count = 0;
	srand(time(0));
	//定义欢迎界面
	char welcome[] = "Welcome to guess number game!!!";
	char replace[] = "*******************************";
	int left = 0;
	int right = strlen(replace) - 1;
	while (left <= right)
	{
		replace[left] = welcome[left];
		replace[right] = welcome[right];
		printf("%s", replace);
		Sleep(500);
		system("cls");
		left = left + 1;
		right = right - 1;
	}
	printf("%s\n", replace);
	//登录信息判断
	printf("请输入登录密码:\n");
	char password[] = { 0 };
	for (count = 1; count <= 3; count++)
	{
		scanf("%s", password);
		if (strcmp(password, "123456") == 0)
		{
			printf("密码正确,正在登陆游戏……\n");
			break;
		}
		else {
			printf("密码错误!\n");
		}
	}
	if (count > 3)
	{
		printf("连续三次密码输入错误,退出游戏!\n");
		goto end;
	}
	//用户选择功能
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
		{
			game();
			break;
		}
		case 2:
		{
			system("shutdown -s -t 60");
			printf("输入\"open\"可以取消关机命令\n");
			scanf("%s", del);
			if (strcmp(del, "open") == 0)
			{
				system("shutdown -a");
			}
			break;
		}
		case 0:
		{
			printf("正在退出游戏,请稍后……\n");
			break;
		}
		default:
		{
			printf("输入错误,请重新输入!\n");
			break;
		}
		}
	} while (input);
end:
	return 0;
}

源代码模拟运行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值