我正在学习Java,现在正在使用Swing GUI,并尝试了解一些较大的roguelike dungeon构建器算法的工作原理。
我在java中遇到了这个算法的例子 -
我有兴趣修改此代码以将图像切片显示到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中创建一个新网格?有人能为我提供示例代码吗?
感谢。
答案 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。