gpt4 book ai didi

java - 在 JFrame java 上写一个二维数组

转载 作者:搜寻专家 更新时间:2023-11-01 01:37:57 24 4
gpt4 key购买 nike

所以我想知道我是 java 的新手,但我知道如何解决它,但我想制作一个 2d tile 游戏。现在我听说您可以使用二维数组来制作 map 。但是如何使 map 以图片的形式出现在屏幕上,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);
}
}

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

最佳答案

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

编辑 1
因此可能使用的类包括:

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

编辑2
关于你的问题:

Alright how can i set the right picture for everyLabel ?

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

关于java - 在 JFrame java 上写一个二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6877373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com