一、程序功能
带有计时,计次,排行榜的简单猜数字游戏
游戏规则:
当规定时间达到后并未猜出数字,视作游戏失败
当规定次数达到后并未猜出数字,视作游戏失败
当在规定次数和规定时间内猜出数字,视作成功并记录成绩
可以读取本次程序运行的排行榜
拥有超多的难度选择:
简单: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);
}
三、总结
这就是制作带有难度选择,计时,计次,排行榜的猜数字游戏的全部内容,为专业老师所留作业,但不单单满足于简单的猜数字功能,仅为初学者,仅供参考(以免误人子弟),如有错误请指出,谢谢啦。
其实还想写个双线程让游戏更加真实,但太懒啦。下次一定!!!