游戏开发 - Math对象相关知识讲解

前几期小编给大家总结了JavaScript的基础知识,为我们后期深入学习JS打下了一定的基础。在后面的几期文章当中我们要来进行JS小游戏的开发,但是开发小游戏的前提我们需要掌握Math对象,它是开发小游戏必不可少的一个知识点。

本文内容概要:

1 为何要学习Math对象

2 Math对象是什么

3 使用random()方法产生随机数

4 使用Math对象的方法进行取整

5 根据范围产生随机数

6 课程小结

7 课后作业

1 为何要学习Math对象

在生活中我们可能会遇到“随机抽签”、“随机点名”、“抽奖”等事情,它们的共同点都是要求“随机”产生。那在JS里面,我们如何才能实现“随机”的效果?可以利用Math对象来达到相应的效果,具体接着往下看吧。

2 Math对象是什么

Math对象是属于JS内置的对象,换句话说,不需要我们人为的去创建对象(通过new操作符创建对象)而是可以直接的去使用Math对象里面的方法/属性,如:Math.random()等。

3 使用random()方法产生随机数

实例:

<script type="text/javascript">
  var randomNum = Math.random();


  // 输出产生的随机数
  console.log(randomNum);
</script>

结果:

结论:

从结果当中我们可以得出结论:random()方法返回介于0和1之间的一个随机数,不包括0和1。

4 使用Math对象的方法进行取整

前面几期我们接触过了使用parseInt()方法来进行取整,但是该方法不管后面小数的值是多少,都是直接舍去小数部分,比如parseInt(1.7);等于1,parseInt(0.5);等于0。如果想具体了解parseInt()的使用,可以回复“操作”到“HTML5学堂”公众号。Math对象里面封装了三种不同的舍入方法,便于开发者根据不同的情况采取不同的取整方式。

ceil()它将数值向上舍入为最接近的整数

实例:

<script type="text/javascript">
  console.log(Math.ceil(-0.2));
  console.log(Math.ceil(0.2));
  console.log(Math.ceil(-1.2));
  console.log(Math.ceil(-4.2));
  console.log(Math.ceil(5.2));
</script>

结果:

注意:负数的值越大,数值就要越小,所以负数向上取整的时候,数值要变小;

round()它将数值四舍五入为最接近的整数

实例:

<script type="text/javascript">
  console.log(Math.round(-0.2));
  console.log(Math.round(0.24));
  console.log(Math.round(-1.5));
  console.log(Math.round(-4.2));
  console.log(Math.round(5.5));
  console.log(Math.round(-2.5));
</script>

结果:

注意:当负数的小数等于0.5的时候,不会发生“整数进一”的现象,只有负数的小数大于0.5的时候,才会发生“整数进一”的现象;

floor()它将数值向下舍入为最接近的整数

实例:

<script type="text/javascript">
  console.log(Math.floor(-0.2));
  console.log(Math.floor(0.2));
  console.log(Math.floor(-1.2));
  console.log(Math.floor(-4.2));
  console.log(Math.floor(5.2));
</script>

结果:

注意:负数的值越小,数值就要越大,所以负数向下取整的时候,数值要变大;

5 根据范围产生随机数

现在我们可以使用random()方法产生0~1的随机数,那如何产生0~15(不包括0和15)的随机数?

实例:

<script type="text/javascript">
  console.log(Math.random() * 15);    
</script>

结果:产生0 ~ 15的数,如:9.664246013519413、10.470054313898528,随机的结果都不是整数;

小编提出了另外一个需求:那如何产生0~15(不包括0和15)的随机整数?

实例:

<script type="text/javascript">
  console.log(Math.ceil(Math.random() * 14)); 
</script>

结果:产生1 ~ 14的整数;1乘以小于1(Math.random())的数结果肯定是小于1的小数,再向上取整最大只能是1;14乘以小于1(Math.random())的数结果肯定是小于14的数(包含小数部分),再向上取整最大只能是14;

