100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 小游戏———《猜数字》 但不完全是猜数字

小游戏———《猜数字》 但不完全是猜数字

时间:2023-07-13 23:26:40

相关推荐

小游戏———《猜数字》 但不完全是猜数字

好久不见啊,假期期间复习了一些学校学习的知识,整合成了一个小程序,一起来看一下吧。

因为程序包含多个功能,所以我创立了不同的函数模块,使各个模块分开设计,互不干扰。

首先是一个菜单标题页,因为不需要返回值,所以我们直接使用void来定义函数。

一:用menu1来作为函数名

void menu1(){printf("********************\n");printf("**** 请设置密码 ****\n");printf("********************\n密码:");}

实现效果如下

二:密码设置及进入

接下来就是第二个模块,设置密码,然后输入密码,并且有三次的输入机会,三次输入错误则退出程序。

输入密码

void password()//密码块{char pass[10] ={0};//定义一个字符串,用来存放设置的密码scanf("%s", pass);//输入密码printf(" !设置成功!\n!解锁后开始游戏!\n");//设置成功后开始输入密码进入游戏printf("请输入密码:"); //pass字符串是正确的密码char word[10] ={0}; //word字符串是后来输入的,我们要将其进行比对

然后我们用接下来的程序实现三次错入机会的效果

int i = 0; //定义一个变量,主意这个变量定义在函数内部while (i < 3)//其作用域只有这个函数当“ i ”小于三时进入循环 {scanf("%s", word); //输入密码,存到wordif ((strcmp(word,pass))==0) //用strcmp来将先后输入的密码进行比对{printf("输入正确\n游戏开始\n"); //如果一样,则表明输入正确并退出循环break;}else if (i != 3) //其他情况则表明输入错误{printf("输入错误,请再次尝试\n");}i++; //i++没有放到循环体的最后,因为这会影响到最后一条if语句的判断if (i == 3) //因为i= 3时就不会再进入循环所以,要先让i加一再判断这条if语句{printf("三次错误输入,程序已结束运行");Sleep(900); //时程序暂停900毫秒,使看起来舒适int* p = &ip;*p = 0;break;}}

还记得最开始定义的一个整形变量ip吗?他就要用在这里了

int* p = &ip;*p = 0;break;

因为这个实参变量ip在函数外部,我们要想影响到它的真实值就要使用指针,如果三次不成功则做一个记号,将原本为1的ip变为0,再在主函数外部进行检测判断,如果ip等于0则直接退出程序。

其实也可以直接使用exit(0);这个指令直接替换掉这三条语句,但是想到了指针的知识所以使用了一下,想要简单粗暴的方法的话替换掉就好。

实现效果如下

三:引导及进一步确认

接下来就进入到游戏的部分了,猜数字游戏的主体前还需要一个引导环节,游戏模块,当然在它之前也需要一个菜单界面,我们给他来安排一下。

int menu2()//菜单块2//菜单,打印就好{printf("*******************************\n");Sleep(1000);printf("*********1.开始游戏************\n");Sleep(1000);printf("*********2.退出游戏************\n");Sleep(1000);printf("*******************************\n");printf("请输入1或2》——");int i = 0;//创建临时变量,用于选择scanf("%d", &i);//开始选择 //使用到了switch case语句switch (i){case(1): //开始游戏printf("Loding"); //这就是一个小操作实现等待的效果,loding效果for (int i = 0; i <= 6; i++) {printf(". ");Sleep(900);}system("cls"); //清屏指令,使以后的界面不至于那么复杂printf("游戏启动成功");printf("\a");Sleep(2000);//暂停一会,然后清屏system("cls");printf("开始猜数>>___");break; //case结束后紧跟break紧跟break是个好习惯case(2): //退出程序printf("游戏已结束......");exit(0); //正常结束程序break;default://习惯性加一个其他选项避免无法执行printf("错误!请重新输入");int menu2();break;}return 0;}

动态展示一下

四:正式游戏

最后就是最重要的游戏板块了

