我正在使用数组制作蛇游戏。我想存储每个蛇形体的x
和y
坐标,以便以后可以将其用于碰撞或其他操作。
我使xCoordinate[row or col]
的value(?)每按一次键都增加或减少1,但是我认为这不是存储坐标的正确方法。另外,按键只改变方向,因此只增加或减少一次。甚至不起作用。
我该怎么做才能存储坐标?
import java.util.Random;
import java.util.Scanner; //allows us to use the scanner package
public class KeyInput {
static MainBoard b; //initialize board named b
public static void main(String[] args){
Scanner input = new Scanner(System.in);
Random rand = new Random();
final int ROWS = 25, COLS = 25;
int row=0, col =0;
boolean finished = false;
int[] xCoordsFood, yCoordsFood;
int[] xCoordsSnake, yCoordsSnake;
b = new MainBoard(ROWS, COLS);
xCoordsFood = new int[25];
yCoordsFood = new int[25];
xCoordsSnake = new int[25];
yCoordsSnake = new int[25];
// MAIN GAME LOOP
while(!finished){
//get random location of food
int loc = rand.nextInt(25);
for (int i = 0; i < 25; i++) {
xCoordsFood[i] = rand.nextInt(25);
yCoordsFood[i] = rand.nextInt(25);
}
b.putPeg("red",row,col);
b.displayMessage("Key: " + b.getKey());
if (b.getKey() == 'w'){
row --;
xCoordsSnake[row] =- 1;
System.out.print(xCoordsSnake[row]);
}
if (b.getKey() == 'a'){
col--;
yCoordsSnake[col] =- 1;
System.out.print(yCoordsSnake[col]);
}
if (b.getKey() == 's'){
row ++;
xCoordsSnake[row] =+ 1;
System.out.print(xCoordsSnake[row]);
}
if (b.getKey() == 'd'){
col++;
yCoordsSnake[col] =+ 1;
System.out.print(yCoordsSnake[col]);
}
// DELAY SO THAT ANIMATION IS SLOWED DOWN
try {
Thread.sleep(200);
}
catch (InterruptedException e){
}
// CHECK IF SQUARE GOES OUT OF BOUNDS
if (row<0 || row>=ROWS || col<0 || col>=COLS){
finished = true;
}
System.out.println(b.getKey());
}
b.displayMessage("GAME OVER!");
}
}
答案 0 :(得分:0)
由于数据结构的大小可变,因此应使用有效添加新元素(例如链表)的数据结构。
此外,您不必移动数组中的所有值,因为蛇的各部分将占据其他部分的位置。因此,例如,您只需要移除尾巴并在每个动作中添加一个新的头部即可。
重要的是在编码之前要多考虑问题,以提供更简单,更有效的解决方案。