我在学校的回合制战略游戏中工作,比赛场地由8x8网格组成。所以地图中有64个图块。目前我正在测试生成除GUI之外的地图。我的网格是基于x,y的,因此第一个图块将是(1,1),第二个(2,1),第九个(1,2)..第64个(8,8)。
我的想法是在for循环中生成一个贴图列表,这是一个贴图列表,如下所示:
// GENERATE MAP
int x = 1;
int y = 1;
for(int i = 0; i < 64; i++) {
if(x != 9) {
Tile tile = new Tile(x, y, null);
tiles.add(tile);
x++;
}
else {
x = 1 ;
y++;
Tile tile = new Tile(x, y, null);
tiles.add(tile);
}
}
问题是当我对地图进行单元测试时,我预期的x,y值与生成的地图中的值不同。
assertEquals(64, tiles.size());
assertEquals(new Point(2,1), tiles.get(1).getPos());
assertEquals(new Point(8,1), tiles.get(7).getPos());
assertEquals(new Point(1,2), tiles.get(8).getPos());
assertEquals(new Point(8,8), tiles.get(63).getPos());
org.opentest4j.AssertionFailedError:
Expected :java.awt.Point[x=8,y=8]
Actual :java.awt.Point[x=1,y=8]
<Click to see difference>
平铺63必须是最后一个平铺(8,8),但它不是。有人可以帮助我吗?
除了这个问题,我的想法是稍后在某些瓷砖上设置地形,使用tiles.get(4).setTerrain(&#34; Tree&#34;);这种用瓷砖创建地图的方式是一个好的开始还是我在错误的方向工作?稍后我们将它绑定到GUI。
提前致谢!
答案 0 :(得分:3)
使用嵌套for循环..
for(int i = 1; i<=8; i++){
for(int j = 1; j<=8; j++){
// now see the values of i and j here.
// you can use i and j to get what you want.
}
}
答案 1 :(得分:2)
不是我认为你应该这样做,但这教导了一个重要的编程概念,即解耦不应该耦合的逻辑。以下是与您提出的问题相似的解决方案,但其风格更为明显:
// Initialise variables at initial position
int x = 1;
int y = 1;
for(int i = 0; i < 64; i++) {
// Add tile.
tiles.add(new Tile(x, y, null));
// Update position.
x++;
if (x == 9) {
x = 1;
y++;
}
}
答案 2 :(得分:1)
您可以使用嵌套循环来获取x和y值。
for (int x = 0; x < 8; x++) {
for (int y = 0; y < 8; y++) {
//do something with x and y here.
}
}