首页 > 其他分享 >C语言实现猜数字小游戏

C语言实现猜数字小游戏

时间:2024-08-08 18:53:26浏览次数:17  
标签:guess 数字 int C语言 小游戏 printf include 输入 游戏

前言与概述

本文章讲述如何通过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;
}

源代码模拟运行

标签:guess,数字,int,C语言,小游戏,printf,include,输入,游戏
From: https://blog.csdn.net/2401_84689376/article/details/140969115

相关文章

  • Cyber Triage 3.10 (Windows) - 数字取证和事件响应
    CyberTriage3.10(Windows)-数字取证和事件响应DigitalForensicsSpecializedForIncidentResponse请访问原文链接:https://sysin.org/blog/cybertriage-3/,查看最新版。原创作品,转载请保留出处。唯一专门用于事件响应的数字取证工具快速、准确和简单地完成入侵调查调......
  • 字符旋转的结果(c语言)
    1.字符旋转的结果//写一个函数,判断一个字符是否为另一个字符串旋转之后的字符串//是返回1,不是返回02.方法一:我们可以使用字符旋转,进行一一比较。如果相等是返回1,如果不是返回0,将第一位存储起来,其他位先前相加,然后将第一位放在最后一位,进行比较,如果没有相等,那在++进行比较.......
  • 【C语言】一篇文章搞定C语言最难指针
    目录一、内存和地址(1)什么是内存的地址(2)如何寻找指定的内存地址(3)CPU和内存传递数据的方式二、指针变量和地址(1)取地址操作符(2)指针变量(3)解引用操作符(4)指针变量的大小(5)指针变量的类型的意义 ①指针的解引用②指针+/-整数③void*指针三、const修饰指针(1)cons......
  • 来了它来了! 中小企业“轻量化低成本”数字化转型解决方案
    数字化转型是中小企业的必答题,但是初始需要投入真金白银,存在回报期长,不确定性大的问题,成本受限成为一大绊脚石。此外缺资金、缺人才、缺技术也是不可回避的挑战。 找集成商无疑是一个必然的路径,但是集成商干起中小企业项目面临钱少、活多、压力大的现实问题,陷入不接没钱赚,接了......
  • 新手的第一个c语言小程序
      作为一个C语言的新手,我深知要想精通这门语言,就必须通过不断的练习来积累经验。因此,我决定从解决高中数学问题入手,编写我的第一个C语言小程序。  显然,高中的许多数学问题复杂难解,对于我这个初学者来说,理解答案本身就已经是一项挑战,更不用说用程序来求解了。所以,我选择了......
  • 【产品推荐】高性能数字隔离芯片——CMT802XNXL
    产品推荐:高性能数字隔离芯片——CMT802XNXL产品概述CMT802XNXL系列数字隔离芯片,集成了先进的隔离技术和高效的信号处理功能,广泛应用于工业自动化、新能源汽车、光伏逆变器、电机控制等多个领域。华普微数字基础隔离产品命名规则如下图所示:命名规则其中,80代表系列号,第......
  • C语言新手小白详细教程(6)函数
    希望文章能够给到初学的你一些启发~如果觉得文章对你有帮助的话,点赞+关注+收藏支持一下笔者吧~阅读指南:开篇说明为什么要使用函数?1.定义一个函数2.初步调用函数3.定义函数详解3.形式参数与实际参数4.使用return接收函数的返回值5.函数声明开篇说明截止目前,我......
  • C语言字符数组,字符指针,指针数组(字符串)的比较与使用
    参考文档https://blog.csdn.net/yuabcxiao/article/details/89600907 字符数组与字符指针在C语言中,可以用两种方法表示和存放字符串:(1)用字符数组存放一个字符串charstr[]="Iamhappy";(2)用字符指针指向一个字符串char*str="Iamhappy";字符数组#include<iostrea......
  • 如何用 CocosCreator 对接抖音小游戏的侧边栏复访
    前言最近小游戏的软著下来了,用CocosCreator做的游戏也完成了1.0版本。而当我打包成抖音小游戏进行提交时,还没到初审就给拒了,因为还有一个机审,机器检测到代码中没有接入“侧边栏复访功能”。这个我还真不知道,那只能去官方看文档了,位置是小游戏开发文档->指南->开放能力-......
  • 产业园区数字化管理:提升效率与可持续发展
    在当今数字化时代,产业园区数字化管理已经成为提高效率、降低成本、促进可持续发展的重要趋势。通过充分利用信息技术和数据分析,产业园区可以实现资源优化配置、智能化决策以及更高效的运营管理。以下整理的一些关键措施,帮助产业园区实现数字化管理: 1.物联网技术的应用利......