Jan*_*Vos 4 java arrays swing tile multidimensional-array
所以我想知道我是java的新手,但我知道我的方式,但我想做一个2d平铺游戏.现在我听说你可以使用二维数组来制作地图.但是你如何使地图出现在屏幕上,JFrame,作为图片?这里是一个数组/映射的例子:
1111111111
1011011001
1001100011
0000100011
0000000000
2222222222
0 = blueSky.png
1 = cloud.png
2 = grass.png
Run Code Online (Sandbox Code Playgroud)
谢谢! 编辑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);
}
}
Run Code Online (Sandbox Code Playgroud)
这会打印一些带有天空图片的瓷砖,但我如何将底行另一张图片?
我认为2D数组是非GUI模型,数据本身可能会保存在某些数据文件中,也许是文本文件中,可能有读取数据的方法由2D数组保存.也许是整数,也许是自定义Cell类(再次,仍然是所有非GUI).然后,GUI必须解释模型并以某种逻辑方式显示数据.这可以通过创建由JPAnel持有的JLabel的2D网格来完成,该网格使用GridLayout,然后使用ImageIcons来保存图像,并基于模型的状态设置每个JLabel的图标.
编辑1
因此可能使用的类包括:
编辑2
关于您的问题:
好吧,我怎么能为每个标签设置正确的图片?
我会使用观察者/可观察模式并为模型添加一个监听器.每当模型改变时,它应该通知GUI或视图.然后视图将请求数据数组,将迭代它并将更改在循环通过数组时需要更改的图像图标.