Как сделать так, чтобы кирпичи исчезали с помощью логического выражения на графике Java? - PullRequest
0 голосов
/ 22 мая 2018

Я делаю демо-версию Atari Arkanoid с Java в школе.Как бы я сделал кирпичи, которые исчезают при ударе, используя логическое значение?Сначала он должен столкнуться, затем исчезнуть и не появляться снова.

    //brickbase
    import java.awt.*;
    public class Brickbase
    {
       private int myX; // x and y coordinates of center
       private int myY;
       private int myXWidth;
       private int myYWidth;
       private Color myColor;

       public Brickbase(int x, int y, int xWidth, int yWidth, Color c)
       {
          myX = x;
          myY = y;
          myXWidth = xWidth;
          myYWidth = yWidth;
          myColor = c;  
       }
        // accessor methods
       public int getX()
       {
          return myX;
       }
       public int getY()
       {
          return myY;
       }
       public int getXWidth()
       {
          return myXWidth;
       }
       public int getYWidth()
       {
          return myYWidth;
       }
       public Color getColor() 
       { 
          return myColor;
       }
       // modifier methods
       public void setX(int x)
       {
          myX= x;
       }

       public void setXWidth(int xWidth)
       {
          myXWidth = xWidth;
       }

       public void setY(int y)
       { 
          myY=y;
       }

       public void setYWidth(int yWidth)
       {
          myYWidth =yWidth;
       }
       public void jump(int rightEdge, int bottomEdge)
       {
          myX= rightEdge;
          myY= bottomEdge;

       }

       public void setColor(java.awt.Color c)
       {
          myColor = c;
       }
        //   instance methods

       public void draw(Graphics myBuffer) 
       {
            myBuffer.setColor(getColor());
             myBuffer.fillRect(getX(), getY(), getXWidth(),                 getYWidth());

       }   

       public boolean inBrickbase(arkBall ark)
       {
          for(int x = getX(); x <= getX() + getXWidth(); x++)           //starts at upper left corner(x,y)
             for(int y = getY(); y <= getY() + getYWidth(); y++)
                if(distance(x, y, ark.getX(), ark.getY()) <= ark.getRadius() ) //checks every point on the bumper
                   return true;            
          return false;
       }  



       private double distance(double x1, double y1, double x2, double y2)
       {
          return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
       }    
    }

Когда шар с именем ark попадает в кирпич, он отскакивает, но кирпич не затрагивается.Я знаю, что должен использовать логическое значение, но что мне делать?Мой учитель просит нас провести исследование, но мой учебник по Java не содержит булевых или графических элементов, поскольку он не является частью учебной программы AP.Примеры кода для Arkanoid доступны, но они слишком сложны и иногда не могут быть применены к моему коду.

1 Ответ

0 голосов
/ 22 мая 2018

Итак, вам нужен (так называемый) «флаг»

Цель этого «флага» - управлять состоянием и предоставлять средства, с помощью которых вы можете проверить это конкретное состояние.

В этом случае мы хотим сделать кирпич невидимым при выполнении некоторого условия.

Итак, начнем с введения нашего "флага" в качестве поля экземпляра в класс Brickbase..

public class Brickbase {

    private boolean visible = true;

Сладкий, мы знаем, что есть способ определить, видим ли кирпич или нет, и, возможно, изменить это состояние.

Итак, очевидно, первое, что мы могли бы сделатьэто определить, должен ли кирпич быть окрашен или нет, основываясь на состоянии "флага", может быть что-то вроде ...

public void draw(Graphics myBuffer) {
    if (visible) {
        myBuffer.setColor(getColor());
        myBuffer.fillRect(getX(), getY(), getXWidth(), getYWidth());
    }
}

Далее, мы хотим каким-то образом изменить состояние нашего "флага"«в вашем случае, когда по кирпичу бьют, может быть, что-то вроде ...

public boolean inBrickbase(arkBall ark) {
    if (visible) {
        for (int x = getX(); x <= getX() + getXWidth(); x++) //starts at upper left corner(x,y)
        {
            for (int y = getY(); y <= getY() + getYWidth(); y++) {
                if (distance(x, y, ark.getX(), ark.getY()) <= ark.getRadius()) //checks every point on the bumper
                {
                    visible = false;
                    return true;
                }
            }
        }
    }
    return false;
}

Теперь, прежде чем кто-то на это скажет, я мог бы рассмотреть вопрос об удалении кирпича из любой модели, которой он управляет, когда inBrickbase возвращает true, тем самым сохраняя все хлопоты и сокращаяобщие вычислительные затраты, но у меня недостаточно контекста, чтобы найти решение для этого

...