所以我一直在尝试使用Java重新创建游戏Snake,但我遇到了一个我真的不明白的问题。
该程序的基础是有一个无限循环,用于检查玩家在一秒间隔内选择的方向。玩家可以随时按下改变“int direction”值的按钮,但是只有在循环上的定时器启动后蛇才会朝那个方向移动。
我遇到的问题是,在程序执行过程中,单击按钮更改方向无效。方向的改变只会在程序结束后生效,玩家将无法指导蛇的动作。
有没有办法可以解决这个问题,最好不必重新设计整个程序? 。 。
定义变量:网格的空白部分被赋值为0,而蛇所占据的值被赋值为1
public static int x = 5;
public static int y = 5;
public static int grid[][] = new int[11][11];
public static int snakeLength = 1;
public static boolean alive = true;
public static int direction = 1;
public void paint(Graphics g)
{
for(int r = 0; r<11; r++)
{
for(int e = 0; e<11; e++)
{
grid[r][e] = 0;
}
}
grid[5][5] = 1;
我用来理论上改变蛇的方向的按钮
Rectangle up = new Rectangle(250,550,50,50);
Rectangle down = new Rectangle(250,650,50,50);
Rectangle left = new Rectangle(200,600,50,50);
Rectangle right = new Rectangle(300,600,50,50);
g.setColor(Color.black);
g.fillRect(250,550,50,50);
g.fillRect(250,650,50,50);
g.fillRect(200,600,50,50);
g.fillRect(300,600,50,50);
}
无限循环和一系列分支循环决定下一个动作
向上:方向= 1
down:direction = 2
左:方向= 3
右:方向= 4
while(alive == true)
{
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
if(direction == 1)
{
if(grid[x][y - 1] == 0)
{
moveUp(g);
}
if(y == -1)
{
fail(g);
}
if(grid[x][y - 1] == 1)
{
fail(g);
}
if(grid[x][y - 1] == 2)
{
y = y-1;
food(g);
}
}
if(direction == 2)
{
if(grid[x][y + 1] == 0)
{
moveDown(g);
}
if(y == 11)
{
fail(g);
}
if(grid[x][y + 1] == 1)
{
fail(g);
}
if(grid[x][y + 1] == 2)
{
y = y+1;
food(g);
}
}
if(direction == 3)
{
if(grid[x - 1][y] == 0)
{
moveLeft(g);
}
if(x == -1)
{
fail(g);
}
if(grid[x - 1][y] == 1)
{
fail(g);
}
if(grid[x - 1][y] == 2)
{
x = x-1;
food(g);
}
}
if(direction == 4)
{
if(grid[x + 1][y] == 0)
{
moveRight(g);
}
if(x == 11)
{
fail(g);
}
if(grid[x + 1][y] == 1)
{
fail(g);
}
if(grid[x + 1][y] == 2)
{
x = x+1;
food(g);
}
}
}
我遇到麻烦的方法。在程序完成之前,它似乎没有改变方向的值
public boolean mouseDown(Event e, int x, int y)
{
if(up.inside(x,y))
{
direction = 1;
System.out.println(direction);
}
if(down.inside(x,y))
{
direction = 2;
System.out.println(direction);
}
if(left.inside(x,y))
{
direction = 3;
System.out.println(direction);
}
if(right.inside(x,y))
{
direction = 4;
System.out.println(direction);
}
return true;
}
请注意,为了简洁起见,我省略了其余的代码,但如果它实际上是相关的,我可以提供它。
提前致谢。