Thread: Ping pong game
View Single Post
  #5 (permalink)  
Old 03-19-2008, 04:04 PM
adam405 adam405 is offline
Member
 
Join Date: Mar 2008
Posts: 7
adam405 is on a distinguished road
thanks, works well. I am trying to add in a brick to hit. I am again struggling with the logic. The problem is that the brick sometime disappears even though the ball i no where near brick. This happens if i just let the game run with no keyboard interaction at the start

Code:
// <applet code="FullBallRx" width="400" height="400"></applet> import java.applet.*; import java.awt.*; import java.awt.event.*; import java.util.Random; public class FullBall extends Applet implements Runnable { //position of the ball int x_pos = 12; int y_pos = 12; //position of the ball ** slider ** int sliderx_pos = 50; int slidery_pos = 150; //ball size int radius = 5; //size of slider int swidth = 60; int sheight = 1; Rectangle box = new Rectangle(swidth, sheight); //balldirection int x_speed = 6; int y_speed = 8; //slider direcion int sliderx_speed = 0; //applet size int appletsize_top = getHeight(); int appletsize_bottom = appletsize_top + 20 * 10; int appletsize_left = getWidth(); int appletsize_right = appletsize_left + 35 * 10; //random movement Random rnd = new Random (); //Drawing image off screen private Image dbImage; private Graphics dbg; Thread thread; boolean running = false; //level stuff int lx_pos = 100; int ly_pos = appletsize_top +20; int lwidth = 50; int lheight =1; Rectangle brick = new Rectangle(lwidth, lheight); public void init() { enableEvents(AWTEvent.KEY_EVENT_MASK); setFocusable(true); } public void start () { // define a new thread running = true; thread = new Thread (this); // start this thread thread.start (); System.out.println("start"); } public void stop() { running = false; if(thread != null) thread.interrupt(); thread = null; System.out.println("stop"); } public void run () { while (running) { //change direct if the ball hits the left or right wall // stop ball if out if (x_pos - radius + x_speed < appletsize_left || x_pos + radius + x_speed > appletsize_right ) { x_speed *= -1; } if (y_pos - radius + y_speed < appletsize_top) { y_speed *= -1; } if(y_pos + radius + y_speed > appletsize_bottom ) { stop(); } //what to do if we hit the slider if(x_pos + radius > sliderx_pos && x_pos - radius < sliderx_pos + swidth) { // Ball is in vertical plane of slider. // Check for possible horizontal contact. if(y_pos + radius + y_speed > slidery_pos) { // We have an imminent collision -> bounce! y_speed *= -1; } } //what to do if we hit a brick else if(x_pos - radius > lx_pos && x_pos + radius < lx_pos + lwidth) { // Ball is in vertical plane of slider. // Check for possible horizontal contact. if(y_pos - radius - y_speed > ly_pos) { // We have an imminent collision -> bounce! y_speed *= -1; lx_pos = 10000; ly_pos = 10000; } } x_pos += x_speed; y_pos += y_speed; //repaint applet repaint(); try { // Stop thread for the speed Thread.sleep (90); } catch (InterruptedException ex) { running = false; break; } } } //create an image off screen and loads it into the applet public void update (Graphics g) { // initialize buffer if (dbImage == null) { dbImage = createImage (this.getSize().width, this.getSize().height); dbg = dbImage.getGraphics (); } // clear screen in background dbg.setColor (getBackground ()); dbg.fillRect (0, 0, this.getSize().width, this.getSize().height); // draw elements in background dbg.setColor (getForeground()); paint (dbg); // draw image on the screen g.drawImage (dbImage, 0, 0, this); } public void paint (Graphics g) { //DRAWING THE BALL Graphics2D g2 = (Graphics2D) g; g.setColor (Color.red); g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius); //DRAWING THE SLIDER box.setLocation(sliderx_pos, slidery_pos); g2.setColor (Color.blue); g2.draw(box); //DRAWING THE BRICKS brick.setLocation(lx_pos, ly_pos); g2.setColor (Color.pink); g2.draw(brick); } protected void processKeyEvent(KeyEvent e) { int keyCode = e.getKeyCode(); //move if left key is pressed if (keyCode == KeyEvent.VK_LEFT) { if (sliderx_pos -10 > appletsize_left) sliderx_pos = sliderx_pos -20; } //move if right key is pressed else if (keyCode == KeyEvent.VK_RIGHT) { if (sliderx_pos + swidth +10 < appletsize_right) sliderx_pos = sliderx_pos +20; } } }

Last edited by adam405 : 03-19-2008 at 04:39 PM.
Reply With Quote