2014-02-03 4 views
0

Я начинающий программист, и я пытаюсь сделать простую 2D-игру Breakout. У меня есть логика для самой игры, но у меня возникают проблемы с получением кнопок для работы с игрой. Я добавил кнопку запуска и паузы в верхнюю часть экрана, но всякий раз, когда я нажимал одну из этих кнопок, весло в нижней части экрана не может перемещаться.Breakout Game: проблемы с JButton

Когда я вынимаю кнопки, игра работает отлично.

Любая помощь была бы принята с благодарностью! Заранее спасибо.

Ниже приведен код для моей игры. Я включил класс Breakout, потому что это было, когда я столкнулся с trouoble.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.TimerTask; 

public class Breakout extends JPanel implements KeyListener, ActionListener 
{ 
boolean rightPressed; 
boolean leftPressed; 
boolean upPressed; 
boolean downPressed; 

boolean inGame; 

int width = 1450; 
int height = 900; 
Timer tm = new Timer(5, this); 
int numRows =5; 
int numCols = 8; 
int numBricks = 40; 

int mouseX; 
int mouseY; 

Paddle paddle = new Paddle(width/2, height-40); 
Ball ball = new Ball(); 
//BrickArray brick = new BrickArray(numRows, numCols, width/numCols, (height-100)/numRows); 
Brick[][] bricks = new Brick[8][5]; 

JButton start = new JButton("Start"); 
JButton pause = new JButton("Pause"); 
JButton reset = new JButton("Reset"); 
JButton exit = new JButton("Exit"); 
JButton help = new JButton("Help"); 

public Breakout() 
{ 
    setDoubleBuffered(true); 
    //tm.start(); 
    addKeyListener(this); 
    setFocusable(true); 

    add(start); 
    start.addActionListener(new StartAction());  
    add(pause); 
    pause.addActionListener(new PauseAction()); 
    add(reset); 
    add(exit); 
    add(help); 

    ball.setMaxX(width); 
    ball.setMaxY(height); 
    ball.setWidth(width); 
    ball.setHeight(height);  
    ball.setX(width/2); //width/2 
    ball.setY(height/2); //height 

    paddle.setMaxX(width-paddle.getWidth()); 

    int k=0; 
    //row 1 
    for(int a=0; a<bricks.length; a++) 
    { 
     bricks[a][0]=new Brick(120,40); 
     bricks[a][0].setX(a*180); 
     bricks[a][0].setY(50); 
     //System.out.println(k + ": " + a*80); 
    } 

    //row 2 
    for(int b=0; b<bricks.length; b++) 
    { 
     bricks[b][1]=new Brick(120,40); 
     bricks[b][1].setX(b*180); 
     bricks[b][1].setY(100); 
    } 

    //row 3 
    for(int c=0; c<bricks.length; c++) 
    { 
     bricks[c][2]=new Brick(120,40); 
     bricks[c][2].setX(c*180); 
     bricks[c][2].setY(150); 
    } 

    //row 4 
    for(int d=0; d<bricks.length; d++) 
    { 
     bricks[d][3]=new Brick(120,40); 
     bricks[d][3].setX(d*180); 
     bricks[d][3].setY(200); 
    } 

    for(int e=0; e<bricks.length; e++) 
    { 
     bricks[e][4]=new Brick(120,40); 
     bricks[e][4].setX(e*180); 
     bricks[e][4].setY(250); 
    } 

} 

public void actionPerformed(ActionEvent e) 
{ 
    tm.setRepeats(true); 

    if(rightPressed) 
    { 
     paddle.setX(paddle.getX()+5); 
     //System.out.println("Pressed");  
    } 
    if(leftPressed) 
     paddle.setX(paddle.getX()-5); 
    /*if(upPressed) 
     y--; 
    if(downPressed) 
     y++;*/ 

    ball.checkCollision(paddle);   
    for(int i=0; i<bricks.length; i++) 
    { 
     for(int j=0; j<bricks[i].length; j++) 
     { 
      if(ball.checkCollision(bricks[i][j])) 
      { 
       bricks[i][j].destroy(); 
       //System.out.println(bricks[i][j].isDestroyed()); 
       numBricks--; 
       ball.move(); 
       repaint(); 
      } 
     } 
    }  


    //ball.checkCollision(brick); 
    ball.move();   
    repaint(); 
} 

public void keyPressed(KeyEvent e) 
{ 
    int c = e.getKeyCode(); 
    if(c == KeyEvent.VK_LEFT) 
    { 
     leftPressed=true; 
    } 
    /*if(c == KeyEvent.VK_UP) 
    { 
     upPressed=true; 
    }*/ 
    if(c == KeyEvent.VK_RIGHT) 
    { 
     rightPressed=true; 
     //System.out.println("Pressed");  
    } 
    /*if(c == KeyEvent.VK_DOWN) 
    { 
     downPressed=true; 
    }*/ 

} 

public void keyTyped(KeyEvent e) 
{ 
} 

public void keyReleased(KeyEvent e) 
{ 
    int c = e.getKeyCode(); 
    if(c == KeyEvent.VK_LEFT) 
    { 
     leftPressed=false; 
    } 
    if(c == KeyEvent.VK_UP) 
    { 
     upPressed=false; 
    } 
    if(c == KeyEvent.VK_RIGHT) 
    { 
     rightPressed=false; 
    } 
    if(c == KeyEvent.VK_DOWN) 
    { 
     downPressed=false; 
    } 
} 

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 


