作为一个初学C语言的小白,一个简易的C语言小游戏无非是提高了我对这门计算机语言的兴趣。接下来我将从提高自己的角度讲解一下这个简单的猜数字游戏,希望大家多多包涵。
————————————————————————————
游戏介绍
这个程序将实现随机猜测1-100中的任一整型数字,并将猜测结果反馈给玩家。其中玩家具有6次猜数字的机会,若6次机会未猜中相应的数字,系统将会进行2分钟内关机的惩罚,除非输入相应的口令。
代码实现
首先需要向玩家展示游戏菜单,这里使用menu函数实现。
void menu()//向玩家展示游戏菜单
{
printf("***************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("***************************\n");
}
接下来是该游戏的主要实现。其中rand() 与 srand()的正确使用为我本次学习到的重点之一。
void game()
{
int guess = 0;//存放玩家猜测的数
int count = 1;//计数器,计算猜数字的次数
int ret = rand() % 100 + 1;
while (1)
{
printf("请输入一个值:>");
scanf("%d", &guess);
count++;
if (guess < ret)
{
printf("猜小了\n");
//判断猜测次数是否超出6次
if (count > 6)
{
printf("错误次数过多,惩罚开始\n");
Shutdown();//自定义关机函数
break;
}
}
else if (guess > ret)
{
printf("猜大了\n");
if (count > 6)
{
printf("惩罚\n");
Shutdown();
break;
}
}
else if(guess == ret)
{
printf("恭喜你猜对了!\n");
break;
}
}
}
接下来是当玩家超出限制次数时会执行的定时关机程序。
int Shutdown()
{
char input[20] = { 0 };
//system()执行window系统的命令,此处为定时关机
system("shutdown -s -t 120");
again:
printf("你的电脑将在2分钟之内关机,输入“我是猪”,取消关机\n");
scanf("%s", input);
//运用strcmp判断输入字符是否为指定指令
if (strcmp(input, "我是猪") == 0)
{
//此处为取消关机
system("shutdown -a");
printf("已取消关机,感谢游玩!\n");
}
else
{
goto again;//运用goto语句实现迭代
}
}
在主函数中也是为了实现真正的随机而引用了时间戳的概念。
什么是时间戳?
一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。
时间戳的计算方法
格林威治时间(1970年01月01日00时00分00秒)起至现在的总秒数。
根据时间戳的概念,可以看出每时每刻的时间戳都是独一无二的,因此配合函数可以实现真正意义上的随机。
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
void menu()
{
printf("***************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("***************************\n");
}
void game()
{
int guess = 0;
int count = 1;
int ret = rand() % 100 + 1;
while (1)
{
printf("请输入一个值:>");
scanf("%d", &guess);
count++;
if (guess < ret)
{
printf("猜小了\n");
if (count > 6)
{
printf("错误次数过多,惩罚开始\n");
Shutdown();
break;
}
}
else if (guess > ret)
{
printf("猜大了\n");
if (count > 6)
{
printf("惩罚\n");
Shutdown();
break;
}
}
else if(guess == ret)
{
printf("恭喜你猜对了!\n");
break;
}
}
}
int Shutdown()
{
char input[20] = { 0 };
system("shutdown -s -t 120");
again:
printf("你的电脑将在2分钟之内关机,输入“我是猪”,取消关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");
printf("已取消关机,感谢游玩!\n");
}
else
{
goto again;
}
}
int main()
{
//time()为引用当前时间的时间戳,以达到真正的随机。
srand((unsigned int)time(NULL));
//主函数中运用srand函数以防止生成的随机数在短时间内相同。
int input = 0;
do
{
menu();
printf("请输入:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
以上即为本次任务的全部代码实现,其中还有很多需要改正的地方,例如关机惩罚的口令可以更加复杂,猜数字次数的判断可创建函数等,希望各位可以给予宝贵的建议,同时我也希望在未来我可以逐步的提高自己,提高自己的技术水平与更新博客的能力。谢谢大家观看!
本文含有隐藏内容,请 开通VIP 后查看