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

简介: 在我们的下一个项目中,将模拟一个六面色子的滚动。色子会出现在许多现代的桌上游戏中,因为它们增添了不可预期的因素,如图2-26所示。在本节中,我们将展示在Java程序中如何模拟这种随机性。

本节书摘来异步社区《Android游戏开发详解》一书中的第2章,第2.20节,作者: 【美】Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.20 对象的更多实践——模拟一个色子

Android游戏开发详解
在我们的下一个项目中,将模拟一个六面色子的滚动。色子会出现在许多现代的桌上游戏中,因为它们增添了不可预期的因素,如图2-26所示。在本节中,我们将展示在Java程序中如何模拟这种随机性。

2_26

我们首先创建一个名为“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类在哪里。


2_27

要修正这个问题,必须提供完整的地址,让编译器知道在哪里找到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,由于它如此常用,实际上会自动导入。下一小节所要介绍的数组,也是不用导入就可以创建。

相关文章
|
14天前
|
安全 数据处理 Android开发
构建高效Android应用:Kotlin协程的实践之路
【4月更文挑战第26天】 在面对现代Android开发时,性能优化和流畅的用户体验成为了开发者们追求的目标。Kotlin作为一种现代化的编程语言,通过其协程特性为Android应用带来了前所未有的并发处理能力。本文将深入探讨如何利用Kotlin协程提升Android应用的响应性和效率,同时保持代码的简洁性。我们将从协程的基础概念出发,逐步揭示如何在实际应用中运用这些强大的工具,以及它们如何改善应用架构和用户交互体验。
|
18天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第22天】 在移动开发领域,性能优化和响应性是衡量应用程序质量的关键指标。近年来,Kotlin语言因其简洁性和功能性在Android社区中获得了广泛认可。特别是Kotlin协程,作为一种新的并发处理机制,正在改变开发者编写异步和后台任务的方式。本文将探讨Kotlin协程的核心优势,并通过实例展示如何在Android应用中实现它们以提高性能和用户体验。
|
20天前
|
API 数据库 Android开发
构建高效Android应用:探究Kotlin协程的优化实践
【4月更文挑战第20天】 在现代Android开发中,Kotlin协程以其轻量级线程管理和非阻塞I/O操作的优势成为提升应用性能和响应性的重要工具。本文深入分析Kotlin协程的核心原理,探讨其在Android平台上实现高效并发编程的方法,并通过具体实例演示如何利用协程改进应用架构。我们将从协程的基本概念出发,逐步解析其与线程、回调和异步任务的关系,最终展示如何通过协程简化代码结构,提高运行效率,并确保用户界面的流畅性。
22 11
|
10天前
|
移动开发 Java Android开发
构建高效Android应用:Kotlin协程的实践之路
【4月更文挑战第30天】在移动开发领域,随着用户需求的不断增长和设备性能的持续提升,实现流畅且高效的用户体验已成为开发者的首要任务。针对Android平台,Kotlin协程作为一种新兴的异步编程解决方案,以其轻量级线程管理和简洁的代码逻辑受到广泛关注。本文将深入探讨Kotlin协程的概念、优势以及在实际Android应用中的运用,通过实例演示如何利用协程提升应用性能和响应能力,为开发者提供一条构建更高效Android应用的实践路径。
|
22小时前
|
XML Android开发 数据格式
Android五大布局对象---FrameLayout,LinearLayout ,Absolute
Android五大布局对象---FrameLayout,LinearLayout ,Absolute
|
1天前
|
缓存 Java Android开发
安卓应用性能优化实践
【5月更文挑战第9天】在移动开发领域,应用的性能是决定用户体验的关键因素之一。特别是对于安卓平台,由于设备的多样性,性能优化变得尤为重要。本文将深入探讨针对安卓应用的性能优化策略,从内存管理、多线程处理到布局优化等方面提供实用的技术建议和最佳实践,帮助开发者提升应用的流畅度与响应速度。
|
3天前
|
移动开发 Java Android开发
Android应用开发:Kotlin语言的优势与实践
【5月更文挑战第7天】 在移动开发的世界中,Android平台的Kotlin语言以其高效、简洁的语法和强大的功能吸引了众多开发者。本文将深入探讨Kotlin语言的核心优势,并通过实际案例展示如何在Android应用开发中有效地运用这一现代编程语言。我们将从语言特性出发,逐步分析其在提升开发效率、改善代码质量以及增强应用性能方面的具体表现,为读者提供一个全面而细致的Kotlin应用开发指南。
|
5天前
|
存储 前端开发 Java
Android应用开发中的MVP架构模式实践
【5月更文挑战第5天】随着移动应用开发的复杂性增加,传统的MVC(Model-View-Controller)架构在应对大型项目时显得笨重且不灵活。本文将探讨一种更适应现代Android应用开发的架构模式——MVP(Model-View-Presenter),并展示如何在Android项目中实现该模式以提升代码的可维护性和可测试性。通过对比分析MVP与传统MVC的差异,以及提供一个实际案例,读者将能深入了解MVP的优势和实施步骤。
|
10天前
|
移动开发 调度 Android开发
构建高效Android应用:Kotlin协程的实践之路
【4月更文挑战第30天】 在移动开发领域,性能优化与流畅的用户体验始终是开发者追求的目标。随着Kotlin语言在Android开发中的普及,其提供的协程特性成为了解决异步编程问题的有力工具。本文将通过深入分析Kotlin协程的原理与实践,展示如何在Android应用中利用协程提升响应速度和处理效率,同时保证代码的简洁性和可维护性。我们将从基本概念出发,逐步深入到协程的高级使用场景,帮助开发者构建更加高效的Android应用。
|
10天前
|
机器学习/深度学习 人工智能 缓存
安卓应用性能优化实践探索深度学习在图像识别中的应用进展
【4月更文挑战第30天】随着智能手机的普及,移动应用已成为用户日常生活的重要组成部分。对于安卓开发者而言,确保应用流畅、高效地运行在多样化的硬件上是一大挑战。本文将探讨针对安卓平台进行应用性能优化的策略和技巧,包括内存管理、多线程处理、UI渲染效率提升以及电池使用优化,旨在帮助开发者构建更加健壮、响应迅速的安卓应用。 【4月更文挑战第30天】 随着人工智能技术的迅猛发展,深度学习已成为推动计算机视觉领域革新的核心动力。本篇文章将深入分析深度学习技术在图像识别任务中的最新应用进展,并探讨其面临的挑战与未来发展趋势。通过梳理卷积神经网络(CNN)的优化策略、转移学习的实践应用以及增强学习与生成对