2013-04-20 2 views
0

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); 
    } 
} 
} 

어떤 아이디어 : 여기

코드인가?

+0

예외가 있습니까? –

+0

아마도 'while (true)'이 곧 끝날 수도 있습니다. 'MyroUtils.sleep (0.01);를 증가 시키십시오. – acdcjunior

답변

1

나는 문제가 생각 : 차이를 볼 수

myCanvas.setVisible(true);
: 캔버스가 눈에 보였다 그 문 앞에
myCanvas.setVisible(false);

가로 변경. 해결 방법이 아니더라도 그 문을 그대로 두어서는 안되며, JPanel.setVisible() 메서드는 true로 설정된 경우 사용자에게 패널을 표시하도록 설정하고, 패널 자체를 표시 한 직후에는 패널을 보이지 않게 설정합니다. 그것이 실행 프로그램을 닫지는 않는다면 그것은 당신의 의도입니다.

관련 문제