大家好,我是一只励志要翻身的小牛,废话少说,下面就给大家介绍第一个C语言小游戏——猜数字小游戏!

文章目录

一、游戏规则

二、效果展示

三、游戏设计思路

四、游戏交互界面

1.创建游戏菜单

2.创建游戏逻辑主体

五、游戏实现

1、随机数生成”三剑客“

(1)随机数生成器:rand函数

(2)随机数发生器的初始化函数:srand函数

(3)获取时间戳:time函数:

(4)三剑客的”有机结合“ -真随机的实现

2、玩家输入与判断

六、完整代码

七、结语


一、游戏规则

至于猜数字嘛,见名知意,规则无非就是:玩家反复输入猜的数字直到猜对为止,下面,我们就通过C语言实现一个1-100之间的猜数字游戏,老铁们准备好了吗,发车了!

二、效果展示

三、游戏设计思路

1.游戏交互界面

(1)创建游戏菜单

(2)创建游戏逻辑主体

2.猜数字游戏

(1)电脑生成随机数字

(2)玩家输入数字

(3)判断是否猜对

四、游戏交互界面

1.创建游戏菜单

玩游戏怎么能没有菜单呢,下面我们创建一个简易的菜单供玩家选择:

void menu()
{printf("**************************************************\n");printf("*******      1->play       0->exit        ********\n");printf("**************************************************\n");
}

2.创建游戏逻辑主体

游戏的逻辑的是否完美实现是整个游戏成败的关键,对于这样一个简单的小游戏我们可以这样实现游戏主体逻辑:

int main()
{   srand((unsigned int)time(NULL));//拿时间戳来设置随机数的生成起始点int input = 0;do {menu();printf("请选择:");scanf("%d",&input);switch (input){case 1:game();//猜数字游戏break;case 0:printf("游戏结束\n");break;default:printf("选择错误\n");break;}} while (input);//这里用do while 循环是因为这个游戏需要至少进去一次//特点:先执行,后判断return 0;
}

1、因为游戏是面向用户的,所以这里需要定义并调用菜单函数——menu()

2、因为游戏至少可以进入一次,所以用do-while()循环——代码至少执行一次

注意:while(input)——循环条件input的巧妙之处,C语言中0为假,非0为真,所以这里用户输入1或输入 其他非0数字导致错误,都会再次调出菜单让用户选择,无需增加其他条件。

当然了这里的猜数字游戏函数-game()还未定义,我们接下来我们就需要对 game()函数进行实现:

五、游戏实现

1、随机数生成”三剑客“

我们回到游戏的设计思路,其实猜数字游戏中最重要的一步就是生成随机数,那我们应该如何生成随机数呢?这里C语言为我们提供了随机数生成三剑客:rand--srand--time

(1)随机数生成器:rand函数

rand()函数的属性:int rand (void)——生成随机整数(0-32767)

分析:rand()函数接受参数为空,返回一个int类型的随机整数。头文件-stdlib.h

但是rand()函数真的随机吗?我们下面一探究竟:

#include <stdio.h>
#include<stdlib.h>
int main()
{int i = 5;while (i){int ret = rand();printf("%d\n", ret);i--;}return 0;
}

执行3次结果:

可以发现,循环5次后,每组的随机数据都一致,因此答案就很明显了,rand()函数是假随机。

(2)随机数发生器的初始化函数:srand函数

那么我们还有没有办法让它真随机呢?办法当然是有的啦,C语言同时为我们提供了一个随机数发生器的初始化函数:srand函数--配合rand函数使用,设置随机数生成起点

srand()函数属性:void srand (unsigned int seed)

分析:srand函数接受一个unsigned int类型,返回空(不需要返回值->设置随机数生成起点),头文件-stdlib.h

执行结果:

可以发现,rand函数生成的随机值随srand函数接受参数变化而变化,要想让rand函数生成一个随机数,srand函数就需要接收一个随机值

(3)获取时间戳:time函数:

那么这个随机值去哪找呢?因为时间是不断变化的,因此我们可以让srand函数接收一个时间戳。 这里引出获取时间戳:time函数:

time函数属性:time_t time (time_t* timer)

分析:time函数接收一个指针类型,返回time_t类型,头文件-time.h

(4)三剑客的”有机结合“ -真随机的实现

1.rand函数的属性:int rand (void)

2.srand函数属性:void srand (unsigned int seed)

3.time函数属性:time_t time (time_t* timer)

了解了“三剑客”各自的属性,就可以开始配置随机数生成器,实现“真随机 ”

//生成随机数的大致逻辑结构
#include<stdlib.h>
#include<time.h>
int main()
{srand((unsigned int)time(NULL));int ret = rand();return 0;
}

注意:

1、time函数接收指针类型参数,所以传入NULL-空指针

2、srand函数接收unsigned int类型参数 ,所以将time返回类型time_t转换为unsigned int类型

2、玩家输入与判断

玩家输入与判断模块通过简单的while循环语句与if判断语句即可实现,这里就不再分开赘述,代码如下:

void game()
{int a = 0;//rand()函数生成一个随机数int ret = rand() % 100 + 1;//1-100之间的随机数while (1)//1为真,让他一直循环,直到猜对{printf("请猜数字:");scanf("%d", &a);if (a > ret){printf("猜大了\n");}else if (a < ret){printf("猜小了\n");}else{printf("恭喜你,猜对了!\n");break;}}
}

注意:

1、这里的srand函数放到了主函数中,因为调用一次函数就会设置一个随机数的生成器,不需要重复调用。

2、 rand()%100+1的含义:因为rand生成随机整数范围是(0-32767),所以rand()%100限定了范围(0-99),加1满足(1-100)范围需求。

