讲完循环和判断我们就可以上游戏啦!兴奋吧,激动吧,直接进入正题,来看!

在进入猜数字游戏之前,先让我们看一下模拟登录(后面用于游戏登录)

目录

1.模拟登录

2.猜数字


1.模拟登录

//模拟登录#pragma warning(disable:4996)#include<stdio.h>#include<string.h>#include<windows.h>#define USENAME "mengxin"//设置用户名#define PASSWORD "1234abcd"//设置密码void Locking(int times){while (times){printf("你的电脑已经被锁死,还剩下...%2d\r", times);times--;Sleep(1000);}printf("\n");}void Lock(int lock_count){//对不同的错误次数做出不同的惩戒措施;switch (lock_count){case 1:Locking(10);break;case 2:Locking(600);break;case 3:Locking(3600);break;//Locking函数是锁机函数,实参为锁机的时间default:system("shutdown -s -t 180");//锁机命令设置,在解析中解释break;}}int main(){char use[50] = "\0";//用来输入账号的数组char pass[9] = "\0";//用来设置密码的数组int lock_count = 0;//用来记录输入错误的次数while (1){printf("请输入账号>");scanf("%s", use);printf("请输入密码>");scanf("%s", pass);if ((0 == strcmp(use, USENAME)) && (0 == strcmp(pass, PASSWORD)))//strcmp函数用来比较字符串,讲在解析中讲解//此处判断意为 输入账号密码是否与预设值均相同(一个不同即判断不成立){printf("Congratulations on mengxin logging into my system!");break;}else{lock_count++;//输入错误的次数printf("认证失败,你的电脑已锁死,请稍后再试!\n");Lock(lock_count);//惩罚方式的设置函数}}return 0;}

  解析:

           我们知道main函数是入口函数,作为程序运行的起点,进入main函数。 我们首先创建两个 数  组来存储内设的账号和密码,内设的账号和密码定义为宏常量,该程序中,设置的账号为“mengxin”,密码为“1234abcd”,并定义lock_count 用来记录输入的错误次数

           进入while循环,输入账号密码,然后对输入的账号密码和内设的账号密码进行比较,若均相同,则if判断成立(注意这里的比较,因为账号密码均为字符串形式,而字符串形式不能直接进行比较,需要用函数strcmp(,),逗号左右为两个比较的字符串,我们只要知道,当两个字符串比较相等时,strcmp返回值为0),所以当两个strcmp返回值均为0时,说明账号密码均相同。

输出“欢迎“mengxin”登录我的系统”(当然是英文),然后break跳出while循环。   

       若账号或密码输入错误,则lock_count记录的错误次数+1,然后调用函数Lock用于惩戒(保护账号密码的惩戒措施),进入Lock函数,建立Switch多分支语句,将错误次数分为不同等级,做出不同的惩罚措施,当错误次数超过3次时,执行关机指令(ststem是系统命令的使用,需要头文件windows.h,“shutdown -s -t  就是命令行中的关机命令,-t后面的数字表示多少秒后自动关机,若要取消关机,则按window+r调出运行框,输入cmd后进入命令交互界面,输入shutdown -a即可取消关机操作”)

 

 

           当错误次数不超过3时,分别执行不同时间的锁机函数Locking,如错误一次,进入Locking(10),用形参 times接收10,建立while循环,进行倒计时输出(\r转义的含义在转义中有过讲解,光标回到该行开头并在再,次输出数据时覆盖原数值,这里不再赘述倒计时的实施),倒计时10s后退出Locking函数,执行完毕主函数的else分支,跳出if语句,继续进行while输入账号密码的循环,直到输入正确,否则嘿嘿嘿(神秘一笑)。

   2.猜数字

     如上,我们就完成了模拟登录的代码实现,现在让我们来进行猜数字游戏的主体实现(先不与登录代码叠加)

//猜数字游戏的简单实现
#pragma warning(disable:4996)
#include<stdio.h>
#include<time.h>
#include<stdlib.h>void Menu()
{printf("##########################\n");printf("#####1.play    0.exit#####\n");printf("##########################\n");
}void Game()
{printf("猜数字游戏开始!数字范围为1~100噢\n");int t = rand()%100+1;//设置随机数范围int input;while (1){printf("你猜的数字>");scanf("%d", &input);if (input > t){printf("猜大了\n");}else if (input < t){printf("猜小了!\n");}else{printf("恭喜你!猜对了!!\n");break;}}
}int main()
{srand((unsigned long)time(NULL));//随机数的设置int input;do{Menu();//简易菜单函数的调用scanf("%d", &input);switch (input){case 1:Game();break;case 0 :printf("退出游戏\n");break;default:printf("选择错误!请重新选择\n>");}} while (input);return 0;
}

