我正在制作一款蛇类游戏,当屏幕上随机生成时,苹果不应该在蛇体内生成。我试着为苹果找一个新的地方,当它们被放在蛇里面时:
for (int i = 0; i < snake.size() - 1; i++) {
if (snake.get(i).xPos == plum.get(0).xPos && snake.get(i).yPos == plum.get(0).yPos) {
plum.remove(0);
plum.add(new Coordinate(rollDice(squaresX - 1) * (squareSize + sizeOfSpace) + sizeOfSpace, rollDice(squaresY - 1) * (squareSize + sizeOfSpace) + sizeOfSpace, new Color(199, 7, 255)));
}
}
这不是一个好的解决方案,所以我正在寻找一个新的,我可以创建无效的坐标,这是蛇的坐标和有效的坐标,这是其余的。所以我可以随机化苹果的新位置从有效坐标开始。但是我不确定我应该如何编写这个
这只是一个一般的建议,但我认为它可能适用于您。保持蛇的长度一直更新
现在当创建一个新的苹果时,创建一个网格大小减去蛇长度的坐标数组。例如:如果你的网格大小是9x9,蛇的长度是6,那么创建一个长度为75的数组。运行网格和数组,并向数组中添加没有蛇的坐标。它应该看起来像这样:
int arrayLocation=0;
for(int i=0; i< grid.length();i++)
{
for(int j=0; j<grid[i].length(); j++)
{
if (!snakeAtLocation(i,j))
{
arr[arrayLocation++] = new Coordinate(i, j);
}
}
}
那么你可以在0到arr.length()
之间随机选择一个数字n,然后从arr[n]
中检索配位,你应该有一个没有蛇的配位。希望它能帮助你,如果你需要更详细的例子,我明天会提供,因为我是从我的手机上写的,我现在没有电脑:)
顺便说一下,这个答案是一个简单的用例,因为它没有优化,每次你吃一个苹果时运行0 (n)^2。如果你想要更优化的解决方案,你就必须追踪蛇的每一次移动。如果需要的话,我明天可以把两个答案都贴出来:)