【发布时间】:2021-03-31 04:38:12
【问题描述】:
所以我正在构建一个项目以构建俄罗斯方块风格的游戏,并且我希望能够测试该形状是否能够添加到 5 x 5 网格中。形状由二维数组建模,其中 1 被认为是形状的单个块(形状由几个块组成)。形状使用 3 x 3 网格建模。我必须做的事情是检查网格的形状是否能够适应它。举个例子,在网格的顶部正方形放置一个线条形状,线条会超出边界并且不应该工作,或者另一个例子是网格上可能已经有一个形状,所以线条应该不能放在上面。
这是迄今为止我得到的代码,但它不起作用,我真的很难概念化要做什么。提前谢谢你。
请注意,cols 是网格中的列数 (5),而行数是相同的 (5)。游戏块是形状,坐标是用户在 5x5 网格上单击的位置。
另外:形状的锚点是 3x3 网格的 1,1(所以锚点正好在网格的中间)。而 get(int x, int y) 方法是获取存储在 5x5 网格中的值。
很抱歉,如果一开始没有说清楚,但我试图基本上看看存储在 3x3 网格(由块组成)中的形状是否可以放在 5x5 网格的顶部。包含块的 3x3 网格有一个中心锚点,因此它将是 1,1(因为数组从 0 开始)。如果 5x5 网格有其他块与正在添加的新形状处于相同坐标,那么我希望它返回 false 或者如果形状在放置在 5x5 网格上时超出范围,但如果可以添加成功则返回true。
public boolean canPlayPiece (GamePiece piece, int x, int y) {
logger.info("canPlayPiece - Block clicked coordinates: " + x + "," + y);
// Piece co-ordinates are 3 x 3, each element that is 1 means there is a block there
int[][] pieceCoordinates = piece.getBlocks();
// For loop to iterate through the grid
// first looping through x values
for (int i = x - 1; i < cols; i++) {
System.out.println("i= " + i);
// nested for loop to find the y values stored inside the x
for (int j = y - 1; j < rows; j++) {
System.out.println("j: " + j);
if (pieceCoordinates[x][y] == 1 && get(i,j) != 0) {
logger.info("canPlayPiece: FALSE");
return false;
}
}
}
logger.info("canPlayPiece: TRUE");
return true;
}
【问题讨论】:
-
以及游戏中的锚点在哪里。是不是中间所以索引[1][1]。 (我的意思是当放置在网格中时,应该与给定的 x 和 y 值匹配的片段中的相对点)
-
是的!它是 1,1(所以它在 3x3 网格的中间)。
-
什么不完全有效?它是否位于唯一提供的代码
canPlayPiece内?你能edit 描述一下吗! -
嘿,我刚刚添加了一些编辑,请原谅我的经验不足,这是我第一次发布问题。
-
@iiicecream 我希望我的回答(在下方)对你有用。 (也请阅读下面的描述)