void game()//游戏块{//生成随机数int num = 0,c=0;srand((unsigned int)time(NULL)); //这里用到了srand函数来生成随机数,详细介绍见文本num = (rand()%100)+1; //这里限制一下随机数的范围是0到100,以不至于太难猜到int n = 0;//因为取余100后的数字一定在100以内do//这里用do while 循环来作为猜数字的过程{while ((scanf("%d", &c))) //用scanf返回值的特性做到多次输入的效果{if (c > num) //猜的大了或小了就显示相应的提示{system("cls"); //用这个指令来做到清屏printf("猜大了\n");}if (c < num){system("cls");printf("猜小了\n");}if (c == num)//当然等于的话就是猜到了,要退出循环{system("cls");printf("猜对了!!恭喜!!!\n");break;}}printf("是否再来一次?输入0或1\n>>__"); //这里加了个小操作,当你想再来一次的话scanf("%d", &n);//输入1就好了if (n == 1){printf("开始猜数》》__");}} while (n == 1);//当n = 1时会再次进入大循环,然后进入小循环形成闭环

具体来说一下这个生成随机数的函数

srand((unsigned int)time(NULL));

我们简单使用srand语句的话会发现每次生成的随机数都一样没有可玩性,十分的单调,不能做到完全的随机,所以我们需要借助一个时刻在变化的东西,对就是“时刻”在变化,也就是时间戳,它随着时间的变动不断变化,这个参数每时每刻都是不一样的,现在我们将这个参数作为生成随机数的参考,这样就能做到每次进入游戏它生成的随机数都不一样了。获取方法就是

time(NULL),头文件#include<time.h>,(unsigned int)是用来强制类型转化的,为符合函数结构,不必过多在意。

到这里介绍得就差不多了,接下来上总结:此次小常识用到了do while,指针,system指令,还有随机数的生成。有深刻想法的同志们欢迎在评论区交流。最后留下一份纯净版,需要的同学可以直接拷走。

整体版本

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<time.h>#include<string.h>#include <windows.h>int ip = 1;void menu1(){printf("********************\n");printf("**** 请设置密码 ****\n");printf("********************\n密码:");}void password()//密码块{char pass[10] ={0};scanf("%s", pass);printf(" !设置成功!\n!解锁后开始游戏!\n");printf("请输入密码:");char word[10] ={0};int i = 0;while (i < 3){scanf("%s", word);if ((strcmp(word,pass))==0){printf("输入正确\n游戏开始\n");break;}else if (i != 3){printf("输入错误,请再次尝试\n");}i++;if (i == 3){printf("三次错误输入,程序已结束运行");Sleep(900);int* p = &ip;*p = 0;break;}}}int menu2()//菜单块2{printf("*******************************\n");Sleep(1000);printf("*********1.开始游戏************\n");Sleep(1000);printf("*********2.退出游戏************\n");Sleep(1000);printf("*******************************\n");printf("请输入1或2》——");int i = 0;//创建临时变量,用于选择scanf("%d", &i);//开始选择switch (i){case(1):printf("Loding");for (int i = 0; i <= 6; i++){printf(". ");Sleep(900);}system("cls");printf("游戏启动成功");printf("\a");Sleep(2000);//暂停一会,然后清屏system("cls");printf("开始猜数>>___");break;case(2):printf("游戏已结束......");exit(0);//正常结束程序break;default:printf("错误!请重新输入");int menu2();break;}return 0;}void game()//游戏块{//生成随机数int num = 0,c=0;srand((unsigned int)time(NULL));num = (rand()%100)+1;int n = 0;do{while ((scanf("%d", &c))){if (c > num){system("cls");printf("猜大了\n");}if (c < num){system("cls");printf("猜小了\n");}if (c == num){system("cls");printf("猜对了!!恭喜!!!\n");break;}}printf("是否再来一次?输入0或1\n>>__");scanf("%d", &n);if (n == 1){printf("开始猜数》》__");}} while (n == 1);if (n == 0){printf("\n");printf("***********************************************************\n");printf("*********>>>>>>>>>>>>>>>> E N D <<<<<<<<<<<<<<<<<<<<*******\n");printf("***********************************************************\n");}}int main(){menu1();password();if (ip == 0){return 0;}system("cls");menu2();game();return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。