1.继承
要使用 CodeGym 游戏引擎,您需要使用继承。但是,如果您不知道那是什么怎么办?一方面,你确实需要了解和研究这个话题。另一方面,该引擎被特别设计得非常简单,所以你对继承稍有了解就可以搞定。
那么什么是继承呢?简单来说,继承就是两个类之间的一种关系。其中一个充当父类,另一个成为子(后代)类。更重要的是,父类甚至可能不知道它有子类。换句话说,父类不会从拥有后代类中获得太多好处。
但是继承给子类带来了很多好处。其中最重要的是,父类的所有变量和方法都出现在子类中,就好像把父类的代码直接复制到子类中一样。这并不完全准确,但足以对继承有一个基本的了解。
下面是一些示例,可以帮助您更好地理解继承。
示例 1 — 这是最简单的示例
|
类在关键字的帮助下Child 继承类。Parent extends |
|
示例 2——使用父类的变量
|
类Child 可以使用类的age 和字段,就好像它们是在类本身中声明的一样。name Parent Child |
|
示例 3——使用父类的方法
|
该类Child 可以像在类中声明一样使用父类的变量和方法Child 。在这个例子中,我们使用getName() 方法。 |
|
省略一些细节,我们可以说,从Java编译器的角度来看,我们只是将父类的代码复制到子类的代码中:
public class Child extends Parent
{
public int age; // An inherited variable
public String name; // An inherited variable
public getName() { // An inherited method
return name;
}
public void printInfo()
{
System.out.println(getName() + " " + age);
}
}
Child
从编译器的角度看类的样子
2. 方法覆盖
有时候会出现这样的情况,我们让我们的Child
类继承了一个非常有用的Parent
类,导致子类继承了父类的所有变量和方法。但是其中一些方法可能无法完全按照我们希望的方式工作,或者根本无法按照我们希望的方式工作。
在这种情况下你会怎么做?我们可以重写我们不喜欢其实现的方法。这是一件很简单的事情:在我们的Child
类中,我们只需声明一个与类中的方法具有相同签名的方法Parent
,然后在其中编写我们自己的代码。
示例 1——方法覆盖
|
该printInfo() 方法将显示以下短语:
|
|
将情况稍微过分简化,继承导致父类的代码被复制到子类中。但是如果一个后代类已经存在一个祖先类中的方法,那么这个方法就不会从祖先类中复制。这里我们说子类中的方法重写父类中的方法。看下面的例子。也许这会让事情变得更清楚一点:
以下是从编译器的角度来看 Child 类的显示方式: |
---|
|
示例 2 - 一点继承魔法(和方法覆盖)
public class Parent
{
public getName() {
return "Luke";
}
public void printInfo()
{
System.out.println( getName() );
}
}
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
}
如果printInfo()
在一个类型上调用该方法Parent
,它又会调用该类getName()
的方法Parent
。
如果printInfo()
在一个对象上调用该方法Child
,它又会调用getName()
该类的方法Child
。
换句话说,该printInfo()
方法只在类中声明Parent
,但如果在对象上调用getName()
该方法,则调用该类的方法。Child
printInfo()
Child
例子:
|
此代码在屏幕上显示以下文本:
|
|
此代码在屏幕上显示以下文本:
|
这一切都是因为从编译器的角度(一个非常简化的版本)来看,该类的代码Child
如下所示:
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
public void printInfo()
{
System.out.println(getName());
}
}
Child
从编译器的角度看类的样子
3. 清单
这里有一个关于列表的简短提示 ( List
)。列表与数组有很多共同点:
- 它们可以存储大量特定类型的数据。
- 他们让你通过索引获取元素。
- 元素的索引从
0
.
列表的优点:
与数组不同,列表可以动态改变大小。创建后,列表的大小立即为0
. 随着项目被添加到列表中,其大小增加。创建列表的示例:
ArrayList<String> myList = new ArrayList<String>();
ArrayList
尖括号中指示的值是列表可以存储的数据类型。
以下是一些使用列表的方法:
代码 | 简要描述;简介 |
---|---|
|
创建一个新的字符串列表 |
|
添加一个元素到列表的末尾 |
|
将元素添加到列表的开头 |
|
通过索引获取元素 |
|
通过索引更改元素 |
|
获取列表中的元素个数 |
|
从列表中删除一个元素 |
有关列表的更多信息,您可以阅读以下文章:
4.随机数
CodeGym 游戏引擎有两种可用于生成随机数的方法。这些方法是:
int getRandomNumber(int max)
int getRandomNumber(int min, int max)
第一种方法 ——返回, , , ...getRandomNumber(int max)
范围内的随机数。在引擎盖下,它使用包中的类,但这不会改变您使用随机数的方式。0
1
2
max-1
Random
java.util
getRandomNumber(int)
接受一个整数作为参数。该数字将是随机数生成器可以返回的数字的上限。下限为 0。注意!随机数生成器永远不会返回上限值。例如,如果您调用getRandomNumber(3)
,它将随机返回 0、1 或 2。如您所见,它不会返回 3。以这种方式使用随机数生成器相当简单,但适用于许多情况。
第二种方法——getRandomNumber(int min, int max)
返回范围内的随机整数[min, max-1]
。它永远不会返回小于 的数字min
,也永远不会返回大于 的数字max-1
。
如何在实践中使用这些方法?
1. 骰子
假设你想模拟掷骰子并得到一个范围内的随机数1-6
。你会怎么做?这可以用这样的代码来完成:
int dice = getRandomNumber(1, 7);
此方法将返回范围内的随机整数1-6
。
2. 目标练习
假设您要模拟对目标的射击,并且射击的准确性包括一个随机分量,该分量的范围从 到-10
不等+10
。这可以用这样的代码来完成:
int dx = getRandomNumber(-10, 11);
-10
此方法将返回范围为 的随机整数+10
。
在游戏中使用随机数的方法有很多种。你只受限于你的想象力。编写您自己的游戏,完善它们,并享受这个过程。
每个人都可以玩游戏,但只有程序员才能创造游戏。
GO TO FULL VERSION