Java-Gaming.org    
Featured games (91)
games approved by the League of Dukes
Games in Showcase (580)
games submitted by our members
Games in WIP (499)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Help with Pong collision checks  (Read 1013 times)
0 Members and 1 Guest are viewing this topic.
Offline omgitsadam

Junior Newbie





« Posted 2007-05-24 17:50:26 »

Hello, i am trying to make a pong-like game for a project in my java class, and things have been going fine so far, except...  The collision checks are not working for the paddle located on the left... This is likely a problem with our collide check method, but... From looking at the method itself, it seems like it would work fine.

Here is the code so far, if anyone could offer a suggestion, that would be great
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
102  
103  
104  
105  
106  
107  
108  
109  
110  
111  
112  
113  
114  
115  
116  
117  
118  
119  
120  
121  
122  
123  
124  
125  
126  
127  
128  
129  
130  
131  
132  
133  
134  
135  
136  
137  
138  
139  
140  
141  
142  
143  
144  
145  
146  
147  
148  
149  
150  
151  
152  
153  
154  
155  
156  
157  
158  
159  
160  
161  
162  
163  
164  
165  
166  
167  
168  
169  
170  
171  
172  
173  
174  
175  
176  
177  
178  
179  
180  
181  
182  
183  
184  
185  
186  
187  
188  
189  
190  
191  
192  
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;

public class TestApplet extends Applet implements Runnable
{    
    //Paddle dimensions
   int PaddleHeight = 50;
    int PaddleWidth = 10;
   
    //Other variables
   boolean isStop = true;
    int[] theKeys = new int[256]; //Array with one element representing each key
   Random Rand = new Random();
    int bounces = 0;
    boolean isAI2 = false;
    boolean isAI1 = false;
    ArrayList <Ball> TheBalls  = new ArrayList <Ball>();
    ArrayList <Paddle> ThePaddles = new ArrayList <Paddle>();
   
    //Player scores
   int Score1 = 0;
    int Score2 = 0;
   
    private Image dblimage;
    private Graphics dbg;
   
    public void init()
    {
        //Set Background color to black
       setBackground(Color.black);
    }
   
    public void start()
    {
        //Define new thread
       Thread th = new Thread(this);
        //Start the new thread
       th.start();
        for(int z=0; z<256; z++)
            theKeys[z] = 0; //Set all keys to default position (released)
       enableEvents(AWTEvent.KEY_EVENT_MASK);
        ThePaddles.add(new Paddle(true, PaddleHeight, PaddleWidth, 10, this.getWidth(), this.getHeight(), 'w', 's'));
        ThePaddles.add(new Paddle(false, PaddleHeight, PaddleWidth, 10, this.getWidth(), this.getHeight(), '8', '5'));
        TheBalls.add(new Ball(this.getHeight(), this.getWidth()));
        TheBalls.get(0).AddPaddle(ThePaddles.get(0));
        TheBalls.get(0).AddPaddle(ThePaddles.get(1));
       
    }