    for(int a=0; a<bricks.length; a++) 
    { 
     g.setColor(Color.RED); 
     bricks[a][0].paintComponent(g); 
    } 
    for(int b=0; b<bricks.length; b++) 
    { 
     g.setColor(Color.ORANGE); 
     bricks[b][1].paintComponent(g); 
    } 
    for(int c=0; c<bricks.length; c++) 
    { 
     g.setColor(Color.YELLOW); 
     bricks[c][2].paintComponent(g); 
    } 
    for(int d=0; d<bricks.length; d++) 
    { 
     g.setColor(Color.GREEN); 
     bricks[d][3].paintComponent(g); 
    } 
    for(int e=0; e<bricks.length; e++) 
    { 
     g.setColor(Color.BLUE); 
     bricks[e][4].paintComponent(g); 
    }  
    ball.paintComponent(g); 
    paddle.paintComponent(g); 
    g.setColor(Color.BLACK); 
    g.drawString("Bricks left: " + numBricks, 10, 10); 

} 

public static void main(String[] args) 
{ 
    Breakout obj = new Breakout(); 
    JFrame jf = new JFrame(); 
    jf.setTitle("Breakout"); 
    jf.setSize(1450,900); 
    jf.setVisible(true); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.add(obj); 
} 

class StartAction implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     tm.start(); 
     System.out.println("Start"); 
    } 
} 

class PauseAction implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     tm.stop(); 
     System.out.println("Pause"); 
    } 
} 
} 
+1

Когда я пытаюсь скомпилировать, что я получаю 11 ошибок компиляции для 'Paddle',' 'Ball' & Brick', которые все не хватает. Чтобы лучше помочь, опубликуйте [Минимальный полный тестируемый и читаемый пример] (http://stackoverflow.com/help/mcve) (MCTRE). –

+0

@ Андрю Томпсон hmmm через неделю «вне офиса» и из MCVE есть MCTRE. Я возвращаюсь обратно к SSCCE – mKorbel

+0

@mKorbel. К лучшему или худшему, мы скоро застрянем с сообществом, отредактированным MCVE/MCTRE. К сожалению, бесплатный хост из моих 4 интернет-доменов решил прекратить предлагать веб-хостинг вообще, и большинство доменов не стоит платить за хостинг. Это означает, что SSCCE.org исчезнет навсегда в конце февраля. :( –

ответ

0

У меня нет других классов, поэтому я не могу подтвердить, будет ли это работать.

start.setFocusable(false); 
pause.setFocusable(false); 

Альтернативно

start.addKeyListener(this); 
pause.addKeyListener(this); 
Смежные вопросы