小编又提出了另外一个需求:如何产生1 ~ 8的整数,包括1和8?

实例:

<script type="text/javascript">
  // 方法一:四舍五入
  console.log(Math.round(Math.random() * 7) + 1);


  // 方法二:向上取整
  console.log(Math.ceil(Math.random() * 8));  


  // 方法三:向下取整 
  console.log(Math.floor(Math.random() * 8) + 1);  
</script>

问题:三种舍入方法都可以实现根据范围产生随机数,那我们平常推荐使用哪一种方法?

下图是小编做了部分概率分析的结果

结论:从结果中得出,使用floor()方法概率会比较均等,所以小编推荐大家平常使用向下取整来产生相应的随机数,这样概率会相对均等一点。

根据范围产生的随机数其实是有一定的规律,小编推荐大家使用下面的公式来产生随机数,简单快捷。

公式:Math.floor(Math.random() * 可能值的总数 + 第一个可能的值 );

6 课程小结

可以通过Math.random()方法产生0 ~ 1的随机数;

为了保证产生的随机数是整数,我们可以使用floor()、ceil()、round()进行取整;

为了让产生的随机数概率相对均等一点,推荐使用floor()方法进行取整;

根据范围产生随机数我们可以利用该公式:Math.floor(Math.random() * 可能值的总数 + 第一个可能的值 );

7 课后作业

点击粉红色的色块,产生一个随机数,然后根据产生的随机数选中一个块设置样式为粉红色。

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2016-07-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

重温Delphi之:面向对象

任何一门语言,只要具备了"封装,继承,多态"这三项基本能力,不管其实现方式是直接或曲折、复杂或简洁,就可以称之为“面向对象”的语言。 Delphi当年的迅速走红...

1836
来自专栏机器之心

入门 | 一文带你了解Python集合与基本的集合运算

了解 Python 集合: 它们是什么,如何创建它们,何时使用它们,什么是内置函数,以及它们与集合论操作的关系

913
来自专栏Java帮帮-微信公众号-技术文章全总结

第二天 变量数据类型运算符【悟空教程】

1296
来自专栏进击的君君的前端之路

JavaScript面向对象编程指南 第一、二章知识点整理

1035
来自专栏前端小栈

正则详解

转自: JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路

713
来自专栏程序员叨叨叨

5.3 结构类型

Cg 语言支持结构体(structure),实际上 Cg 中的结构体的声明、使用和 C++ 非常类似(只是类似,不是相同)。一个结构体相当于一种数据类型,可以定...

492
来自专栏好好学java的技术栈

“365算法每日学计划”:java语言基础题目及解答(11-15打卡)

自从开始做公众号开始,就一直在思考,怎么把算法的训练做好,因为思海同学在算法这方面的掌握确实还不够。因此,我现在想做一个“365算法每日学计划”。

571
来自专栏有趣的Python

Python零基础入门看完这一篇就够了: 零基础入门笔记Python开发环境搭建Python的初次体验Python变量和数据类型Python集合类型:list和tuplePython的条件判断和循环

学习python有一年多了,希望通过这篇两万字的学习笔记来复习了,也能让后来者少走一点弯路。在慕课网课程笔记的同时加入了一部分自己的经验补充。 [√] 慕课网P...

4708
来自专栏mukekeheart的iOS之旅

Java基础学习(学习IT企业必读的324个JAVA面试题.pdf 整理)

一、Java程序基础 javac 文件名.java    编译程序    java 类名               运行java程序 代码规范中,一下几点要注...

2069
来自专栏锦小年的博客

python学习笔记2.2-print函数以及格式化输出

上一节已经安装好运行环境以及各种库,接下来就要开始正式编程了。与国际接轨,接触一门语言的第一次编程,一定是在屏幕上打印“hello world”。python...

1885

扫描关注云+社区