IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言猜数字游戏 -> 正文阅读

[C++知识库]C语言猜数字游戏

文章目录



前言

猜数游戏:计算机随机生成一个100以内的正整数,给予你一定次数的猜数机会,如果准确猜中,计算机会输出“Congratulations!You are right!”;如果没猜中,计算机则输出“GAME OVER”并结束程序。(可以通过其他的一些指令来优化该游戏,使之更具挑战或趣味)


一、分析

????????要让计算机随机生成一个数字,需要用到rand()函数,它会随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX 是?<stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道?RAND_MAX 的具体值,把它当做一个很大的数来对待即可。但是仅使用rand()函数生成的“随机数”是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为种子。种子和随机数之间是存在正态分布的关系的。因为种子在计算机启动的时候是随机的,但计算机启动后它就不再发生变化了;即每次启动计算机后,种子就定值了,所以根据公式推导出来的随机数也固定了。

????????那如何生成一个在每次运行时都不同的数字呢?

? ? ? ? 这需要用到srand()函数,它是用来初始化随机种子数的。它需要一个 unsigned int 类型的参数。

????????因为time的值是每时每刻都不同的,我们就需要使用到time()函数(要在代码前加上<time.h>的头文件),我们可以用当前时间来获取这个种子数,由于每一次运行的时间都不同,则我们获得的种子也不同,根据公式推导出来的随机数也不相同,这时我们调用rand(),让它根据提供给srand()的种子数返回一个随机数,需要100以内的随机数,我们就再让这个随机数对100取模就行了。

????????获得随机数的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int a;
    srand((unsigned)time(NULL));
    a = rand()%100;
    printf("%d\n", a);
    return 0;
}

? ? ? ? 接下来,输入一个数,让计算机判断是比随机数大还是小,直到猜对为止。

? ? ? ? 使用while循环来多次猜数,猜对了就退出循环结束程序。

	#include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int main(void)
    {
        int a,b;
	    srand((unsigned)time(NULL));
	    a=rand()%100;
	    printf("请猜一个数(0~100)\n");
        while(1)
	    {
		scanf("%d",&b);
		if(b>a)
		printf("大了,请继续);
		if(b<a)
		printf("小了,请继续);
		if(b==a)
		{
			printf("Congratulations!You are right!\n");
			break; 
		}
    }
    return 0;
}

基本的猜数游戏就到这了。

我们可以通过限定次数让游戏变得更有趣:

在循环猜数之前定义一个整数,每循环一次,这个整数就自减一次,当这个数自减为0则跳出循环并输出“GAME OVER!”? ? ? ? 猜对之后用exit()直接结束程序,()内为负数提前结束程序。

是不是感觉GAME OVER!也没什么趣味?

我们先了解一下关机的代码(只能在Windows操作系统上实现):

system("shutdown -s -t 50");

shutdown就是令计算机关机或者重新启动的指令,“-s”表示关机,“-r”表示重启,“-t 50”表示在五十秒后关机或重启。

再了解一下取消关机的代码:

system("shutdown -a");

在次数消耗完之后,用户的电脑将关机,想要取消关机怎么办呢?

不妨再给用户一次机会,如果用户能输对你预先设定的一个密码,那就可以取消关机并输出一些图案或者字符。(可以预设为你男\女朋友生日,然后输出一个红色爱心和告白的话哈哈哈)

输出爱心图案的代码如下:

#include<stdio.h>
#include<math.h>
int main(void)
{
    float y,x,z;
	for(y=1.5f;y>-1.5f;y-=0.1f)
	{
		for(x=-1.5f;x<1.5f;x+=0.05)
		{
			z=x*x+y*y-1;
			putchar(z*z*z-x*x*y*y*y<=0.0f?'*':' ');
		}
		putchar('\n');
	}
    return 0;
}

使用颜色和清屏指令后输出效果更佳

颜色(前一个X是背景色,后一个X是字体色,均使用16进制表达,自行百度其代表颜色):

system("color XX");

清屏(要加头文件<windows.h>:

system("cls");


二、结果


1.代码

该游戏完整代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>?
#include<math.h>
int main(void)
{
?? ?system("color 87");
?? ?int a,b,sum,h,l;        //sum是你设定的猜数次数,l是你输入的密码
?? ?sum=5;
?? ?h=123456789;        //这里是你预设的一个密码
?? ?srand((unsigned)time(NULL));
?? ?a=rand()%100;
?? ?printf("请猜一个数(0~100)\n");
?? ?while(1)
?? ?{
?? ??? ?sum--;
?? ??? ?scanf("%d",&b);
?? ??? ?if(b>a)
?? ??? ?printf("大了,你还剩下%d次机会,请继续\n",sum);
?? ??? ?if(b<a)
?? ??? ?printf("小了,你还剩下%d次机会,请继续\n",sum);
?? ??? ?if(b==a)
?? ??? ?{
?? ??? ??? ?printf("Congratulations!You are right!\n");
?? ??? ??? ?exit(-1);?
?? ??? ?}
?? ??? ?if(sum==0)
?? ??? ?{
?? ??? ??? ?printf("GAME OVER!!!\n");
?? ??? ??? ?printf("你还有一次输入密码的机会,否则你的计算机将关机。\n");?
?? ??? ??? ?system("shutdown -s -t 60");
?? ??? ??? ?break;?
?? ??? ?}
?? ?}
?? ?scanf("%d",&l);
?? ?if(h==l)
?? ?{
?? ??? ?system("cls");?
?? ??? ?system("color f4");
?? ??? ?float y,x,z;
?? ??? ?for(y=1.5f;y>-1.5f;y-=0.1f)
?? ??? ?{
?? ??? ??? ?for(x=-1.5f;x<1.5f;x+=0.05)
?? ??? ??? ?{
?? ??? ??? ??? ?z=x*x+y*y-1;
?? ??? ??? ??? ?putchar(z*z*z-x*x*y*y*y<=0.0f?'*':' ');
?? ??? ??? ?}
?? ??? ??? ?putchar('\n');
?? ??? ?}
?? ??? ?printf("Just Like You.\n");
?? ??? ?system("shutdown -a");
?? ?}
?? ?return 0;
?? ?Sleep(5000);
}


2.测试

测试结果如下:


?猜错之后再正确输入密码后的测试结果

?猜数次数内猜对的测试结果



总结

该游戏用到了rand()、srand()、time()等函数,还有shutdown等指令,难度也不高,只是使用的命令较多。不嫌弃的话快拿去整蛊你的小伙伴吧!

以上就是猜数游戏的全部内容了。若发现不足,欢迎指正,感谢你的观看。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:24:25  更:2021-11-12 19:24:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:02:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码