Posted 15 August 2012 - 07:45 PM
aw man one last question. i have a mainBall and a randomApple and im testing collision for them. every time i hit the randomApple with the mainBall it adds another main ball to my arrayList MainBall. The only problem is that it adds 4 balls to my mainball arraylist instead of just one. how do i fix that?
[source lang="java"]import java.applet.Applet;import java.awt.Color;import java.awt.Component;import java.awt.Event;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.util.ArrayList;import java.util.concurrent.TimeUnit;public class snake extends Applet implements Runnable{ static final int WIDTH = 450; //set screen height static final int HEIGHT = 450; // set screen width private Image dbImage; private Graphics dbg; public ArrayList<Ball> SnakeSize; static final int NUM_OF_BALLS = 4; int i; int t; Rectangle randomAppleRectangle; Rectangle BallRectangle; Ball Ball = new Ball(100, 100, 10, 10, 0, 0); Apple randomApple = new Apple(250, 250, 15, 15); public void start() { Thread th = new Thread(this); th.start();//start main game } public void updateGame() { randomAppleRectangle = getAppleBounds(); BallRectangle = getBallBounds(); checkCollision(); Ball.ypos += Ball.yspeed; Ball.xpos += Ball.xspeed; if (Ball.xpos < 1) { Ball.xpos = 449; } if (Ball.xpos > 449) { Ball.xpos = 1; } if (Ball.ypos < 1) { Ball.ypos = 449; } if (Ball.ypos > 449) { Ball.ypos = 1; } try { Thread.sleep(20); } catch(InterruptedException ex){} } private void debugPrint(String value) { System.out.println(value); } public class updateTime extends Thread implements Runnable { public void run() { for(t = 0; ; t++) { try { Thread.sleep(1000); } catch(InterruptedException e){} } } } public int randomNumber() { return (int)(Math.random() * 400); } public class Ball { int width; int height; int xpos; int ypos; int xspeed; int yspeed; public Ball( int xpos, int ypos, int width, int height, int xspeed, int yspeed) { this.width = 10; this.height = 10; this.xpos = 100; this.ypos = 100; this.xspeed = 0; this.yspeed = 0; } public void paintBall(Graphics g) { g.setColor(Color.black); g.fillOval(Ball.xpos, Ball.ypos, width, height); g.drawString(xpos + ", " + ypos, 20, 40); } }//mainBall public class Apple { int x; int y; int width; int height; public Apple(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; }//end ball public void paint(Graphics g) { g.setColor(Color.red); g.fillOval(x, y, width, height); g.drawString("Apple printed at: " + randomApple.x + ", " + randomApple.y, 20, 60); g.drawString("Size of snake: " + SnakeSize.size(), 20, 80); } //end paint } //ball class public void update(Graphics g) //double buffer don't touch!! { if(dbImage == null) { dbImage = createImage(this.getSize().width, this.getSize().height); dbg = dbImage.getGraphics(); } dbg.setColor(getBackground()); dbg.fillRect(0, 0, this.getSize().width, this.getSize().height); dbg.setColor(getForeground()); paint(dbg); g.drawImage(dbImage, 0, 0, this); } public boolean keyDown (Event e, int key) { if(key == Event.LEFT) { Ball.xspeed = -5; Ball.yspeed = 0; } if(key == Event.RIGHT) { Ball.xspeed = 5; Ball.yspeed = 0; } if(key == Event.UP) { Ball.yspeed = -5; Ball.xspeed = 0; } if(key == Event.DOWN) { Ball.yspeed = 5; Ball.xspeed = 0; } return true; } public void run() { while(true) { repaint(); } } public void init() { this.setSize(WIDTH, HEIGHT); SnakeSize = new ArrayList<Ball>(); } public void paint(Graphics g) { updateGame(); g.drawString("time: " + t, 20, 20); Ball.paintBall(g); randomApple.paint(g); } public Rectangle getBallBounds() { return new Rectangle(Ball.xpos, Ball.ypos, 10, 10); } public Rectangle getAppleBounds() { return new Rectangle(250, 250, 15, 15); } public void checkCollision() { if(BallRectangle.intersects(randomAppleRectangle)) { SnakeSize.add(new Ball(Ball.xpos - 10, Ball.ypos - 10, 10, 10, 0, 0)); } }}[/source]