2016-09-30 7 views
2

私はちょうどJavaを学び始めました。インターネット上のすべてを見て、私はまだこの問題の解決策を見つけていない。これはゲームのポンです。私は、私がキーを制御していることをパットする必要があります。 'w'、 's'、up、downです。グラフィックスセクションでパネルを描画するとき、私はY1にpadelYを使用し、Y2にはpadelY + padelLength(A定数)を使用します。私は、私が上下に動かすと、パッドがサイズを変えるというプログラムがうまくいかない理由を理解できないようです。また、右側のパデルはpanel1という名前で、パデルを描くとスクリーンサイズを使用します。これはX1のパッセンジャースペーシングですが、まだパデルが横になっているようです。Javaグラフィックスの矩形サイズの変更

誰もがそのような問題に対して与えることができるアドバイスや、一般的に私のコードをクリーンアップする方法については本当に感謝しています!

ありがとうございます!

package Pong; 

//Import Libraries 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

@SuppressWarnings("serial") 
public class Pong extends JPanel implements KeyListener{ 

int padel1y = 150; 
int padel2y = 150; 

static final int padelLength = 100; 

int padelWidth = 10; 
int padelSpeed = 2; 

int padel2Speed = 0; 
int padel1Speed = 0; 

int ballX = BOX_WIDTH/2; 
int ballY= BOX_HEIGHT/2; 
int ballXSpeed = 2; 
int ballYSpeed = 1; 
int ballRadius = 10; 
int ballCount = 0; 

public final static int ballSpeedIncrease = 500; 
public final static int BOX_WIDTH = 600; 
public final static int BOX_HEIGHT = 600; 
public final static int UPDATE_RATE = 100; 
public final static int padelSpace = 10; 

public Pong() { 

    setPreferredSize(new Dimension(BOX_WIDTH,BOX_HEIGHT)); 

    Thread gameThread = new Thread() { 

     public void run(){ 

      while(true){ 

       ballCount = ballCount + 1; 

       if(ballCount%ballSpeedIncrease == 0){ 

        if(ballXSpeed < 0){ 
         ballXSpeed = ballXSpeed - 1; 
        } 
        if(ballYSpeed < 0){ 
         ballYSpeed = ballYSpeed - 1; 
        } 
        if(ballXSpeed > 0){ 
         ballXSpeed++; 
        } 
        if(ballYSpeed > 0){ 
         ballYSpeed++; 
        } 

       } 

       if(ballX-ballRadius <= 10+padelWidth){ 

        if(ballY<padel2y || ballY>padel2y+padelLength){ 
         System.exit(0); 
        } 
        else{ 
         ballXSpeed = -ballXSpeed; 
        } 

       } 

       else if(ballX+ballRadius >= 590-padelWidth){ 

        if(ballY<padel1y || ballY>padel1y+padelLength){ 
         System.exit(0); 
        } 
        else{ 
         ballXSpeed = -ballXSpeed; 
        } 

       } 

       if(ballY-ballRadius <= 0){ 

        ballYSpeed = -ballYSpeed; 

       } 

       else if(ballY+ballRadius >= BOX_HEIGHT){ 

        ballYSpeed = -ballYSpeed; 

       } 

       padel1y = padel1y +padel1Speed; 
       padel2y = padel2y +padel2Speed; 
       ballX = ballX + ballXSpeed; 
       ballY = ballY+ ballYSpeed; 

       repaint(); 

       try { 

        Thread.sleep(1000/UPDATE_RATE); 

       } 

       catch (InterruptedException ex) {} 

      } 

     } 

    }; 

gameThread.start(); 

} 

@Override 
public void paintComponent(Graphics g) { 

    super.paintComponent(g); 

    g.setColor(Color.white); 
    g.fillRect(0,0,BOX_WIDTH,BOX_HEIGHT); 

    g.setColor(Color.blue); 
    g.fillRect(padelSpace,padel2y,padelSpace + padelWidth,padel2y+padelLength); 
    g.fillRect(BOX_WIDTH-padelSpace,padel1y,BOX_WIDTH-padelSpace-padelWidth,padel1y+padelLength); 

    g.setColor(Color.green); 
    g.fillOval(ballX, ballY, ballRadius*2, ballRadius*2); 

} 

public static void main(String[] args) { 

    javax.swing.SwingUtilities.invokeLater(new Runnable() { 

     public void run() { 

      //Create Frame 
      JFrame frame = new JFrame("PONGPONGPONGPONGPONGPONGPONGPONGPONGPONGPONGPONGPONGPONGPONGPONGPONGPONG"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      Pong pong = new Pong(); 
      frame.setContentPane(pong); 
      frame.setSize(BOX_WIDTH,BOX_HEIGHT); 
      frame.pack(); 
      frame.addKeyListener(pong); 
      frame.setVisible(true); 

     } 

    }); 

} 

public void keyPressed(KeyEvent e){ 

    if(e.getKeyCode() == KeyEvent.VK_UP){ 

     padel1Speed = -padelSpeed; 

    } 

    else if(e.getKeyCode() == KeyEvent.VK_DOWN){ 

     padel1Speed = padelSpeed; 

    } 

    else if(e.getKeyCode() == KeyEvent.VK_W){ 

     padel2Speed = -padelSpeed; 

    } 

    else if(e.getKeyCode() == KeyEvent.VK_S){ 

     padel2Speed = padelSpeed; 

    } 

} 

@Override 
public void keyReleased(KeyEvent e) { 

    if(e.getKeyCode() == KeyEvent.VK_UP){ 

     padel1Speed = 0; 

    } 

    else if(e.getKeyCode() == KeyEvent.VK_DOWN){ 

     padel1Speed = 0; 

    } 

    else if(e.getKeyCode() == KeyEvent.VK_W){ 

     padel2Speed = 0; 

    } 

    else if(e.getKeyCode() == KeyEvent.VK_S){ 

     padel2Speed = 0; 

    } 

} 

@Override 
public void keyTyped(KeyEvent e) {} 

}

fillRect()

答えて

0

方法を使用する方法に関するドキュメントのためにこれを見るhttps://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html#fillRect(int,%20int,%20int,%20int)

引数は、X位置、Y位置、幅と高さ。

あなたはこのようにそれを使用します。g.fillRect(padelSpace,padel2y,padelSpace + padelWidth,padel2y+padelLength);

第二と第三引数が間違っています。幅と高さだけを渡す必要があります。このように:g.fillRect(padelSpace, padel2y, padelWidth, padelLength);

もっと一般的には、何かがうまくいかないとき(パドルを描く)、それを行うために使用する方法に関するドキュメントを読んでください。

関連する問題