《Android游戏开发详解》一2.20 对象的更多实践——模拟一个色子
本节书摘来异步社区《Android游戏开发详解》一书中的第2章,第2.20节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.20 对象的更多实践——模拟一个色子Android游戏开发详解
在我们的下一个项目中,将模拟一个六面色子的滚动。色子会出现在许多现代的桌上游戏中,因为它们增添了不可预期的因素,如图2-26所示。在本节中,我们将展示在Java程序中如何模拟这种随机性。
我们首先创建一个名为“DiceProject”的新的Java项目。其中,创建一个名为DiceMaker的新的类,并且像通常一样给它一个main方法。
要产生一个随机数,我们必须使用Java库中名为Random的一个内建类。我们使用熟悉的对象创建语法来创建一个Random对象,如程序清单2.22的第4行所示。
程序清单2.22 DiceMaker.java
1 public class DiceMaker { 3 public static void main(String[] args) { 4 Random r = new Random();
应该注意到,Eclipse告诉你在创建Random对象的代码行中有一个错误,如图2.27所示。
一旦将鼠标移动到关键字Random上,将会出现如下所示的信息。
Random cannot be resolved to a type
这只是告诉你,编译器不能创建一个Random类型的对象,因为它不知道Random类在哪里。
要修正这个问题,必须提供完整的地址,让编译器知道在哪里找到Random。想要的Random类可以在java.util.Random中找到(这是UnitedKingdom.London.221BBakerSt形式的地址)。让我们导入这个类,如程序清单2.23第1行所示。
程序清单2.23 导入java.util.Random
1 import java.util.Random; 3 public class DiceMaker { 5 public static void main(String[] args) { 6 Random r = new Random();
既然已经告诉计算机在哪里找到Random,我们就能够调用这个方法了。我们感兴趣的是nextInt()方法,它接受一个整数,并且返回0(包括)到所接受的整数(不包括)之间的一个值。
例如,r.nextInt(6)将会随机地产生如下所示的数字之一。
0, 1, 2, 3, 4, 5
如果我们想要生成1到6之间的数字,直接给结果加上1就行了,如程序清单2.24中的第7行和第8行所示。
程序清单2.24 模拟色子滚动
01 import java.util.Random; 03 public class DiceMaker { 05 public static void main(String[] args) { 06 Random r = new Random(); 07 int randNum = r.nextInt(6) + 1; 08 System.out.println("You have rolled a " + randNum);
运行该程序的时候,将会看到如下所示的结果之一。
You have rolled a 1 You have rolled a 2 You have rolled a 3 You have rolled a 4 You have rolled a 5 You have rolled a 6
Random类有哪些应用呢?当英雄杀死怪兽的时候,你可以选择实现一个随机数生成器来决定丢下什么物品。当在类似Minecraft这样的游戏中生成地图的时候,也可以使用随机数生成器。真的有无数种可能性。
java.util.Random有多随机
我们已经使用了Random类来模拟随机性,但是,它并没有实现真正的随机性。尽管它似乎产生了随机数,但实际上它遵循了一个公式,该公式生成理论上可以预测的结果。我们将这种现象叫作伪随机数(pseudo-random)。这对我们编写游戏不可能有任何影响,但是它引发了一个有趣的讨论。长期来讲,你可以肯定地期待这个随机数生成器将会生成所有可能的数字的一个一致的分布。如果你想要学习有关真正的随机性的更多知识,请访问Random.org网站。
关于导入的更多介绍
在上面的示例中,我们必须导入java.util.Random。这是我们将要从Java库导入的Random类的全名。
Java库组织成包的形式,其中包含了可以在代码中使用的各种类。无论何时,当你想要使用Java库中的一个类的时候,都必须告诉程序,在哪里可以找到这个类所在的包(完整名称)。
并不是所有的对象都需要导入。例如,属于java.lang包的String,由于它如此常用,实际上会自动导入。下一小节所要介绍的数组,也是不用导入就可以创建。
Fragment 是一种可以嵌入在 Activity 当中的 UI 片段,它能让程序更加合理和充分地利用大屏幕空间,因在平板上应用的非常广泛。
到这里你可能会有些懵,啥玩意?下面的举个例子:想象我们正在开发一个做一个页面,其中使用 RecyclerView 展示了一组新闻的标题,当点击了其中一个标题时,就打开另一个界面显示新闻的详细内容。如果...
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- [Android Pro] activity-alias的使用
- Android_(游戏)打飞机06:后续
- Android_(游戏)打飞机03:控制玩家飞机
- Android开发之旅:android架构
- Android 开发之旅:短信的收发及在android模拟器之间实践(一)
- 【ANDROID游戏开发之二】剖析游戏开发用VIEW还是SURFACEVIEW ?!
- 【ANDROID游戏开发十三】(保存游戏数据 [下文])详解SQLITE存储方式,并把SQLITE的数据库文件存储在SD卡中!!!
- 【ANDROID游戏开发二十一】ANDROID OS设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美
- 【已解决】unity4.2.0f4 导出Android工程报错:Error building Player: ArgumentException: Illegal characters in path. [unity导出android工程 报错,路径含有非法字符]
- Android Studio怎么快速生成set方法和get方法
- Android TextView判断内容是否超过宽度
- android 8.1 9.0 10.0 app安装黑名单(限制app安装)
- 自己动手写Android数据库框架
- Unity3d代码从Android/IOS迁移到WindowsPhone经验笔记
- 【Android 逆向】ART 函数抽取加壳 ③ ( 禁用 dex2oat 操作 HOOK 点介绍 | 集成 InLineHook )
- 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )
- 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | multiple-dex-core 依赖库开发 | 配置元数据 | 获取 apk 文件并准备相关目录 )
- Android之自己定义(上方标题随ViewPager手势慢慢滑动)
- Android系统设置— android.provider.Settings
- Android基础入门
- Android BlueDroid(一):BlueDroid概述