    public void run ()
    {
        //Minimize thread priority
       Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

        while (true)
        {            
            for(int i=0; i<ThePaddles.size(); i++)
            {
                if(isKeyPress(87))
                {
                    ThePaddles.get(i).Move(1);
                }
                else if(isKeyPress(83))
                {
                    ThePaddles.get(i).Move(-1);
                }
            }  
            if(isKeyPress(32))
            {
                for(int x=0; x < TheBalls.size(); x++)
                    TheBalls.get(x).Start();
                isStop = false;
                bounces = 0;
            }
           
            for(int i=0; i<TheBalls.size(); i++)
            {
                TheBalls.get(i).Move();
               
                String scored = TheBalls.get(i).IsScore();
                if(scored == "Player 1")
                {
                     Score1++;
                     break;
                }
                else if(scored == "Player 2")
                {
                    Score2++;
                    break;
                }
            }
            repaint();      
            try
            {
                Thread.sleep (20);
            }
            catch (InterruptedException ex)
            {
                // do nothing
           }
           

            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
        }
    }
    public void paint(Graphics g)
    {
        //set color
       g.setColor(Color.green);
       
        for(Ball temp : TheBalls)
        {
            int[] tempfo = temp.BallInfo();
            g.fillOval(tempfo[0], tempfo[1], tempfo[2], tempfo[3]);
        }
       
       
        for(Paddle temp: ThePaddles)
        {
            int[] PadTemp = temp.PaddleData();
            g.fillRect(PadTemp[0], PadTemp[1], PadTemp[2], PadTemp[3]);
         
        }
        //paint player 1 score
       g.drawString("Player 1 score: "+Score1, 10, 50);
       
        //paint player 2 score
       g.drawString("Player 2 score: "+Score2, 400, 50);
       
        //paint current bounce count
       g.drawString("Bounces: "+bounces, 250, 50);
       
        g.drawString(""+ThePaddles.get(0).GetUp(), 100, 100);
        g.drawString(""+ThePaddles.get(0).GetDown(), 100, 400);
        g.drawString(""+ThePaddles.get(1).GetUp(), 200, 100);
        g.drawString(""+ThePaddles.get(1).GetDown(), 200, 400);
        g.drawString(""+TheBalls.get(0).Collide(), 250, 250);
        g.drawLine(ThePaddles.get(0).getX(), ThePaddles.get(0).GetTop(), ThePaddles.get(0).getX()-500, ThePaddles.get(0).GetTop());
       

    }
   
    public void update (Graphics g)
    {

      // initialize buffer
     if (dblimage == null)
      {
            dblimage = createImage (this.getSize().width, this.getSize().height);
            dbg = dblimage.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 (dblimage, 0, 0, this);
    }
 
    public void processKeyEvent(KeyEvent ev)
    {
        int keycode = (ev.getKeyCode()&0xff);
        if (ev.getID() == KeyEvent.KEY_PRESSED)
        {
            theKeys[keycode] = 1; //1 Represents key is pressed
       }
        else if (ev.getID() == KeyEvent.KEY_RELEASED)
        {
            theKeys[keycode] = 0; //0 Represents key is not pressed
       }
        repaint();
    }
   
    //Checks if a given key is pressed
   public boolean isKeyPress(int theKey)
    {
        return (theKeys[theKey] != 0);
    }
   
    //Checks if a given key is released
   public boolean isKeyRel(int theKey)
    {
        return(theKeys[theKey] == 0);
    }
 }
Offline omgitsadam

Junior Newbie





« Reply #1 - Posted 2007-05-24 17:51:24 »

Sorry for the double post, but not enough room for all of the code
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
102  
103  
104  
105  
106  
107  
108  
109  
110  
111  
112  
113  
114  
115  
116  
117  
118  
119  
120  
121  
122  
123  
124  
125  
126  
127  
128  
129  
130  
131  
132  
133  
134  
135  
136  
137  
138  
139  
140  
141  
142  
143  
144  
145  
146  
147  
148  
149  
150  
151  
152  
153  
154  
155  
156  
157  
158  
159  
160  
161  
162  
163  
164  
165  
166  
167  
168  
169  
170  
171  
172  
173  
174  
175  
176  
177  
178  
179  
180  
181  
182  
183  
184  
185  
186  
187  
188  
189  
190  
191  
192  
193  
194  
195  
196  
197  
198  
199  
200  
201  
202  
203  
204  
205  
206  
207  
208  
209  
210  
211  
212  
213  
214  
215  
216  
217  
218  
219  
220  
221  
222  
223  
224  
225  
226  
227  
228  
229  
230  
231  
232  
233  
234  
235  
236  
237  
238  
239  
240  
241  
242  
243  
244  
245  
246  
247  
248  
249  
250  
251  
252  
253  
254  
255  
256  
257  
258  
259  
260  
261  
262  
263  
264  
265  
266  
267  
268  
269  
270  
271  
272  
273  
274  
275  
276  
277  
278  
279  
280  
281  
282  
283  
284  
285  
286  
287  
288  
289  
290  
291  
292  
293  
294  
295  
296  
297  
298  
299  
class Paddle
{
     
