2

所以我一直在尝试使用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

向下:方向 = 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;

}

请注意,为简洁起见,我省略了其余代码,但如果它实际上相关,我可以提供它。

提前致谢。

4

0 回答 0