Java 游戏中绘制地图网格

3
嘿,我正在尝试制作一个地牢爬行游戏,但我卡在了地图生成上。我想要生成随机的房间,但在此之前,我必须先在屏幕上绘制地图。我希望地图是俯视视角,并且基本上是一个网格,我稍后会添加地板图片。我的想法是创建一个JFrame,并使用paintComponent和一个for循环来绘制Rectangle2D以形成网格状的正方形。这是正确的方法吗?还有,如何使用keyListener让角色从一个正方形移动到另一个正方形呢?
编辑:地下城爬行游戏是一种控制一个角色并在网格上移动的俯视视角游戏。您可以击败怪物,获得武器和道具,升级等。现在,我只想找出在屏幕上打印地图的最佳方法。我从一个角色可以从一个正方形移动到另一个正方形并通过箭头键进行操作开始。然后,我将转向随机地图生成!

1
如果这是一个Swing应用程序,您将需要使用键绑定,而不是KeyListener。您能否提供有关您实际问题的更多详细信息?例如,我不知道什么是“地牢爬行者”。我想我过着与世隔绝的生活。 - Hovercraft Full Of Eels
2个回答

2

首先创建抽象层是个好主意。从包含每个单元格信息的数组开始(空、障碍、敌人、玩家、物品等)。

就像这样

int[][] a={
  {0,0,0,0,0}, 
  {0,1,0,0,0}, //"1" - obstacle
  {0,0,1,0,0},
  {2,0,1,0,0}, //for example "2" is player
  {0,0,1,0,0}
}

现在只需在地图上绘制矩形(或图片,实际上看起来更好:))。通常每个单元格应该是相同大小的,所以只需使用一些步骤绘制矩形。

那么,在使用键盘上的符号在2D数组中绘制地图后,我只需要用图片瓦片替换这些符号就可以了? - user1198199
@user1198199,不完全是“替换”。在我的示例中,没有必要绘制此数组(名为“a”)。您应该根据此数组绘制您的瓷砖(或矩形)。 - Dmitry Zaytsev
我明白了。所以将相同大小的矩形存储在二维数组中并进行绘制?我也遇到了打印该数组的问题。我的代码是:for(int i = 0; i < rows; i++){ for(int j = 0; j < columns; j++){ System.out.println(a[i][j]);}} - user1198199
然而它只会在单列中打印。 - user1198199
@user1198199 大概就是这样。试一下,如果有问题再问。实际上,如果没有答案,最好为每个问题创建一个新的问题。祝你好运) - Dmitry Zaytsev

1

您需要创建与地图大小相匹配的BufferedImage,获取其Graphics对象并使用该对象绘制地图,然后将其释放。然后,您可以轻松地在JLabel中保存的ImageIcon中显示它,或者在JPanel的paintComponent(...)方法中显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接