解析:

        进入main函数,首先设置一个随机数种子,定义一个变量。然后进入do~while循环,执行scanf,创建多分支来进行游戏选择,若输入1则进入游戏函数Game,输入0,则退出switch语句,进入到while的条件判断,读取input为0,所以do~while循环结束,退出程序,输入其他值时,输出“选择错误”,之后退出switch后进入while条件判断,input非0,则继续循环,重新输入。

      当输入1时,进入Game函数,首先设置一个范围为1~100的随机数(rand()%100的范围是0~99,再+1就是1~100),进入while循环,当输出数不等于随机数时,循环输入,当猜对时,跳出while循环,同时跳出main函数中的switch语句,进入while的条件判断,由于我们是输入的1进入的Game函数,所以while读取值为1,判断为真,继续进入while循环,输入1继续游戏,输入0则可退出。

       注意随机数种子的设立不要再重复调用的函数里面,单独设置一次即可,如此次程序,若设置在game里面,则每次调用game都会执行srand,每次调用srand()都将重新设置随机数种子,由于两次设置时间间隔小于1s【这是由于time(0)返回值是从1970年1月1日至今所经历的时间(以秒为单位)】,所有两次设置的种子一致,导致两次输出的随机数序列相同,所以如果不能保证两次srand()设置的时间间隔大于1s,则不要调用两次srand(),否则将得到相同的随机数序列(该段意思摘自原文链接:https://blog.csdn.net/xiya)

3.将登录和猜数字放在一起

text.h

//text.h
#pragma once
#pragma warning(disable:4996)
#include<stdio.h>
#include<time.h>
#include<windows.h>
#include<math.h>#define USENAME "mengxin"//设置用户名
#define PASSWORD "1234abcd"//设置密码extern void Lock(int lock_count);
extern void Locking(int times);
extern void Menu();
extern void Game();
extern void log_in();

text.c

#include "text.h"
//text.c
void Menu()
{printf("##########################\n");printf("#####1.play    0.exit#####\n");printf("##########################\n");
}void Game()
{printf("猜数字游戏开始!数字范围为1~100噢\n");int t = rand() % 100 + 1;//设置随机数范围int input;while (1){printf("你猜的数字>");scanf("%d", &input);if (input > t){printf("猜大了\n");}else if (input < t){printf("猜小了!\n");}else{printf("恭喜你!猜对了!!\n");break;}}
}void Locking(int times)
{while (times){printf("你的电脑已经被锁死,还剩下...%2d\r", times);times--;Sleep(1000);}printf("\n");
}void Lock(int lock_count)
{//对不同的错误次数做出不同的惩戒措施;switch (lock_count){case 1:Locking(10);break;case 2:Locking(600);break;case 3:Locking(3600);break;//Locking函数是锁机函数,实参为锁机的时间default:system("shutdown -s -t 180");//锁机命令设置,在解析中解释break;}
}
void log_in()
{char use[50] = "\0";//用来输入账号的数组char pass[9] = "\0";//用来设置密码的数组int lock_count = 0;//用来记录输入错误的次数while (1){printf("请输入账号>");scanf("%s", use);printf("请输入密码>");scanf("%s", pass);if ((0 == strcmp(use, USENAME)) && (0 == strcmp(pass, PASSWORD)))//strcmp函数用来比较字符串,讲在解析中讲解//此处判断意为 输入账号密码是否与预设值均相同(一个不同即判断不成立){printf("Congratulations on mengxin logging into my system!\n");break;}else{lock_count++;//输入错误的次数printf("认证失败,你的电脑已锁死,请稍后再试!\n");Lock(lock_count);//惩罚方式的设置函数}}return ;
}

        main.c

//main.c
//猜数字游戏的简单实现
#include"text.h"
int main()
{log_in();srand((unsigned long)time(NULL));//随机数的设置int input;do{Menu();//简易菜单函数的调用scanf("%d", &input);switch (input){case 1:Game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误!请重新选择\n>");}} while (input);return 0;
}

      我们只对两个小程序进行了简易的合并,只是使用了多文件将登录程序通过log_in函数加进了猜数字中。因此不多赘述。

下篇我们将掀开新的篇章,正式进入函数的讲解!

判断和循环(实战收尾篇2—猜数字游戏)相关推荐

  1. 判断和循环——实战收尾篇1(二分法、抛硬币等)

    目录 ​1.独领风骚的表达式 2.求n的阶乘: 3.求1~10的阶乘之和 4.找一个有序数组中的具体数字(二分法) 5.演示多个字符从两端,向中间汇聚 6.抛硬币游戏 补充: 随机数的设置 ​1.独领 ...

  2. Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)

    文章目录 1.EasyGui的安装 pip安装(python 3.7版本及其之前版本): python 3.7以上版本 手动安装: 2.EasyGui简单使用 窗口属性修改 3.简单实战 窗口猜数字游 ...

  3. C# do-while循环控制台实现简单的猜数字游戏

    1.代码(主函数) static void Main(string[] args){Random random = new Random();int number = random.Next(0, 1 ...

  4. 【初识C语言】用C语言实现猜数字游戏

    是否会深夜突然心潮汹涌思路来袭对着电脑一顿输出,结果对着五十多个错误陷入社会的重大思考,不知从何下笔 我认为对于一个代码从无到实现某种功能时,需要有以下这几个方法: 框架思维 分块思维 及时调试 不断 ...

  5. python原创第十四篇~判断,循环实战训练+答案

    2017-12-07 09:23:55 December Thursday the 49 week, the 341 day #原创第十四篇~判断,循环实战训练 题目:一个整数,它加上100后是一个完 ...

  6. 练习答案-分支与循环-超市买苹果练习-猜数字小游戏

    超市买苹果,初始版 需求 参考代码 # 苹果价格 多少钱一斤 price = 5# 买家购买数量 num = int(input("需要买几斤苹果"))# 总价格 total_pr ...

  7. python猜数字游戏编程循环_使用python进行简单的猜数字游戏(while循环)

    使用python进行简单的猜数字游戏(while循环) 本案例主要是练习while循环,需求:如果给出某人的年龄,让你猜,猜对的话打印出You guess right 如果猜的数字小于真实年龄值,那就 ...

  8. python写一个游戏多少代码-Python项目实战之猜数字游戏(含实现代码)

    猜数字游戏,旨在提高初学者对 Python 变量类型以及循环结构的使用. 此游戏的游戏规则如下:程序随机内置一个位于一定范围内的数字作为猜测的结果,由用户猜测此数字.用户每猜测一次,由系统提示猜测结果 ...

  9. Python 用for循环实现猜数字游戏

    据说Python语言是装逼神器,我也来学下Python. Python的语法确实比较优美,都不要{},连标点符号都很少,下面我们用Python来写个猜数字游戏练练手. ""&quo ...

最新文章

  1. 和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯
  2. 获取IP地址和MAC地址
  3. Linux下jdk配置环境变量
  4. cocos2dx 3.x Value、Vector和Map意识
  5. 住建部副部长:“限购”政策迟早要退出
  6. 凭什么,Netty能成为最流行的NIO框架?
  7. React Native商城项目实战08 - 设置“More”界面cell
  8. Atitit 提升扩展性的艺术 艾提拉著 目录 1. . 功能扩展 vs 性能扩展 1 1.1. udf机制 sp 等插件机制 1 1.2. 1.5. 脚本。脚本是扩展复杂功能的利器 2 1 1.3
  9. ping/tracert/telnet
  10. 【IAST安全左移最佳工具】
  11. 微信小程序之将base64图片转为本地图片
  12. Execution failed for task ':app:processDebugGoogleServices'. No matching client found for package
  13. Xshell如何连接虚拟机
  14. 俄罗斯方块源代码Github
  15. Linux常用基础指令、Linux常用工具(软件包)使用带图详解
  16. 继续教育计算机网络基础答案,2017中国石油大学继续教育计算机网络基础答案.docx...
  17. 关于查询报表总是“超时已过期“的问题解决
  18. linux vi或者vim编辑器中如何显示行号
  19. 无胁科技-TVD每日漏洞情报-2022-10-26
  20. python 工作流workflow_基于BPMN2.0的工作流(Workflow)

热门文章

  1. java小组坦克大战游戏开发文档开发日志_java实现坦克大战游戏
  2. Chrome浏览器突然无法打开的解决方法
  3. 固定于计算机主机箱中承载,计算机主机完整
  4. NOIP 2011 聪明的质检员
  5. hdu 4389 X mod f(x) (数位dp||打表)
  6. 东北大学软件项目管理与过程改进复习提纲(2020)——第一章
  7. 10bit为什么比8bit节省带宽
  8. wpsmac和pc版的区别_WPS Office for Mac VS Microsoft Office 365,同为办公软件,差别竟然这么大!...
  9. “江湖笑”-献给怀有梦想的北漂一族
  10. RT-Thread Nano入门学习笔记(1)