如何在java图形上使用布尔值使砖消失?

时间:2018-05-22 00:29:44

标签: java graphics boolean

我正在学校用Java制作Atari Arkanoid的演示版。一旦使用布尔值击中,我将如何制作消失的砖块?它必须先碰撞然后消失而不再出现。

    //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 :(得分:1)

所以,你需要(通常称为a)&#34; flag&#34;

这个&#34;标志的目的&#34;是管理一个州,并提供一种方法,通过它你可以检查该特定的状态。

在这种情况下,我们希望在满足某些条件时使砖块不可见。

所以,让我们首先介绍我们的&#34;标志&#34;作为Brickbase类的实例字段......

public class Brickbase {

    private boolean visible = true;

甜蜜,我们知道有办法确定砖是否可见,并可能改变这种状态。

所以,显然,我们可能要做的第一件事就是根据&#34; flag&#34;的状态确定是否应该绘制砖块,可能是......

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

接下来,我们想要在某种程度上更改我们的&#34; flag&#34;的状态,在你遇到砖块的情况下,可能就像......

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时从模型管理中移除砖块,从而节省了所有麻烦并减少了整体计算开销,但是我没有足够的背景来获得该

的解决方案