     private int
        XPos,
        YPos,
        Width,
        Height,
        Speed,
        AppletHeight,
        AppletWidth,
        Down,
        Up;
      boolean
        LeftSide;
       
     public Paddle(boolean LeftSide, int Height, int Width, int Speed, int AppletWidth, int AppletHeight, char Up, char Down)
     {
         this.AppletHeight = AppletHeight;
         this.AppletWidth = AppletWidth;
         YPos = AppletHeight/2;
         this.Height = Height;
         this.Width = Width;
         this.Speed = Speed;
         this.LeftSide = LeftSide;
         if(LeftSide)
            this.XPos = 25;
         else
            this.XPos = AppletWidth-25;        
         Character UpChar = new Character(Up);
         Character DownChar = new Character(Down);
         this.Up = UpChar.charValue();
         this.Down = DownChar.charValue();
     }
     
    public void Move(int x)
    {
        if(x > 0)
        {
            YPos -= Speed;
        }
        else
           YPos += Speed;
    }
   
    public boolean IsLeft()
    {
        return LeftSide;
    }
       
   
    public int GetTop()
    {
        return YPos - Height/2;
    }
   
    public int GetBottom()
    {
        return YPos + Height/2;
    }
   
    public int GetUp()
    {
        return Up;
    }
   
    public int GetDown()
    {
        return Down;
    }
   
    public int getX()
    {
        return XPos;
    }
   
    public int getY()
    {
        return YPos;
    }
   
    public int GetHeight()
    {
        return Height;
    }
   
    public int GetWidth()
    {
        return Width;
    }
     
    public int[] PaddleData()
    {
        if(LeftSide)
            return new int[]{XPos, YPos-Height/2, Width, Height};
        return new int[]{XPos, YPos-Height/2, Width, Height};
    }
}


class Ball
{
    private int
        XPos,
        XSpeed,
        YPos,
        YSpeed,
        Radius,
        MaxSpeed,
        Height,
        Width;
       
    private boolean
        IsStill;
       
    private ArrayList <Paddle>
        ThePaddles=new ArrayList <Paddle>();
     
    private Random Rand=new Random();
     
    public Ball(int Width, int Height)
    {
         this.ThePaddles=ThePaddles;
         this.Height=Height;
         this.Width=Width;
         XPos=Width/2;
         YPos=Height/2;
         IsStill=true;
         MaxSpeed=9;
         Radius=10;
         ChangeAngle();
    }  
   
    public void AddPaddle(Paddle temp)
    {
       ThePaddles.add(temp);
    }
   
    public int[] BallInfo()
    {
        return new int[]{XPos-Radius, YPos-Radius, 2*Radius, 2*Radius};        
    }
   
    public void Start()
    {
        IsStill = false;
    }
   
    public int getX()
    {
        return XPos;
    }
   
    public int getY()
    {
        return YPos;
    }
   
    public int getRad()
    {
        return Radius;
    }
   
    public void RevX()
    {
        XSpeed *= -1;
    }
   
    public int getXSp()
    {
        return XSpeed;
    }
   
    public int getYSp()
    {
        return YSpeed;
    }
   
   
    public boolean isNeg()
    {
        if(XSpeed < 0)
            return true;
        return false;
    }
             
    //Generates a random trajectory for the ball
   public void ChangeAngle()
    {
        int Num, Opp;
       
        Num= Rand.nextInt(MaxSpeed)+1;
        Opp = MaxSpeed-Num;
       
        XSpeed = ((XSpeed>0)?1:-1)*Num;
        YSpeed = ((Rand.nextInt(2)==0)?1:-1)*Opp;    
    }
   
/*    public boolean Collide()
    {    
        boolean collid=false;
        for(Paddle i: ThePaddles)
        {            
            if(YPos >= i.GetTop() && YPos <= i.GetBottom())
            {
                if(i.LeftSide)
                    collid = (((XPos - Radius) <= (i.getX() + i.GetWidth())));
                if(!collid)
                    collid = (((XPos + Radius) >= (i.getX() - i.GetWidth())));                        
            }
        }
        if(!collid)
            collid = ((YPos<=0 && YSpeed < 0) || (YPos>=Height && YSpeed > 0));
        return collid;
    }
  */

   

