C语言之制作带有难度选择,计时,计次,排行榜的猜数字游戏


一、程序功能

带有计时,计次,排行榜的简单猜数字游戏

游戏规则
当规定时间达到后并未猜出数字,视作游戏失败
当规定次数达到后并未猜出数字,视作游戏失败
当在规定次数和规定时间内猜出数字,视作成功并记录成绩
可以读取本次程序运行的排行榜

拥有超多的难度选择:
简单:200秒 30次
中等:100秒 15次
困难:50秒 7次
排行榜:
使用自定数据类型和数组进行记录
使用冒泡算法进行成绩的排序
总时间短者排名优先
时间计算公式为用时+次数*5(思考是罚时系统)

二、代码实现

1.运行图片

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.代码内容

代码如下(示例):

#include <cstdio>
#include <iostream>	
#include <ctime>
#include<Windows.h>
using namespace std;
//声明函数
void lose(void);
void game(double, int);
void difficult();
void read(void);
void write(double, int);
//定义排名数据类型
struct pm
{
	char name[100] = { 'x','x' ,'x' };
	double btime = 10000;
};
//排行榜全局变量
pm bank[11];
//入口
int main()
{
	int modle;
	do
	{
		system("cls");
		printf("************菜单************\n\n");
		printf("         1.开始游戏\n\n");
		printf("         2.排行榜\n\n");
		printf("         3.退出游戏\n\n");
		printf("****************************\n\n");
		printf("菜单操作:");
		cin >> modle;
		switch (modle)
		{
		case(1):
			difficult();//难度菜单函数		
			break;
		case(2):
			read();//排行榜菜单
			break;
		case(3):
			printf("游戏将在三秒内退出");
			Sleep(3000);
			exit(0);
		default:
			break;
		}
	} while (true);
	return 0;
}
//游戏主函数
void game(double times, int number)
{
	//清屏
	system("cls");
	//创建随机数
	int systemNum;
	srand((unsigned)time(NULL));
	systemNum = rand() % 100 + 1;
	//定义游戏用时
	time_t  	clk2, clk1;
	printf("你有%.1lf秒的时间,有%d次的猜测机会\n", times, number);
	Sleep(1500);
	//游戏倒计时
	printf("游戏将在3s后开始\n");
	for (int i = 3; i > 0; i--)
	{
		Sleep(1000);
		printf("%d\n", i);
	}
	Sleep(1000);
	printf("游戏开始,祝你好运\n");
	Sleep(1000);
	system("cls");
	//开始计时
	time(&clk1);
	time(&clk2);
	//游戏内容
	int n = 1;
	int guessnume;
	int sum = 1;
	do//判断游戏是否进行
	{
		printf("请输入你猜的数(1-100):\n");
		cin >> guessnume;
		time(&clk2);
		if (guessnume > systemNum && difftime(clk2, clk1) / 1000 < times)
		{
			printf("大\n");
			sum++;
		}
		else if (guessnume < systemNum && difftime(clk2, clk1) / 1000 < times)
		{
			printf("小\n");
			sum++;
		}
		else if (guessnume == systemNum && difftime(clk2, clk1) / 1000 < times)
		{
			printf("正确\n");
			printf("总共用了%d次,用时%.1lf秒\n", sum, difftime(clk2, clk1) / 1000);
			Sleep(3000);
			write(difftime(clk2, clk1) / 1000, sum);
			break;
		}
		else
		{
			lose();
			break;
		}
	} while (sum < number + 1);
	if (difftime(clk2, clk1) / 1000 < times && sum == number + 1)
	{
		lose();
	}
}
//难度选择菜单
void difficult()
{
	system("cls");
	printf("***********游戏难度*********\n\n");
	printf("         1.简单模式\n");
	printf("         2.中等模式\n");
	printf("         3.困难模式\n");
	printf("         4.返回主菜单\n");
	printf("****************************\n\n");
	printf("难度选择:");
	int difficult;
	cin >> difficult;
	switch (difficult)
	{
	case(1):
		game(200.0, 30);
		break;
	case(2):
		game(100.0, 15);
		break;
	case(3):
		game(50.0, 7);
		break;
	case(4):
		break;
	default:
		printf("未知的选择\n");
		printf("游戏将在三秒后返回主菜单");
		Sleep(3000);
		break;
	}
}
//失败函数
void lose()
{
	printf("您已失败,三秒后将返回选择菜单");
	Sleep(3000);
}
//排行榜写入
void write(double time1, int times)
{
	printf("请输入您的名字;");
	scanf_s("%s", &bank[10].name, sizeof(bank[10].name));
	bank[10].btime = time1 + times * 5;
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10 - i; j++)
		{
			if (bank[j].btime > bank[j + 1].btime)
			{
				swap(bank[j].btime, bank[j + 1].btime);
				swap(bank[j].name, bank[j + 1].name);
			}
		}
	}
	printf("已录入您的成绩,三秒后将返回选择菜单");
	Sleep(3000);
}
//排行榜读取
void read()
{
	system("cls");
	printf("排名  名字    用时(包含罚时)\n");
	for (int i = 0; i < 10; i++)
	{
		printf("%-4d %-8s %.1lf秒\n", i + 1, bank[i].name, bank[i].btime);
	}
	int m;
	printf("请输入0返回主菜单:");
	do
	{
		cin >> m;
	} while (m != 0);
}


三、总结

这就是制作带有难度选择,计时,计次,排行榜的猜数字游戏的全部内容,为专业老师所留作业,但不单单满足于简单的猜数字功能,仅为初学者,仅供参考(以免误人子弟),如有错误请指出,谢谢啦。
其实还想写个双线程让游戏更加真实,但太懒啦。下次一定!!!

  • 10
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beerHolic_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值