Java和Myro突破游戏程序提前关闭

时间:2013-04-20 00:43:50

标签: java myro

我正在使用java和myro进行经典突破游戏。程序加载球和球拍,但随后立即关闭程序。

我想要的是Myrobricks的集合出现在窗口的顶部,然后球随机移动并从球拍中弹出。当它击中其中一块砖时,砖块消失,球反弹。

以下是代码:

import Myro.*;
import java.util.*;
import java.awt.*;


public class BreakOut
{
// declare the Scribbler object
private Scribbler robot;

private boolean intersects( MyroShape s1, MyroShape s2 )
{
    if( s1.getTop() >= s2.getBottom() || s1.getBottom() <= s2.getTop() || s1.getLeft() >= s2.getRight() || s1.getRight() <= s2.getLeft() )
        return false;
    else
        return true;
}

public void main()
{   //set a canvas that has 500 width, 500 height
    final int WIDTH = 500;
    final int HEIGHT = 500;
    MyroCanvas myCanvas = new MyroCanvas( "Breakout",WIDTH, HEIGHT );

    int brickX = 0;
    int brickY = 60;

    //creating the collection of bricks
    Collection<MyroRectangle> bricks = new ArrayList<MyroRectangle>();

    //create a rectangle(the paddle)
    MyroRectangle paddle = new MyroRectangle( myCanvas, 205, 475, 90, 25 );
    //make it visible
    paddle.makeFilled();
    paddle.setFillColor( Color.green );
    paddle.visible();
    //create a ball
    MyroCircle ball = new MyroCircle( myCanvas, 250, 465, 10 );
    ball.makeFilled();
    ball.setFillColor( Color.blue );
    ball.visible();
    //choose a random Delta X(negative) & Y(not 0)
    int deltaX = MyroUtils.randomInt( -4,-1 );
    int deltaY = MyroUtils.randomInt(-4, 4);
    //if it chooses zero, do another one

    myCanvas.setAutoRepaint( false );

    for ( int c = 0; c<9; c++ )
    {
        brickX = 0;
        for (int r = 0; c<4; c++)
        { 
            MyroRectangle rectangles = new MyroRectangle( myCanvas, brickX, brickY, 50, 20 );

            int red = MyroUtils.randomInt (0, 255);
            int green = MyroUtils.randomInt (0, 255);
            int blue = MyroUtils.randomInt (0, 255);

            rectangles.setFillColor( new Color (red, green, blue ));
            rectangles.makeFilled();
            rectangles.visible();
            bricks.add( rectangles );
            brickX = brickX + 50;
        }
        brickY = brickY + 20;
    }
    while (deltaY == 0)
    {
        deltaY = MyroUtils.randomInt(-4, 4);
    }
    boolean finished = false;
    while (!finished)
    {
        ball.move( deltaX, deltaY );
        MyroUtils.sleep( 0.01);
        int bricksCount = 40;
        //implementing the paddle that is controlled by the A and D keys
        if( MyroListener.isKeyPressed() )
        {
            if( MyroListener.whichKey() == 'q' )
            {
                // quit
                finished = true;
            }
            else if( MyroListener.whichKey() == 'a' )
            {
                paddle.move( -4,0 );
                if( paddle.getLeft() < 0 )
                {
                    paddle.move( 0, 0 );
                }
            }
            else if( MyroListener.whichKey() == 'd' )
            {
                paddle.move( 4,0 );
                if( paddle.getRight() > 500 )
                {
                    paddle.move( 0, 0 );
                }
            }
        }

        if ( ball.getBottom() == 500 )
            finished = true;

        if ( ball.getBottom()==0 )
            ball.move(deltaX,-deltaY);

        if ( ball.getLeft()==0 || ball.getRight()==500 )
            ball.move(-deltaX, deltaY);

        if( intersects( ball, paddle ))
            ball.move(deltaX,-deltaY);

        myCanvas.repaint();

        for (MyroRectangle rectangles : bricks)
        {
            if(rectangles.isVisible() && intersects( ball, rectangles ))
            {
                rectangles.invisible();
                deltaY = -deltaY;
                bricksCount--;
            }
        }
        if( bricksCount == 0 )
        {
            finished = true;
            MyroGUI.tellUser( "Congratulation!" );
        }
        myCanvas.setVisible( false );
    }
}
}

有关此代码有什么问题的任何想法?

1 个答案:

答案 0 :(得分:1)

我认为问题是:

myCanvas.setVisible( false );

在该声明之前,您的画布可见,请将其更改为:

myCanvas.setVisible( true );
看到差异。 即使它不是解决方案,也不应该将该语句留在那里,如果设置为true,JPanel.setVisible()方法用于将面板设置为对用户可见,并且您将面板设置为在显示自身后立即隐藏。如果那是你的意图,那就不会关闭正在运行的程序。

相关问题