    public boolean Collide()
    {    
        boolean collid=false;
        Paddle i = ThePaddles.get(0);
        if(YPos >= i.GetTop() && YPos <= i.GetBottom())
        {
            //if(i.getX() < Width/2)
               collid = (((XPos - Radius) <= (i.getX() + i.GetWidth())));
            //else if(i.getX() > Width/2)
             //  collid = (((XPos + Radius) >= (i.getX())));
       }
        i = ThePaddles.get(1);
        if(YPos >= i.GetTop() && YPos <= i.GetBottom())
        {
           // if(i.getX() < Width/2)
            //   collid = (((XPos - Radius) <= (i.getX() + i.GetWidth())));
           //else if(i.getX() > Width/2)
               collid = (((XPos + Radius) >= (i.getX())));
        }
        if(!collid)
            collid = ((YPos<=0 && YSpeed < 0) || (YPos>=Height && YSpeed > 0));
        return collid;
    }


    public String IsScore()
    {
        Random rand = new Random();
       
        if(XPos >= Width)
        {
            XPos = Width/2;
            YPos = Height/2;
            if(Rand.nextInt(2) == 1)
                RevX();
            ChangeAngle();
            IsStill = true;
            return "Player 1";
        }
        if(XPos <= 0)
        {
            XPos = Width/2;
            YPos = Height/2;
            if(Rand.nextInt(2) == 1)
                RevX();
            ChangeAngle();
            IsStill = true;
            return "Player 2";
        }
        return "";
    }
   
    public void Move()
    {
        boolean temp = false;
       
        for(int i=0; i<=Math.abs(XSpeed); i++)
        {
            if((Collide()) && !temp)
            {
                RevX();
                ChangeAngle();
                temp = true;
                XPos = ((XSpeed>0)?XPos+5:XPos-5);
                break;
            }
            XPos = ((XSpeed>0)?XPos+1:XPos-1);
        }
        temp = false;
        for(int i=0; i<=Math.abs(YSpeed); i++)
        {
            if((Collide()) && !temp)
            {
                YSpeed *= -1;
                temp = true;
                break;
            }
            YPos = ((YSpeed>0)?YPos+1:YPos-1);
        }
    }
}  
Offline Kova

Senior Member





« Reply #2 - Posted 2007-05-24 18:19:06 »

delete the second post, edit the first and clear it, put only collision method and explain variable names
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline JAW

Junior Member





« Reply #3 - Posted 2007-05-25 14:15:43 »

You dont expect anyone to read and understand all this to point out the line where the problem is?

Find the problem, for example to some output and pin down the lines or function where it fails.
Then post just this. Please.

-JAW
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

xsi3rr4x (45 views)
2014-04-15 18:08:23

BurntPizza (41 views)
2014-04-15 03:46:01

UprightPath (57 views)
2014-04-14 17:39:50

UprightPath (39 views)
2014-04-14 17:35:47

Porlus (55 views)
2014-04-14 15:48:38

tom_mai78101 (78 views)
2014-04-10 04:04:31

BurntPizza (137 views)
2014-04-08 23:06:04

tom_mai78101 (237 views)
2014-04-05 13:34:39

trollwarrior1 (198 views)
2014-04-04 12:06:45

CJLetsGame (206 views)
2014-04-01 02:16:10
List of Learning Resources
by SHC
2014-04-18 03:17:39

List of Learning Resources
by Longarmx
2014-04-08 03:14:44

Good Examples
by matheus23
2014-04-05 13:51:37

Good Examples
by Grunnt
2014-04-03 15:48:46

Good Examples
by Grunnt
2014-04-03 15:48:37

Good Examples
by matheus23
2014-04-01 18:40:51

Good Examples
by matheus23
2014-04-01 18:40:34

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:22:30
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!