4

所以我想知道我是java新手,但我知道我的方法,但我想制作一个2d瓷砖游戏。现在我听说你可以用二维数组来制作地图。但是如何使地图在屏幕上显示为图片,JFrame?所以这里是数组/映射的一个例子:

1111111111
1011011001
1001100011
0000100011
0000000000
2222222222

0 = blueSky.png
1 = cloud.png
2 = grass.png

谢谢! 编辑2 所以我现在有这个:

import javax.swing.*;
import java.awt.*;

public class Game extends JFrame {

private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        ImageIcon sky = new ImageIcon ("/Users/pro/Desktop/sky.png");

        JPanel grid = new JPanel();
        grid.setLayout(new GridLayout(25, 25));
        for (int i = 0; i < 25; i++) {
            for (int n = 0; n < 25; n++) {
                grid.add(new JLabel(sky));
            }
        }
        JFrame frame = new JFrame("Map");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setPreferredSize(new Dimension(640, 400));
        frame.add(grid);
        frame.pack();
        frame.setVisible(true);
    }
}

这会打印一些带有天空图片的瓷砖,但我如何让底行成为另一张图片?

4

2 回答 2

5

我将 2D 数组视为非 GUI 模型,数据本身可能保存在某个数据文件中,可能是文本文件,将有读取数据的方法保存在 2D 数组中也许是整数,也许是自定义 Cell 类(同样,仍然都是非 GUI)。然后 GUI 必须解释模型并以某种逻辑方式显示数据。这也许可以通过创建一个由使用 GridLayout 的 JPAnel 保存的 JLabel 的 2D 网格来完成,然后使用 ImageIcons 保存图像,并根据模型的状态设置每个 JLabel 的图标。

编辑 1
所以可能使用的类包括:

  • TileType:一个枚举,将平铺概念与数据文件保存的数字相关联
  • TileCell:非 GUI 类,包含一个 TileType 字段,也可能包含一个可以在单元格上找到的项目列表(如果游戏需要的话)。可能有关于其邻居的信息。
  • TileCellGrid:非 GUI 类,包含 TileCells 的 2D 网格。
  • GridDataIO:用于将网格数据读入和写出到文件的实用程序类。
  • GameGrid:使用 JPanel 保存 GridLayout 的 GUI 类,该 JPanel 保存 JLabels,其 ImageIcons 显示您在 OP 中列出的图像。


关于您的问题的编辑 2 :

好吧,我怎样才能为everyLabel 设置正确的图片?

我会使用观察者/可观察模式并向模型添加一个侦听器。每当模型发生变化时,它都应该通知 GUI 或视图。然后,视图将请求数据数组,遍历它,并在遍历数组时更改需要更改的图像图标。

于 2011-07-29T18:26:34.700 回答
4

我建议您使用JLabel带有图标的 s 并使用GridLayout.

带有示例代码和屏幕截图的相关问题/答案:

于 2011-07-29T18:24:36.450 回答