《Android游戏开发详解》一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 {
2
3    public static void main(String[] args) {
4        Random r = new Random();
5    }
6
7 }

应该注意到,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;
2
3 public class DiceMaker {
4
5   public static void main(String[] args) {
6       Random r = new Random();
7   }
8
9 }

既然已经告诉计算机在哪里找到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;
02
03 public class DiceMaker {
04
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);
09    }
10
11 }

运行该程序的时候,将会看到如下所示的结果之一。

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,由于它如此常用,实际上会自动导入。下一小节所要介绍的数组,也是不用导入就可以创建。

时间: 2024-12-31 01:52:24

《Android游戏开发详解》一2.20 对象的更多实践——模拟一个色子的相关文章

《Android游戏开发详解》——第2章,第2.20节对象的更多实践——模拟一个色子

2.20 对象的更多实践--模拟一个色子 Android游戏开发详解 在我们的下一个项目中,将模拟一个六面色子的滚动.色子会出现在许多现代的桌上游戏中,因为它们增添了不可预期的因素,如图2-26所示.在本节中,我们将展示在Java程序中如何模拟这种随机性. 我们首先创建一个名为"DiceProject"的新的Java项目.其中,创建一个名为DiceMaker的新的类,并且像通常一样给它一个main方法. 要产生一个随机数,我们必须使用Java库中名为Random的一个内建类.我们使用熟

《Android游戏开发详解》一导读

前言Android游戏开发详解作为对编程知之甚少或者毫无所知的初学者,开始学习Android游戏开发,可能会觉得就像是穿越陌生的星际的旅程.有太多的事情要尝试,太多的知识要学习,令人遗憾的是,还有如此之多的方式令人陷入迷途. 究其原因之一,可能是Android游戏开发给人以很简单的错觉.这个术语给人的感觉是,只需要学习和掌握一个主题就够了,实际上,Android游戏开发包括各种不同的主题,其中的一些如下所示. 编程基础: Java编程语言: 面向对象设计原理: 游戏开发: 代码优化: Andro

《Android游戏开发详解》一3.4 多态

3.4 多态 Android游戏开发详解 你可能会问,为什么我们必须创建一个接口和一个类,来定义一个单个的King类呢?你可能会告诉自己,现在Human接口还真的做不了太多事情,你说的绝对没错. 使用接口允许我们创建一类对象,但是,在学习多态之前,我们很难意识到这对程序来说意味着什么. 来看一下如下所示的方法. public void feed(Human h) { System.out.println("Feeding Human!"); h.eat(); } 该方法可以接受一个单个

《Android游戏开发详解》一2.10 使用对象

2.10 使用对象 Android游戏开发详解我们现在开始真正地使用对象.创建一个名为BasicObjects的新的Java对象.然后,创建一个名为World的新类,并且给它一个简单的"Hello, world!" 的main方法,如程序清单2.9所示. 程序清单2.9 World.java public class World { public static void main(String[] args) { System.out.println("Hello, worl

《Android游戏开发详解》——第3章,第3.4节多态

3.4 多态Android游戏开发详解你可能会问,为什么我们必须创建一个接口和一个类,来定义一个单个的King类呢?你可能会告诉自己,现在Human接口还真的做不了太多事情,你说的绝对没错. 使用接口允许我们创建一类对象,但是,在学习多态之前,我们很难意识到这对程序来说意味着什么. 来看一下如下所示的方法. public void feed(Human h) { System.out.println("Feeding Human!"); h.eat(); } 该方法可以接受一个单个的H

《Android游戏开发详解》——第2章,第2.10节使用对象

2.10 使用对象Android游戏开发详解我们现在开始真正地使用对象.创建一个名为BasicObjects的新的Java对象.然后,创建一个名为World的新类,并且给它一个简单的"Hello, world!" 的main方法,如程序清单2.9所示. 程序清单2.9 World.java public class World { public static void main(String[] args) { System.out.println("Hello, world

《Android游戏开发详解》——导读

目 录前 言 第1部分 Java基础知识 第1章 程序设计基础 1.1 什么是编程1.2 数据类型 1.3 声明和初始化变量1.4 关于位的一切(位和字节的简单介绍)1.5 运算 1.6 函数(在Java中称为"方法"更好) 1.7 控制流程第1部分--if和else语句 1.8 控制流程第2部分--while和for循环 1.9 训练到此结束 第2章 Java基础知识 2.1 面向对象编程 2.2 设置开发机器 2.3 编写第一个程序 2.4 执行Java程序 2.5 魔术揭秘--编

《Android游戏开发详解》一1.8 控制流程第2部分——while和for循环

1.8 控制流程第2部分--while和for循环 Android游戏开发详解 在前面的小节中,我们介绍了使用if和else语句块来产生代码分支.现在,我们来介绍两种类型的循环:while循环和for循环.循环允许我们执行重复性的任务.循环特别重要,没有它们,游戏将无法运行. 1.8.1 while循环 假设你想要编写一个函数打印出所有的正整数,直到达到给定的输入n.解决这个问题的策略(算法)如下. 1. 创建一个新的整型,将其值初始化为1. 2. 如果该整数小于或等于给定的输入n,打印其值.

《Android游戏开发详解》一2.19 使用字符串

2.19 使用字符串 Android游戏开发详解让我们通过使用熟悉的一个类String,来练习一下如何使用Java文档.创建一个名为FunWithStrings的新的Java项目,并且创建一个名为StringTester的.带有main方法的新的类,如程序清单2.18所示. 程序清单2.18 StringTester.java--空的版本 01 public class StringTester { 02 03 public static void main(String[] args) { 0