如何使用图像切片将地牢构建算法打印到jframe?

时间:2013-10-21 12:52:10

标签: java swing jframe roguelike

我正在学习Java,现在正在使用Swing GUI,并尝试了解一些较大的roguelike dungeon构建器算法的工作原理。

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

[link] 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中创建一个新网格?有人能为我提供示例代码吗?

感谢。

2 个答案:

答案 0 :(得分:1)

假设您的所有细胞图像都具有相同的大小。

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

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

答案 1 :(得分:0)

只要您希望在屏幕上显示字符,您也可以使用地牢地图填充单个textarea。或者将地图写入System.out。

当您开始显示图像时,Swing变得很方便。

不要害羞地添加一些额外的类,例如类Map,使用Room对象的双数组,Room是具有具体子类DirtWall,StoneFloor等的抽象类。

使用ImageIcons在JFrame中填充GridLayout的MapView。

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