2011-01-14 6 views
0

これは私がユニコースのために完成しなければならない抜粋であり、それはマークされた割り当てではなく、少し助けを借りて行うことができます。私は画面上に表示され、側面のバウンスを得ることができます、それは画面の下を通って、私はパドルを別の時に画面に表示することができますが、私はそれらを取得するパドルを取得することができます両方とも同時に出現する。ここでヘルプしてくださいJFrameにパドルを追加するのに役立つ

は、私のクラスは

MainClass

package movingball; 

public class Main 
{ 
    public static void main (String []args) 
    { 
     MovingBall world = new MovingBall("Moving Ball"); 
     world.setVisible(true); 
     world.move(); 
    } 
} 

BallClass

package movingball; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Point; 

public class Ball 
{ 
    private final int RADIUS = 10; 

    private Point pos; 
    private Color ballColour; 
    private int yChange = 2; 
    private int xChange = 1; 
    private int height, width; 
    private int change; 

    public Ball (int frameWidth, int frameHeight) 
    { 
     change = 3; 
     ballColour = Color.RED; 
     width = frameWidth; 
     height = frameHeight; 
     pos = new Point(); 
     pos.x = (int)(Math.random() * (width - RADIUS)) + RADIUS; 
     pos.y = (int)(Math.random() * (height/2 - RADIUS)) + RADIUS; 
    } 

    //There are lots of ways you can updateBallState 
    //Note that the menu bar occupies some of the visible space 
    public void move() 
    { 
     if(pos.y < RADIUS) 
     { 
      yChange = - yChange; 
     } 
     if(pos.x < RADIUS) 
     { 
      xChange = -xChange; 
     } 
     if(pos.x > width - RADIUS) 
     { 
      xChange = -xChange; 
     } 
     if(pos.y < height - RADIUS) 
     { 
      pos.translate(xChange, yChange); 
     } 
     if(pos.x < width - RADIUS) 
     { 
      pos.translate(xChange, yChange); 
     } 
    } 

    public void updateBallState() 
    { 
     if (pos.y + change < height - 3*RADIUS) 
     { 
      pos.translate(0, change); 
      // change++; //accelerate 
     } 
    } 

    //This method can be called with a provided graphics context 
    //to draw the ball in its current state 
    public void draw(Graphics g) 
    { 
     g.setColor(ballColour); 
     g.fillOval(pos.x - RADIUS, pos.y - RADIUS, 2*RADIUS, 2*RADIUS); 
    } 

    public void bounce() 
    { 
     yChange = -yChange; 
     pos.translate(xChange, yChange); 
    } 

    public Point getPosition() 
    { 
     return pos; 
    } 
} 

野球の試合

package movingball; 

import java.awt.Graphics; 
import java.awt.event.*; 

public class BallGame extends MovingBall 
{ 

    private Paddle myPaddle = new Paddle(FRAME_WIDTH, FRAME_HEIGHT); 


    public BallGame(String title) 
    { 
     super(title); 
     addKeyListener(new KeyList());  
    } 

    public void paint(Graphics g) 
    { 
     super.paint(g); 
     myPaddle.paint(g); 
     if(isContact()) 
     { 
      myBall.bounce(); 
     } 
     else 
     { 
      myPaddle.paint(g); 
     } 
    } 

    public boolean isContact() 
    { 
     if (myPaddle.area().contains(myBall.getPosition())) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public class KeyList extends KeyAdapter 
    { 
     public void keyPressed(KeyEvent k) 
     { 
      if(k.getKeyCode() == KeyEvent.VK_LEFT) 
      { 
      myPaddle.moveLeft(); 
      } 
      if(k.getKeyCode() == KeyEvent.VK_RIGHT) 
      { 
      myPaddle.moveRight(); 
      } 
     } 
    } 
} 

MovingBallクラス

ですここで
package movingball; 

import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class MovingBall extends JFrame 
{ 
    protected final int FRAME_WIDTH = 240; 
    protected final int FRAME_HEIGHT = 320; 
    protected Ball myBall = new Ball(FRAME_WIDTH, FRAME_HEIGHT); 

    public MovingBall (String title) 
    { 
     super(title); 

     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    } 

    public void paint(Graphics g) 
    { 
     super.paint(g); 
     myBall.draw(g); 
    } 

    public void move() 
    { 
     while(true) 
     { 
      myBall.move(); 
      repaint(); 
      try 
      { 
      Thread.sleep(50); 
      } 
      catch(InterruptedException e) 
      { 
      System.exit(0); 
      } 
     } 
    } 
} 

パドルクラス

package movingball; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 


public class Paddle 
{ 
    private Color paddleColour = Color.GREEN; 
    private int x,y; 
    private int paddleWidth = 20; 
    private int paddleHeight = 10; 
    private int move = 5; 


    /** Creates a new instance of Paddle */ 
    public Paddle(int frameWidth, int frameHeight) 
    { 

     x =(int)(Math.random()*(frameWidth - paddleWidth)); 
     y = frameHeight - paddleHeight; 

    } 

    public void moveRight() 
    { 
     x = x + move; 
    } 

    public void moveLeft() 
    { 
     x = x - move; 
    } 

    public Rectangle area() 
    { 
     return new Rectangle(x,y, paddleWidth, paddleHeight); 
    } 

    public void paint(Graphics g) 
    { 
     g.setColor(paddleColour); 
     g.fillRect(x,y,paddleWidth, paddleHeight); 
    } 
} 

答えて

1

はあなたが始めるためにポインタのカップルです。私は示唆すべきことがたくさんありますが、私はあなたのことを今よりもさらに深くするためにこれを言います。あなたはJFrameをダブルバッファにしたいと思っています。それが最初のステップです。これを行うには、それを可視化した後、あなたのJFrameのための新しいバッファ戦略を作成する:あなたのパドルが塗装されていない理由については

world.setVisible(true); 
world.createBufferStrategy(2); 

を?あなたは自分を蹴るつもりです。この行を見てください:

MovingBall world = new MovingBall("Moving Ball"); 

あなたが実際にパドルを塗装するためのロジックが含まれているところである、BallGameを作成していません! (BallGame.paint())試してみてください:主要ザッツ

BallGame world = new BallGame("Moving Ball"); 
+0

を:(それは、私はそれが正しいだろうと仮定し、私は新しい野球の試合のクラスを追加し忘れてしまった私は原因を見ていませんでし唯一のクラスでした。 – user445714

関連する問題