Bläddra i källkod

Added ball bouncing

Kenneth van Ewijk 10 år sedan
förälder
incheckning
2a7cea12d9
3 ändrade filer med 87 tillägg och 41 borttagningar
  1. 54 35
      src/model/objects/Ball.java
  2. 1 1
      src/model/objects/Player.java
  3. 32 5
      src/model/state/PlayState.java

+ 54 - 35
src/model/objects/Ball.java

@@ -2,67 +2,86 @@ package model.objects;
 
 import java.awt.Color;
 import java.awt.Graphics2D;
-import java.awt.Shape;
 import java.awt.geom.Ellipse2D;
 
+import main.Window;
 
 public class Ball {
 	private Color color;
 	private int size, bounceheight;
 	private Ellipse2D.Double bal;
-	
-	public Ball(int size, int bounceheight, Color color, int x, int y){
+
+	double rx = 100, ry = 100; // position
+	double vx = 1, vy = 1; // velocity
+
+	public Ball(int size, int bounceheight, Color color, int x, int y) {
 		this.color = color;
-		this.size = size;
+		this.size = size*20;
 		this.bounceheight = bounceheight;
-		bal = new Ellipse2D.Double(x,y,size*20,size*20);
+		bal = new Ellipse2D.Double(x, y, this.size, this.size);
 	}
-	
-	public void paint(Graphics2D g2d)
-	{
+
+	public void paint(Graphics2D g2d) {
 		g2d.setColor(color);
 		g2d.fill(bal);
 	}
-	
-	public int getSize(){
+
+	public void update() {
+		if (rx >= (Window.WIDTH - size))
+			vx = -1;
+		else if (rx <= 0)
+			vx = 1;
+
+		if (ry <= (Window.HEIGHT - bounceheight))
+			vy= 3;
+		else if (ry >= (600-size))
+			vy = -3;
+
+		rx += vx;
+		ry += vy;
+		
+		setX((int) rx);
+		setY((int) ry);
+	}
+
+	public int getSize() {
 		return size;
 	}
-	
-	public int getBounceHeight(){
+
+	public int getBounceHeight() {
 		return bounceheight;
 	}
-	
-	public int getX(){
-		return (int)bal.getX();
+
+	public int getX() {
+		return (int) bal.getX();
 	}
-	
-	public int getY(){
-		return (int)bal.getY();
+
+	public int getY() {
+		return (int) bal.getY();
 	}
-	
-	public int getWidth(){
-		return (int)bal.getWidth();
+
+	public int getWidth() {
+		return (int) bal.getWidth();
 	}
-	
-	public int getHeight(){
-		return (int)bal.getHeight();
+
+	public int getHeight() {
+		return (int) bal.getHeight();
 	}
-	
-	
-	public void setX(int x){
-		bal.setFrame(x, getY(), getWidth(),getHeight());
+
+	public void setX(int x) {
+		bal.setFrame(x, getY(), getWidth(), getHeight());
 	}
-	
-	public void setY(int y){
+
+	public void setY(int y) {
 		bal.setFrame(getX(), y, getWidth(), getHeight());
 	}
-	
-	public void setWidth(int w){
+
+	public void setWidth(int w) {
 		bal.setFrame(getX(), getY(), w, getHeight());
 	}
-	
-	public void setHeight(int h){
+
+	public void setHeight(int h) {
 		bal.setFrame(getX(), getY(), getWidth(), h);
 	}
-	
+
 }

+ 1 - 1
src/model/objects/Player.java

@@ -23,7 +23,7 @@ public class Player extends DrawObject {
 	}
 	
 	public void update(){
-		if(System.currentTimeMillis() - lastMovement > 200){
+		if(System.currentTimeMillis() - lastMovement >= 200){
 			image = spriteimage.getSubimage(38, 0, 40, 54);
 			frame = 0;
 		}else{

+ 32 - 5
src/model/state/PlayState.java

@@ -2,10 +2,14 @@ package model.state;
 
 import java.awt.Color;
 import java.awt.Graphics2D;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.Iterator;
 
+import javax.swing.Timer;
+
 import main.Window;
 import model.GameStateManager;
 import model.objects.Ball;
@@ -14,19 +18,24 @@ import model.objects.ShootingLine;
 import resources.image.Images;
 import resources.image.Images.ImageType;
 
-public class PlayState extends State{
+public class PlayState extends State implements ActionListener{
 	
 	Player player;
 	ArrayList<ShootingLine> lines;
 	ArrayList<Ball> balls;
 	
+	Timer t;
+	int direction;
+	
 	public PlayState(GameStateManager gsm) {
 		super("play", gsm);
 		
 		player = new Player(Images.getImage(ImageType.PLAYER1), 40, 550);
 		lines = new ArrayList<ShootingLine>();
 		balls = new ArrayList<Ball>();
-		balls.add(new Ball(5, 10, Color.red, 50, 50));
+		balls.add(new Ball(5, 400, Color.red, 50, 50));
+		
+		t = new Timer(1000/5, this);
 	}
 
 	/* INIT AND EXIT */
@@ -45,7 +54,12 @@ public class PlayState extends State{
 	/* UPDATE */
 	@Override
 	public void update() {		
-			if(player.getX() + 30 + player.getWidth() >= Window.WIDTH)
+		if(direction == 1)
+			player.setX(player.getX()+10);
+		else if(direction == -1)
+			player.setX(player.getX()-10);
+		
+		if(player.getX() + 30 + player.getWidth() >= Window.WIDTH)
 			{
 				player.setX(Window.WIDTH - 30 - player.getWidth()-1);
 			}
@@ -54,6 +68,9 @@ public class PlayState extends State{
 				player.setX(32);
 			}
 		player.update();
+		for(Ball b: balls){
+			b.update();
+		}
 		Iterator<ShootingLine> i = lines.iterator();
 		while(i.hasNext()){
 			ShootingLine l = i.next();
@@ -87,10 +104,10 @@ public class PlayState extends State{
 		switch(e.getKeyCode())
 		{
 		case KeyEvent.VK_RIGHT:
-			player.setX(player.getX()+10);
+			direction = 1;
 			break;
 		case KeyEvent.VK_LEFT:
-			player.setX(player.getX()-10);
+			direction = -1;
 			break;
 		case KeyEvent.VK_SPACE:
 			if(lines.size() == 0){
@@ -102,6 +119,10 @@ public class PlayState extends State{
 	public void keyReleased(KeyEvent e) {
 		switch(e.getKeyCode())
 		{
+		case KeyEvent.VK_RIGHT:
+		case KeyEvent.VK_LEFT:
+			direction = 0;
+			break;
 		case KeyEvent.VK_ESCAPE:
 			gsm.setState("menu");
 			break;
@@ -109,4 +130,10 @@ public class PlayState extends State{
 	}
 	@Override
 	public void keyTyped(KeyEvent e) {}
+
+	@Override
+	public void actionPerformed(ActionEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
 }