0

我目前正在学习 Java,正在使用 Swing GUI,并试图了解一些较大的 roguelike 地牢构建器算法是如何工作的。

我在java中遇到了这个算法的例子 -

[链接] http://roguebasin.roguelikedevelopment.org/index.php?title=Java_Example_of_Dungeon-Building_Algorithm

而且我有兴趣修改此代码以将图像图块显示到 Swing JFrame -

//used to print the map on the screen
public void showDungeon(){
    for (int y = 0; y < ysize; y++){
        for (int x = 0; x < xsize; x++){
            //System.out.print(getCell(x, y));
            switch(getCell(x, y)){
            case tileUnused:
                System.out.print(" ");
                break;
            case tileDirtWall:
                System.out.print("+");
                break;
            case tileDirtFloor:
                System.out.print(".");
                break;
            case tileStoneWall:
                System.out.print("O");
                break;
            case tileCorridor:
                System.out.print("#");
                break;
            case tileDoor:
                System.out.print("D");
                break;
            case tileUpStairs:
                System.out.print("<");
                break;
            case tileDownStairs:
                System.out.print(">");
                break;
            case tileChest:
                System.out.print("*");
                break;
            };
        }
        if (xsize <= xmax) System.out.println();
    }
}

我想知道实现这一目标的最佳方法是什么——通过在 JFrame 中创建一个新网格?有人可以为我提供示例代码吗?

谢谢。

4

2 回答 2

1

假设您所有的单元格图像都具有相同的大小。

设置GridLayout为您的容器并在网格中为每个图块添加 JLabels。

或者只是覆盖JPanel 的paintComponent(Graphics g) 方法并使用适当的移位x=width*column,y=height*row 绘制每个图像。

于 2013-10-21T13:10:59.693 回答
0

只要你想在屏幕上显示字符,你还不如用地牢地图填充一个文本区域。或者将映射写入 System.out。

开始显示图像的那一刻是 Swing 变得方便的时候。

不要害羞地放几个额外的类,比如一个类 Map,带有一个 Room 对象的双数组,Room 是一个具有具体子类 DirtWall、StoneFloor 等的抽象类。

还有一个 MapView,它用 ImageIcons 填充 JFrame 中的 GridLayout。

或者,如果您希望坚持使用 roguelike 界面,请查看 curses 库,这是一种在终端窗口中定位角色的方法。您可以从 Java 创建 JNI 绑定。或者有http://www.pitman.co.za/projects/charva/它在这种绑定之上创建了一个类似摇摆的 api。

于 2013-10-21T13:18:00.400 回答