首页 > 其他分享 >猜数字游戏

猜数字游戏

时间:2022-12-03 14:33:22浏览次数:39  
标签:goto int srand break 数字 printf input 游戏

前言:

在介绍猜数字游戏时,上一篇博客忘记写了,我们先来了解一下goto语句

1.goto语句

忠告:慎用goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。 goto语言真正适合的场景如下:适用于多层循环跳出

for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}

error:
if(disaster)
// 处理错误情况

1.1 一个有意思的小程序--关机程序

1.1.1 使用goto语句实现

代码解释:input数组用来接收输入值,system("shutdown -s -t 60");是执行系统命令(需要引入stdlib.h头文件),这个again和goto语句搭配使用,当程序执行了goto语句后会直接跳转到again处,从而实现了次代码的循环

//关机代码
int main()
{
char input[20] = { 0 };//用来接收输入值
system("shutdown -s -t 60");//shutdown -s -t 60关机命令,这个是执行系统命令
again:
printf("你的电脑将在一分钟之内关机,如果输入:我是猪,将取消关机\n请输入:");
scanf("%s",&input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");//shutdown -a取消关机命令
}
else
{
goto again;//直接跳转到again那里
}
return 0;
}

猜数字游戏_时间戳

1.1.2 使用普通循环

这里将again和goto语句搭配实现的循环功能,直接替换成了while(1)死循环,利用break跳出循环

//关机代码
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");//shutdown -s -t 60关机命令
while (1)
{
printf("你的电脑将在一分钟之内关机,如果输入:我是猪,将取消关机\n请输入:");
scanf("%s", &input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");//shutdown -a取消关机命令
break;
}
}
return 0;
}

猜数字游戏_随机数_02

2.猜数子游戏

在这里特别说明一个知识点

生成一个随机数用rand()函数,但是如果需要每次生成随机数都不一样,就需要rand()需要调用srand()函数随机数生成器(srand(参数)参数不同可以生成不同的随机数),而srand()需要调用(unsigned int)time(NULL)(时间戳)保证srand()生成不同得随机随机数

即srand((unsigned int)time(NULL))需要放在主函数才行,只用调用一次,如果每次玩游戏都调用一次反而生成的数不太随机,所以放在主函数main中

2.1 主函数main

首先是个主函数main,这里得主要功能是实现函数得调用,首先使用do while

循环语句来控制用户的选择输入,从而实现不同的功能

int main()
{
int input = 0;
srand((unsigned int)time(NULL));//为了是rand()能被调用
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;
}

2.2 菜单制作menu

void menu()
{
printf("***************************\n");
printf("**** 1.paly 0.exit ****\n");
printf("***************************\n");
}

2.3 游戏函数game

再次声明每次生成不同的随机数,用rand()函数,通过srand((unsigned int)time(NULL))来调用,记住引用头文件<stdlib.h><time.h>,然后利用while死循环

通过if语句控制用户输入值与生成的随机数大小的比较,并给出提示,当猜对时,使用break跳出循环

void game()
{
int ret = 0;
int guess = 0;
//生成一个随机数
//那时间戳来设置随机数的生成起始点

ret = rand()%100+1; //生成随机数1-100//用rand()函数,rand()函数需要用srand()函数调用,而srand()函数需要用到time()函数即时间戳
while (1) //(unsigned int)time(NULL)用#include<time.h>来声明
{
printf("请猜数字:>"); //(unsigned int)强制类型转换,(NULL)定义一个空指针
scanf("%d", &guess); //猜的数字
if (guess > ret)
{
printf("猜大啦\n");
}
else if (guess<ret)
{
printf("猜小啦\n");
}
else
{
printf("恭喜你,猜对啦!\n");
break;
}
}

}

猜数字游戏_主函数_03

2.4 整体代码

void game()
{
int ret = 0;
int guess = 0;
//生成一个随机数
//那时间戳来设置随机数的生成起始点

ret = rand()%100+1; //生成随机数1-100//用rand()函数,rand()函数需要用srand()函数调用,而srand()函数需要用到time()函数即时间戳
while (1) //(unsigned int)time(NULL)用#include<time.h>来声明
{
printf("请猜数字:>"); //(unsigned int)强制类型转换,(NULL)定义一个空指针
scanf("%d", &guess); //猜的数字
if (guess > ret)
{
printf("猜大啦\n");
}
else if (guess<ret)
{
printf("猜小啦\n");
}
else
{
printf("恭喜你,猜对啦!\n");
break;
}
}

}
void menu()
{
printf("***************************\n");
printf("**** 1.paly 0.exit ****\n");
printf("***************************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//为了是rand()能被调用
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;
}

留言:

欢迎评论区交流哦

标签:goto,int,srand,break,数字,printf,input,游戏
From: https://blog.51cto.com/u_15784725/5908541

相关文章

  • 「遍历」字符串中第二大的数字(力扣第1796题)
    本题为12月3日力扣每日一题题目来源:力扣第1796题题目tag:遍历题面题目描述给你一个混合字符串s,请你返回s中第二大的数字,如果不存在第二大的数字,请你返回-1。混合......
  • 制作一个跳跃的小球游戏
    #-*-coding:utf-8-*-importsys#导入sys模块importpygame#导入pygame模块pygame.init()#初始化pygamesize=width,height=640,480#设置窗口s......
  • python游戏编程
     一,实验目的Pygame是跨平台Python模块,专为电子游戏设计(包含图像、声音),创建在SDL基础上,允许实时电子游戏研发而不被低级语言舒服。基于这一设想,所有需要的游戏功能和理......
  • 第13章 pygame游戏编程
    一、实验目的和要求学会Pygame的基本应用二、实验环境软件版本:Python3.1064_bit三、实验过程1、实例1:制作一个跳跃的小游戏(1)代码如下:#-*-coding:utf-8-*-im......
  • Pygame小球游戏
    importsysimportpygamepygame.init()size=width,height=1000,800screen=pygame.display.set_mode(size)color=(0,0,0)ball=pygame.image.load("ball.......
  • 第十三章 Pygame游戏编程
     实例01:制作一个跳跃的小球小游戏 创建一个游戏窗口,然后在窗口内创建一个小球,以一定的速度移动小球,当小球碰到游戏窗口的边缘时,小球弹回,继续移动。  代码如下......
  • 数字逻辑课本习题二
    一、单选题(1)若在编码器中有50个编码对象,则输出二进制代码位数至少需要(  )位。  A)5  B)6  C)10  D)50(2)一个16选1的数据选择器,其选择控制(地址)输入端有( C......
  • 1796. 字符串中第二大的数字
    1796.字符串中第二大的数字classSolution{publicintsecondHighest(Strings){intmax1=-1;intmax2=-1;char[]ch=s.toChar......
  • Python实验报告——第13章 Pygame游戏编程
    实验报告实例01:制作一个跳跃的小球游戏代码如下:importsysimportpygamepygame.init()size=width,height=640,480screem=pygame.display.set_mode(size)c......
  • Python 两个数字拼接
    问题:如何将两个数字拼接解决方法:将整形数字转成字符串拼接后,在转回整形。>>>a=1>>>b=2>>>c=str(a)+str(b)>>>print(int(c))12 ......