六、完整代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{printf("**************************************************\n");printf("*******      1->play       0->exit        ********\n");printf("**************************************************\n");
}
void game()
{int a = 0;//rand()函数生成一个随机数int ret = rand() % 100 + 1;//1-100之间的随机数while (1)//1为真,让他一直循环,直到猜对{printf("请猜数字:");scanf("%d", &a);if (a > ret){printf("猜大了\n");}else if (a < ret){printf("猜小了\n");}else{printf("恭喜你,猜对了!\n");break;}}
}
int main()
{   srand((unsigned int)time(NULL));//拿时间戳来设置随机数的生成起始点int input = 0;do {menu();printf("请选择:");scanf("%d",&input);switch (input){case 1:game();break;case 0:printf("游戏结束\n");break;default:printf("选择错误\n");break;}} while (input);//这里用do while 循环是因为这个游戏需要至少进去一次//特点:先执行,后判断return 0;
}

七、结语

铁汁们,猜数字游戏这点事大家都明白了吗?如果本文对你有所帮助的话,请给博主一个一键三连哦

猜数字小游戏(随机生成’三剑客‘)相关推荐

  1. 第三次学JAVA再学不好就吃翔(part28)--猜数字小游戏

    学习笔记,仅供参考 面向对象 猜数字小游戏 随机生成一个1 ~ 100之间的数,我来猜是几: import java.util.Scanner;class GuessNumTest {public s ...

  2. 模拟登录,给三次机会,并提示还有几次。如果登录成功,就可以玩猜数字小游戏了。

    1.猜字谜小游戏 *随机生成一个数 *从键盘录入一个数与随机数进行比较,判断是大了还是小了 * */ package test1;import java.util.Scanner;public cla ...

  3. C语言详解生成随机数的过程,time函数、时间戳timer、rand函数和srand函数,附猜数字小游戏

    第十一篇:随机数详解 一.准备工作(预备知识) 1.1.生成伪随机数(函数rand) 1.2.伪随机数"变成"随机数(函数time) 1.3.生成确定范围随机数 二.练手随机数经典 ...

  4. 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏

    目录 [iVX 初级工程师培训教程 10篇文拿证]01 了解 iVX 完成新年贺卡 [iVX 初级工程师培训教程 10篇文拿证]02 数值绑定及自适应网站制作 [iVX 初级工程师培训教程 10篇文拿 ...

  5. java 做猜数字小游戏_Java Properties类:利用Properties类制作猜数字小游戏

    在学习Random类时我们制作过猜数字小游戏,学习了Properties类后,可以为此游戏添加保存得分记录功能 游戏规则: 玩家可以选择玩游戏还是查看得分 玩游戏: 首先玩家需要选择难度: 难度级别 ...

  6. 带登录页面的猜数字小游戏

    本内容包含:登录页面+注册页面+猜数字小游戏页面 登录页面:手机号+密码+校验码+随机校验码+登录按钮+注册 注册页面:手机号+密码+密码确认+注册按钮 游戏页面:标题(提示框)+输入框+猜一下+重置 ...

  7. 微信小程序开发实例:猜数字小游戏

    这学期选修了<微信小程序设计>这门通识课,最近准备把本学期的部分小作业整理一下. 一.案例描述 设计一个微信小程序,由后台生成一个0~100的随机整数,用户猜这个整数,并在输入框中输入用户 ...

  8. Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面

    Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面 from tkinter import * from tkinter import messagebox 导入提示框 from ...

  9. Python|猜数字小游戏

    Python Python猜数字小游戏 说明 分析 代码实现 补充说明 Python猜数字小游戏 说明 通常由两个人参与,一个人设置一个数字,一个人猜数字,当猜数字的人说出一个数字,由出数字的人告知是 ...

最新文章

  1. C++赋值运算符和拷贝构造函数区别
  2. 套接字(socket)基本知识与工作原理
  3. 功能区不显示工具条_【新老客户必知】软件支持超高清屏显示器了
  4. android WebView总 结
  5. JAVA 搭建基于SPRINGBOOT的SSM(SPRING + SPRINGMVC + MYBATIS)的MAVEN项目
  6. Python与Go插入排序
  7. 原创 leetcode[454]四数相加II /4Sum II 哈希策略
  8. 居中为什么用transform,而不是margin top/left
  9. React开发者工具 React Developer Tools 的下载
  10. 怎样写好一篇高质量的技术文章?
  11. 排列组合的一些公式及推导
  12. Origin | 数据处理 | 公式编辑栏 | F(x)栏的使用 | 数据提取 | 数据筛选及删减
  13. Mongodb常用查询
  14. 游戏引擎——cocos2d-x
  15. 互动云渲染——云原生渲染的初步探索
  16. lenovo服务器换系统重装系统_thinkserver服务器怎么重装系统?
  17. 我来告诉你哪个银行的信用卡最好用!
  18. 该如何提升自己的编程能力?
  19. Thinkpad-L14双系统装机
  20. 全国计算机二级web考试试题,全国计算机二级Web模拟试题及答案(1)

热门文章

  1. 关于win10 睡眠或关屏恢复后卡顿的问题
  2. 51单片机c语言宏定义是什么意思,51单片机的C语言宏定义应用.doc
  3. Purdue, Mathematics Area Examination 学习笔记(1)
  4. css3的含义是什么
  5. 机器学习—决策树模型
  6. 回顾过去 展望未来(写给自己)
  7. 深访杨超越杯编程大赛发起人 还原硬核粉丝追星全过程
  8. Excel公式:用COUNTIF、COUNTIFS函数进行排序和查重,用LOOKUP函数对无序表进行精确查询
  9. 【汇正财经】11.7日盘面回顾和行情解析
  10. linux挂载ntfs格式分区,Linux上挂载NTFS分区(Mount)