【c语言】和【Java】版本的猜数字小游戏
目录
前言
一、c语言版本
1.游戏设计思路
2.rand()及srand()函数的使用
2.取模确定取值范围
3.条件运算符
4.利用二分法进行猜测
二、java版本
1.Math.random()的用法
2.整体代码展示
总结
前言
系统随机提供一个某范围内的数字,让用户进行逐步地猜测,那么你是否能猜出系统先生心中所想的数字呢?
今天为大家带来一个c语言和java版本的猜数字小游戏,虽然实现过程十分简单,但也有些小细节希望初学者能够理解掌握。
(注:1.文中代码段由作者自己编写,若有纰漏或错误,欢迎大家指正;2.作者本人为初学者,编程水平有待提高,所写博客皆为本人的笔记和一些简单知识的分享,还望各位路过的大佬嘴下留情)
一、c语言版本
1.游戏设计思路
我们先来探讨一下猜数字小游戏的整体设计思路。
- 首先我们需要系统提供一个[0,100]范围内的随机整数(可自定义范围),再进行逐步猜测。
- 其次对于我们所输入的不同数字,系统根据判断作出三种不同的答复:
ⅰ当输入数字小于系统所给数字,则输出“You guessed the number down”,猜测继续;
ⅱ当输入数字大于系统所给数字,则输出“You guessed the number up”,猜测继续;
ⅲ当输入数字等于系统所给数字,则输出“Congratulations! You guessed it”,猜测结束。
2.rand()及srand()函数的使用
当我们理解了整体设计思路之后,就可以正式开始敲写程序了。
如何让系统为我们提供一个0到100的随机整数呢?这时c语言中的rand()函数就派上用场了。
rand()函数:系统会随机提供一个位于 0 ~ RAND_MAX 之间的整数。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。
一个随机数生成的实例:
#include <stdio.h>
#include <stdlib.h> //需调用rand()函数
int main()
{int a = rand();printf("%d\n",a);return 0;
}
运行结果实例:
可是当我们多次运行这段程序时,就会产生疑问了,为什么我每次生成的随机数都是一个数呢?随机数难道不随机吗?
其实并不然,实际上,rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。
种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了,也就是说,每次启动计算机以后,种子就是定值了。
那我们到底如何才能真正地生成一个随机数呢,这时我们就可以使用标题中所提到的srand()函数来对“种子”进行重新“播种”。
“播种”原理:srand()函数需要一个 unsigned int 类型的参数,使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒),用时间作为参数:srand((unsigned)time(NULL))
只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同、
对之前的代码进行修改:
#include <stdio.h>
#include <stdlib.h> //需调用srand()函数
#include <time.h> //需调用time()函数
int main()
{int a;srand((unsigned)time(NULL));a = rand();printf("%d\n", a);return 0;
}
多次的运行结果实例:
具体的随机教程可见下方链接,在此只做部分的知识分享(作者本人也是通过此教程进行学习的)C语言随机数生成教程,C语言rand和srand用法详解 (biancheng.net)http://c.biancheng.net/view/2043.html
2.取模确定取值范围
当我们掌握了rand()及srand()函数的用法,接着就可以对这个随机数进行一个范围的圈定,在本文我们采用取模的方法确定随机数在[0,100]之内。
确定范围:
int a = rand()%100;
分析:
取模即取余,而其余数的范围即是随机数范围的子集。
当被除数小于101时,其余数皆为0;
当被除数无论多大,其余数最大只能为100,因为当你余数大于或等于100时,只能说明你没有除尽;
这样我们就得到了随机数的范围[1,100]。
3.条件运算符
当我们获得了[0,100]内的一个随机整数,问题基本上已经解决的差不多了。
下面展示完整代码:
#include<stdio.h>
#include<stdlib.h> //需要调用rand()及srand()函数
#include<time.h> //需要调用time()函数 int main()
{//每秒进行一次播种 srand((unsigned)time(NULL));//系统随机给出一个整数 int r_number = rand() % 101; //函数返回一个0~RAND_MAX范围内的整数,取模确定取值范围 //用户循环输入整数,进行猜测printf("Please guess\n"); //打印提示信息int number = -1;while (number != r_number) //用户猜测数字不等于随机数字,满足条件进行循环{scanf("%d", &number);if (number != r_number)printf((number > r_number) ? "You guessed the number up\n" : "You guessed the number down\n");elseprintf("Congratulations! You guessed it");}
}
下面展示运行结果:
有的朋友或许会对第18行的代码有些疑惑,这里有一个小小的知识点,关于条件运算符的使用。
条件运算符的使用:
首先我们先来看一段代码
if(a > b) {max = a; } else {max = b; }
我们可以尝试用条件运算符来优化这段代码
max = (a>b) ? max=a : max=b;
第一段代码通过使用条件运算符便简化成了一串代码,可见条件运算符的便利之处。
什么是条件运算符呢?
条件运算符是由一组“?”和“:”两个符号组成,判断“?”前的表达式的真假,若真,执行“:”前的语句;若假,执行“:”后的语句。
条件运算符的一般形式:
表达式1 ? 表达式2 : 表达式3;
当我们掌握了条件运算符的使用后,再来看第18段代码究竟是什么意思?
printf((number > r_number) ? "You guessed the number up\n" : "You guessed the number down\n");
首先判断number是否大于r_number,若是,则输出“You guessed the number up”;若否,则输出“You guessed the number down”。
这样一来,对于条件运算符存在疑惑的朋友们是不是能够理解了呢。
4.利用二分法进行猜测
为什么说方法正确的话,100以内的数最多猜7次就够了呢?
这里再为大家分享一个猜测100以内的数的方法,叫做二分法。
二分法查找:
数据是按升序排序的,对于给定值1,从序列的中间位置50开始比较,
如果当前位置等于key,则查找成功;
若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];
若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high],
直到找到为止
我们来分析100以内猜数字的最坏情况复杂度:假设系统给出的随机数为1,见下图:
对于给定值1,从序列的中间位置50开始比较,1小于当前位置值50,则在数列的前半段中查找,如此反复,在经过7次的猜测后,我们终于猜到了系统所给的值。
所以说100以内的数最多猜7次就够了。
二、java版本
1.Math.random()的用法
java版本的猜数字小游戏与c语言版本的整体设计思路相同,但值得注意的是,在java版本中使系统提供随机数的方法与c语言版本不同,这里提供其中一种方法,运用Math.random()语句。
Math.random()语句:
是一个随机函数。利用该函数可以取得0到1之间的随机小数,如果想得到一个大于1的随机值,则需要再乘以一定的数值来实现。
而这里我们需要得到一个[1,100]的随机整数,
首先我们将Math.random()乘以100再加一,此时其范围为[0,101)的浮点数;
其次再将Math.random()强制转换为整形,如下:
int r_number = ((int)(Math.random()*100+1));
2.整体代码展示
如此,我们便得到了系统提供的一个随机数,下面展示整体代码:
package text;import java.util.Scanner;public class Text { public static void main(String[] args) {//系统随机给出一个整数 Scanner in = new Scanner(System.in);int r_number = ((int)(Math.random()*100+1)); //用户循环输入整数,进行猜测System.out.println("Please guess"); //打印提示信息int number = 0;while (number != r_number) //用户猜测数字不等于随机数字,满足条件进行循环{number = in.nextInt();if (number != r_number)System.out.print((number > r_number) ? "You guessed the number up\n" : "You guessed the number down\n");elseSystem.out.print("Congratulations! You guessed it");} }
}
运行结果展示:
总结
以上便是对于c语言和java版本的猜数字小游戏的代码设计分享,虽说其过程十分简单,但还是希望能够帮到大家 。如若文章存在纰漏或错误,欢迎大家指正,谢谢!
【c语言】和【Java】版本的猜数字小游戏相关推荐
- 教你如何用C语言设计一个有趣的猜数字小游戏
目录 前言 猜数字游戏 打印菜单 处理玩家选择的操作 编写猜数字游戏函数 游戏中要猜数字从哪来?(配置随机数生成器) 时间戳 开始生成随机数 game函数内部编写 完整代码 总结 前言 好久不见,今天 ...
- C语言、C++与Java分别实现猜数字小游戏
系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 "Too small!!!", 如果输入的数字比该随机数大, 提示 & ...
- 初识JAVA:猜数字小游戏案例---系统产生一个1-100之间的随机数,猜出这个数是多少?
package com.pku.wuyu.io; import java.util.IllegalFormatCodePointException; import java.util.Random; ...
- Java语言实现猜数字小游戏
之前笔者在学习C语言的初级阶段,就已经实现了用C语言简单实现猜数字小游戏,既然笔者最近在学习Java的初级阶段,那么,也应该写一个Java语言实现的猜数字小游戏!! C语言实现猜数字小游戏:原文链接为 ...
- Java版 猜数字小游戏
猜数字小游戏是一定是大家学习C语言编程的第一个或者是前几个小小项目了吧,今天,我们使用Java进行猜数字小游戏的实现 有对猜数字小游戏的基本思想不清楚的可以看这篇博客,里面是用C语言进行的实现以及相关 ...
- 用python做C语言的猜数字游戏,[Python3 练习] 007 简单的猜数字小游戏
题目:简单的猜数字小游戏 (1) 描述 程序随机生成一个数字,玩家用键盘输入所猜数字,在规定次数内猜对为胜. (2) 要求 程序随机生成一个 1 到 100 的自然数 有 7 次机会去猜 机会用尽之前 ...
- JAVA猜数字小游戏(随机数Random类)
快乐JAVA,通过不断的摸索,从C到PHP再到Python,Python再到Java-终于被我找到了属于我的本命编程语言(泪目).学起来很开心,很快乐,这种感觉就像和初恋谈恋爱一样,编程不再是写代码, ...
- java编写数字游戏大全_Java编写猜数字小游戏
本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 以下是java语言写的一个猜数字小游戏引用片段: import java.text.simpledateformat; impo ...
- 猜数字游戏java编程_Java编写猜数字小游戏
本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 以下是Java语言写的一个猜数字小游戏引用片段: import java.text.SimpleDateFormat; impo ...
最新文章
- mysql distinct多个字段_深入浅出Mysql索引的那些事儿
- sublime text 心得
- ICCV 2019 COCO Mapillary挑战赛冠军团队技术分享
- powerquery mysql数据库_window 10 下 --excel | power query 通过 ODBC链接 mysql 数据库
- 如何在 ASP.NET Core 中使用 Route 特性
- RocketMQ 主从同步机制
- NYOJ题目289/456/49-01背包问题汇总
- 软件工程 部分术语英文缩写
- abab的四字成语_以abab的四字成语
- 如何使用C++做个简单推箱子游戏
- python decorate 的秘密
- Linux服务器搭建——VMware14安装
- Atmel跑Linux的arm芯片,linux下烧写atmel芯片
- Fastq文件大小和测序覆盖度初探
- lego-loam 跑 kitti00包(kitti2bag+lego-loam+evo)详细版
- 结对编程项目-四则运算阶段性总结
- 信息系统集成-辅助知识-知产/法律法规/标准化
- 多视图CAD检测系统乳腺X线摄影基于案例的检测性能优化
- java实现直角三角形、倒三角和等腰三角形的实现
- 在西瓜数据集上用Python实现ID3决策树算法完整代码
热门文章
- 【规划】RRT*算法图解
- ios %.2f是四舍五入吗?
- 学计算机的今年去当兵 转士官难吗,青年当兵学技术后,转士官到底难不难?这个答案要周知...
- python生成一段日期的学生随机体温表
- 前端:你可能不知道的动态组件玩法
- 最受欢迎的有养生养颜功效的15种零食
- C#服务器NFS共享文件夹搭建与上传图片文件
- html5绘制八卦图,用cad画八卦图的方法步骤详解
- YAM-SWD脱机下载器+DAP+串口三合一工具使用教程V1.0
- 用自信克服恐惧心理——职场人士寓言(15)