【C语言】猜数字小游戏「功能优化」

时间:2023-02-22 16:02:03

????write in front????   

????大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流????

????2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星TOP100~2022博客之星TOP63~作者周榜84﹣作者总榜704~阿里云专家博主 & 阿里云星级博主~掘金优秀创作者⇿InfoQ创作者⇿51CTO红人⇿全网访问量50w+????

????本文由 謓泽 原创 如需转载还请通知⚠

????个人主页-​謓泽51Ctop的博客​????

????欢迎各位→点赞???? + 收藏⭐️ + 留言????

????系列专栏-​謓泽51Ctop的博客_【C语言】从0~1_51CTO博客​????
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本????

【C语言】猜数字小游戏「功能优化」


游戏思路

  • 自动产生一个1~100的随机数。
  • 猜数字进行。
  • 当你猜对的时候就 恭喜你猜对了,然后游戏结束。
  • 当你猜的过程中猜错了的话,就会告诉你两种情况:1、猜大了,2、猜小了,然后再继续猜数字,直到猜对为止!
  • 游戏可以一直玩,直到我们想要退出游戏即可!

注:本代码还用到了些操作指令系统以及自定义颜色函数包括睡眠函数以及菜单函数的一些知识都是来优化程序的! 以及一些特殊情况,当你输入的值错误的话,会提示你输入的数字错误,重新输入。运用到了静态局部计算每次猜数字的次数,之所以用静态局部变量是为了保证出了作用域不会被销毁,延长变量的生命周期的值。


  • 这里我们需要知道一个知识点:

随机数

在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为:

  • int rand (void);

使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:

  • srand((unsigned)time(NULL));           
  • srand函数在工程中调用一次即可!

游戏代码示例如下

//1.电脑会生成一个随机数 2.猜数字
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include <windows.h>
#define Number 100

void color(short x) //自定义函根据参数改变颜色
{
if (x >= 0 && x <= 15)//参数在0-15的范围颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); //只有一个参数,改变字体颜色
else//默认的颜色白色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void menu() //界面菜单函数
{
color(0);
system("cls");
color(16);
printf("|--------猜数字游戏\^o^/------|\n");
printf("|****************************|\n");
printf("|-------★1:开始游戏★-------|\n");
printf("|-------★0:退出游戏★-------|\n");
printf("|****************************|\n");
printf("|--------INPUT(1~100)--------|\n");
printf("\n");
}
//游戏具体实现功能
int game()
{
//1.生成随机数
//rand();功能随机生成数字 0~32767之间
int red = 0;//red负责接收rand的参数
int guess = 0;//猜数字初始值
red = rand()%100+1;//rand生成1-100数字。
//这里解释一下为什么是1-100:而rand()%100表示取100以内的随机数,即取了随机数之后再对100取余。因而是0~99.
//2.猜数字
while (1)
{
//计数功能,输入数字进行计次。
while (1)
{
static int i;
i++;
color(5);
printf("|═══════════════════════|\n");
printf("|第%d次-->猜数字>(*^_^*):|\n",i);
printf("|═══════════════════════|\n");
printf("---\n");
color(14);
scanf("%d", &guess);
printf("---\n");
if (guess == red)
i = 0;
break;
}
//一共三种情况
if (guess>red && guess<=Number)
{
color(9);
printf(" ------\n");
printf("|猜大了|\n");
printf(" ------\n");
}
else if (guess>Number)
{
printf("|═══════════════════════════|\n");
printf("|宁输入的数字大于游戏规定范围\n");
printf("|═══════════════════════════|\n");
}
else if (guess<red)
{
color(9);
printf(" ------\n");
printf("|猜小了|\n");
printf(" ------\n");
}
else
{
color(11);
printf("\n");
printf("|------------|\n");
printf("|恭喜你猜对了|\n");
printf("|------------|\n");
printf("休息5s再来吧(*^_^*)\n");
Sleep(5000);//睡眠5s
break;
}
}
return red;
}
int main(void)
{
int number = 0;
//拿时间戳来设置随机数字的生成起始点time
srand((unsigned)time(NULL));//srand();功能:生成随机数,要在rand()前调用
//srand函数在工程中调用一次即可
do
{
menu();//打印出菜单
color(12);
printf("~~~~~~~~~~~~~~~~~~~~~\n");
printf("请选择是否登入游戏->:");
scanf("%d", &number);
printf("\n~~~~~~~~~~~~~~~~~~~~~\n");
//switch用于多分支语句:在此程序中分支1和0,如果输入其它(数字)用default进行错误
switch (number)
{
case 0:
printf("退出游戏\n");
break;
case 1:
game();//猜数字游戏
break;
default:
color(13);
printf("|════════════════════|\n");
printf("|青柠重新输入ありがど|\n");
printf("|════════════════════|\n");
Sleep(4000);
break;
}
}
while (number);//至少进入循环一次!
return 0;
}