提交 fbb98dea 编写于 作者: W wizardforcel

2020-06-17 09:48:02

上级 7ec93e86
......@@ -271,7 +271,7 @@ public class DonutExample extends JFrame {
## 绘制图像
当我们创建计算机游戏时,我们经常使用图像。 在下一个示例中,我们加载图像并将其绘制在板上。 如果找不到图像文件,请查看 Java 教程中的[显示图像](/java/displayimage/)
当我们创建计算机游戏时,我们经常使用图像。 在下一个示例中,我们加载图像并将其绘制在板上。 如果找不到图像文件,请查看 Java 教程中的[显示图像](/java/displayimage/)
`Board.java`
......
......@@ -189,7 +189,7 @@ public void paintComponent(Graphics g) {
```
自定义绘画是通过`paintComponent()`方法完成的。 请注意,我们还调用其父级的`paintComponent()`方法。 实际绘画将委托给 drawStar()方法。
自定义绘画是通过`paintComponent()`方法完成的。 请注意,我们还调用其父级的`paintComponent()`方法。 实际绘画将委托给`drawStar()`方法。
```
private void drawStar(Graphics g) {
......@@ -200,7 +200,7 @@ private void drawStar(Graphics g) {
```
drawStar()方法中,我们使用`drawImage()`方法在窗口上绘制图像。 `Toolkit.getDefaultToolkit().sync()`在缓冲图形事件的系统上同步绘画。 没有这条线,动画在 Linux 上可能会不流畅。
`drawStar()`方法中,我们使用`drawImage()`方法在窗口上绘制图像。 `Toolkit.getDefaultToolkit().sync()`在缓冲图形事件的系统上同步绘画。 没有这条线,动画在 Linux 上可能会不流畅。
```
@Override
......@@ -220,7 +220,7 @@ public void actionPerformed(ActionEvent e) {
```
计时器反复调用`actionPerformed()`方法。 在方法内部,我们增加星形对象的 x 和 y 值。 然后我们调用`repaint()`方法,这将导致`paintComponent()`被调用。 这样,我们可以定期重绘`Board`从而制作动画。
计时器反复调用`actionPerformed()`方法。 在方法内部,我们增加星形对象的`x``y`值。 然后我们调用`repaint()`方法,这将导致`paintComponent()`被调用。 这样,我们可以定期重绘`Board`从而制作动画。
![Star](img/875be503daaea390fdb5424e7418d8c4.jpg)
......@@ -540,7 +540,7 @@ public class Board extends JPanel
```
在前面的示例中,我们以特定的间隔执行任务。 在此示例中,动画将在线程内进行。 `run()`方法仅被调用一次。 这就是为什么我们在方法中有一个 while 循环的原因。 从该方法中,我们称为`cycle()``repaint()`方法。
在前面的示例中,我们以特定的间隔执行任务。 在此示例中,动画将在线程内进行。 `run()`方法仅被调用一次。 这就是为什么我们在方法中有一个`while`循环的原因。 从该方法中,我们称为`cycle()``repaint()`方法。
```
@Override
......@@ -563,6 +563,6 @@ sleep = DELAY - timeDiff;
```
`cycle()``repaint()`方法可能在不同的 while 周期中花费不同的时间。 我们计算两种方法的运行时间,并将其从`DELAY`常数中减去。 这样,我们要确保每个 while 周期都在恒定时间运行。 在我们的情况下,每个周期为`DELAY` ms。
`cycle()``repaint()`方法可能在不同的`while`周期中花费不同的时间。 我们计算两种方法的运行时间,并将其从`DELAY`常数中减去。 这样,我们要确保每个`while`周期都在恒定时间运行。 在我们的情况下,每个周期为`DELAY` ms。
Java 2D 游戏教程的这一部分涵盖了动画。
\ No newline at end of file
......@@ -4,9 +4,9 @@
在 Java 2D 游戏教程的这一部分中,我们将使用精灵。
术语 Sprite 具有多种含义。 它用于表示场景中的图像或动画。
术语精灵具有多种含义。 它用于表示场景中的图像或动画。
它也用于表示游戏中的任何可移动对象。 含义之一也是在游戏中封装角色的代码。 在我们的教程中,通过使用 Sprite,我们引用了一个可移动对象或其 Java 类。
它也用于表示游戏中的任何可移动对象。 含义之一也是在游戏中封装角色的代码。 在我们的教程中,通过使用精灵,我们引用了一个可移动对象或其 Java 类。
## 移动精灵
......@@ -131,7 +131,7 @@ public void move() {
```
`move()`方法更改子画面的坐标。 这些 x 和 y 值在`paintComponent()`方法中用于绘制子画面的图像。
`move()`方法更改子画面的坐标。 这些`x``y`值在`paintComponent()`方法中用于绘制子画面的图像。
```
if (key == KeyEvent.VK_LEFT) {
......@@ -403,7 +403,7 @@ public Sprite(int x, int y) {
```
构造函数初始化 x 和 y 坐标以及`visible`变量。
构造函数初始化`x``y`坐标以及`visible`变量。
`Missile.java`
......
......@@ -259,7 +259,7 @@ const C_WIDTH = 300;
```
`DOT_SIZE`是苹果的大小和蛇的点。 `ALL_DOTS`常数定义画布上可能的最大点数(900 = 300 * 300/10 * 10)。 `MAX_RAND`常数用于计算苹果的随机位置。 `DELAY`常数确定游戏的速度。 `C_HEIGHT``C_WIDTH`常数存储画布的大小。
`DOT_SIZE`是苹果的大小和蛇的点。 `ALL_DOTS`常数定义画布上可能的最大点数(`900 = 300 * 300/10 * 10`)。 `MAX_RAND`常数用于计算苹果的随机位置。 `DELAY`常数确定游戏的速度。 `C_HEIGHT``C_WIDTH`常数存储画布的大小。
```
const LEFT_KEY = 37;
......
......@@ -2,7 +2,7 @@
> 原文: [https://zetcode.com/tutorials/javagamestutorial/puzzle/](https://zetcode.com/tutorials/javagamestutorial/puzzle/)
在 Java 游戏教程的这一部分中,我们创建一个 Java Puzzle 游戏克隆。 源代码和图像可以在作者的 Github [Java Swing 益智游戏](https://github.com/janbodnar/Puzzle-game-in-Java-Swing)存储库中找到。
在 Java 游戏教程的这一部分中,我们创建一个 Java 解谜游戏克隆。 源代码和图像可以在作者的 Github [Java Swing 益智游戏](https://github.com/janbodnar/Puzzle-game-in-Java-Swing)存储库中找到。
## Java 益智游戏要点
......@@ -489,7 +489,7 @@ private void updateButtons() {
```
`updateButtons()`方法将列表映射到面板的网格。 首先,使用`removeAll()`方法删除所有组件。 for 循环用于通过`buttons`列表,将重新排序的按钮添加回面板的布局管理器。 最后,`validate()`方法实现了新的布局。
`updateButtons()`方法将列表映射到面板的网格。 首先,使用`removeAll()`方法删除所有组件。 `for`循环用于通过`buttons`列表,将重新排序的按钮添加回面板的布局管理器。 最后,`validate()`方法实现了新的布局。
```
private void checkSolution() {
......
# Java Snake
# Java 贪食蛇
> 原文: [https://zetcode.com/tutorials/javagamestutorial/snake/](https://zetcode.com/tutorials/javagamestutorial/snake/)
在 Java 2D 游戏教程的这一部分中,我们创建一个 Java Snake 游戏克隆。 源代码和图像可以在作者的 Github [Java-Snake-Game](https://github.com/janbodnar/Java-Snake-Game) 存储库中找到。
在 Java 2D 游戏教程的这一部分中,我们创建一个 Java 贪食蛇游戏克隆。 源代码和图像可以在作者的 Github [Java-Snake-Game](https://github.com/janbodnar/Java-Snake-Game) 存储库中找到。
## Snake
## 贪食蛇
Snake 是较旧的经典视频游戏。 它最初是在 70 年代后期创建的。 后来它被带到 PC 上。 在这个游戏中,玩家控制蛇。 目的是尽可能多地吃苹果。 蛇每吃一个苹果,它的身体就会长大。 蛇必须避开墙壁和自己的身体。 该游戏有时称为 Nibbles 。
贪食蛇是较旧的经典视频游戏。 它最初是在 70 年代后期创建的。 后来它被带到 PC 上。 在这个游戏中,玩家控制蛇。 目的是尽可能多地吃苹果。 蛇每吃一个苹果,它的身体就会长大。 蛇必须避开墙壁和自己的身体。 该游戏有时称为 Nibbles 。
## Java Sname 游戏的开发
## Java 贪食蛇游戏的开发
蛇的每个关节的大小为 10 像素。 蛇由光标键控制。 最初,蛇具有三个关节。 如果游戏结束,则在面板中间显示“ Game Over”消息。
蛇的每个关节的大小为 10 像素。 蛇由光标键控制。 最初,蛇具有三个关节。 如果游戏结束,则在面板中间显示“Game Over”消息。
`Board.java`
......@@ -275,7 +275,7 @@ private final int DELAY = 140;
```
`B_WIDTH``B_HEIGHT`常数确定电路板的尺寸。 `DOT_SIZE`是苹果的大小和蛇的点。 `ALL_DOTS`常数定义了板上可能的最大点数(900 =(300 * 300)/(10 * 10))。 `RAND_POS`常数用于计算苹果的随机位置。 `DELAY`常数确定游戏的速度。
`B_WIDTH``B_HEIGHT`常数确定电路板的尺寸。 `DOT_SIZE`是苹果的大小和蛇的点。 `ALL_DOTS`常数定义了板上可能的最大点数(`900 = (300 * 300) / (10 * 10)`)。 `RAND_POS`常数用于计算苹果的随机位置。 `DELAY`常数确定游戏的速度。
```
private final int x[] = new int[ALL_DOTS];
......@@ -283,7 +283,7 @@ private final int y[] = new int[ALL_DOTS];
```
这两个数组存储蛇的所有关节的 x 和 y 坐标。
这两个数组存储蛇的所有关节的`x``y`坐标。
```
private void loadImages() {
......@@ -334,7 +334,7 @@ private void checkApple() {
```
如果苹果与头部碰撞,我们会增加蛇的关节数。 我们称`locateApple()`方法为随机放置一个新的 Apple 对象。
如果苹果与头部碰撞,我们会增加蛇的关节数。 我们称`locateApple()`方法为随机放置一个新的`Apple`对象。
`move()`方法中,我们有游戏的密钥算法。 要了解它,请看一下蛇是如何运动的。 我们控制蛇的头。 我们可以使用光标键更改其方向。 其余关节在链上向上移动一个位置。 第二关节移动到第一个关节的位置,第三关节移动到第二个关节的位置,依此类推。
......@@ -432,4 +432,4 @@ pack();
Figure: Snake
这是 Java 中的 Snake 游戏。
\ No newline at end of file
这是 Java 中的贪食蛇游戏。
\ No newline at end of file
......@@ -4,7 +4,7 @@
在 Java 2D 游戏教程的这一部分中,我们创建一个简单的 Breakout 游戏克隆。 源代码和图像可以在作者的 Github [Java-Breakout-Game](https://github.com/janbodnar/Java-Breakout-Game) 存储库中找到。
Breakout 是一款最初由 Atari Inc.开发的街机游戏。该游戏创建于 1976 年。
Breakout 是一款最初由 Atari Inc. 开发的街机游戏。该游戏创建于 1976 年。
在此游戏中,玩家移动屏幕上的桨叶并弹起一个或多个球。 目的是销毁窗口顶部的砖块。
......@@ -367,7 +367,7 @@ public class Paddle extends Sprite {
```
这是`Paddle`类。 它封装了 Breakout 游戏中的 paddle 对象。 操纵杆通过左右箭头键控制。 通过按箭头键,我们设置方向变量。 通过释放箭头键,将`dx`变量设置为零。 这样,桨停止移动。
这是`Paddle`类。 它封装了 Breakout 游戏中的对象。 操纵杆通过左右箭头键控制。 通过按箭头键,我们设置方向变量。 通过释放箭头键,将`dx`变量设置为零。 这样,桨停止移动。
```
void move() {
......@@ -387,7 +387,7 @@ void move() {
```
桨叶仅在水平方向上移动,因此我们仅更新 x 坐标。 如果条件确保桨不通过窗口边缘。
桨叶仅在水平方向上移动,因此我们仅更新`x`坐标。 如果条件确保桨不通过窗口边缘。
`com/zetcode/Board.java`
......@@ -809,7 +809,7 @@ if (bricks[i].getRect().contains(pointTop)) {
```
如果球撞击砖的底部,我们将改变球的 y 方向; 它下降了。
如果球撞击砖的底部,我们将改变球的`y`方向; 它下降了。
`com/zetcode/Breakout.java`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册