簡體   English   中英

很難弄清楚如何不斷移動我的蛇

[英]Having a hard time on figuring out how to move my snake constantly

所以我正在創建一個名為蛇的 Java 游戲,我目前在如何讓蛇的起點在最初移動后不斷移動,我正在嘗試使用 thread.sleep 但我很用我'我在錯誤的地方使用它,任何提示/幫助將不勝感激!

import java.awt.event.KeyEvent;
public class snake
{
   static double squareX = .5;
   static double squareY = .5;
   static double squareR = .02;
   static double CsquareR = .01;
   static double CsquareX = Math.random();
   static double CsquareY = Math.random();




   public static void drawScene() 
   {
      StdDraw.clear();
      StdDraw.filledSquare(squareX, squareY, squareR);
      StdDraw.filledSquare(CsquareX, CsquareY, CsquareR);
      StdDraw.show(1000/24);  
   }




   public static void updateMotion() throws InterruptedException
   {

      if (StdDraw.isKeyPressed(KeyEvent.VK_UP))
      {
         squareY += .01;
         Thread.sleep(10);
      }
      else if (StdDraw.isKeyPressed(KeyEvent.VK_DOWN))
      {
         squareY -= .01;
         Thread.sleep(10);
      }
      else if (StdDraw.isKeyPressed(KeyEvent.VK_LEFT))
      {
         squareX -= .01;
         Thread.sleep(10);
      }
      else if (StdDraw.isKeyPressed(KeyEvent.VK_RIGHT))
      {
         squareX += .01;
         Thread.sleep(10);
      }
   }



   public static void main(String[] args)  throws InterruptedException 
   {
       while(true)
       {
         snake.drawScene();
         snake.updateMotion();
         if (squareX + squareR >= 1 )
         {
            //TODO: show "you lose" message / stop on edge of square
            break;
         }
         if (squareX - squareR <= 0)
         {
            //TODO: show "you win" message / stop on edge of square
            break;
         }   
         if (squareY + squareR >= 1 )
         {
            //TODO: show "you lose" message / stop on edge of square
            break;
         }
         if (squareY - squareR <= 0)
         {
            //TODO: show "you win" message / stop on edge of square
            break;
         }    
       }
   }
}

不要在按鍵時改變位置而是一直改變方向並更新位置。

   static double xMovement = 0;
   static double yMovement = 0;

   public static void updatePosition() {
       squareX += xMovement;
       squareY += yMovement;
   }

   public static void updateDirection() throws InterruptedException
   {

      if (StdDraw.isKeyPressed(KeyEvent.VK_UP))
      {
          xMovement =  0.0;
          yMovement = +0.1;
      }
      else if (StdDraw.isKeyPressed(KeyEvent.VK_DOWN))
      {
          xMovement =  0.0;
          yMovement = -0.1;
      }
      else if (StdDraw.isKeyPressed(KeyEvent.VK_LEFT))
      {
          xMovement = -0.1;
          yMovement =  0.0;
      }
      else if (StdDraw.isKeyPressed(KeyEvent.VK_RIGHT))
      {
          xMovement = +0.1;
          yMovement =  0.0;
      }
   }

   public static void main(String[] args)  throws InterruptedException 
   {
       while(true)
       {
         snake.drawScene();
         snake.updateDirection();
         snake.updatePosition();
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM