Hej, w mojej grze Ping Pong po przegranej przez gracza rundzie jego deska i piłka dziwnie się zachowują.
Filmik: http://www.dailymotion.com/video/k4lCGNZYe53XNF3c7jz po 18 sekundzie ukazane
Metoda odpowiedzialna za detekcję kolizji:

   Runnable r1 = new Runnable() {
        public void run() {
            try {
                while (true) {
                    board.pPaddle.setBounds(board.p.getX(), board.p.getY(), 10, 50);
                    board.aiPaddle.setBounds(board.a.getX(), board.a.getY(), 10, 50);
                    board.ball.setBounds(board.b.getX(), board.b.getY(), 10, 10);
                        if (getY() < 1) { //ceiling
                            y = 2;
                            speedY = 1.11 + local.nextDouble() + 0.11;
                        } else if (getY() > 261) { //floor
                            speedY = -speedY;
                        }
                        if (board.ball.intersects(board.pPaddle)) { //piłka uderza w gracza
                            direct = local.nextInt(3);
                            if (direct > 1) {
                                speedY = local.nextInt(3) + 0.11
                                        + local.nextDouble();
 
                            } else { 
                                speedY = -local.nextInt(3) + local.nextDouble();
 
                            }
                            speedY = local.nextInt(3) + 0.11;
                            speed = -speed;
//w kilku powyższych linijkach jest błąd, ale gdzie?
                        } else if (board.ball.intersects(board.aiPaddle)) { //piłka w kompjuter
                            direct = local.nextInt(3);
                            if (direct > 1) {
                                speedY = local.nextInt(3) + 0.11
                                        + local.nextDouble();
 
                            } else {
                                speedY = -local.nextInt(3) + local.nextDouble();
 
                            }
                            speed = -speed;
                            speedY = -speedY;
                        }
                        x += speed;
                        y += speedY;
                        board.repaint();
                        Thread.sleep(10L);
                        board.checkWin();
            } 
            }catch(InterruptedException e){
 
            }
        }
    };
}

I tutaj print() z tego co się dzieje z prędkościami piłki, gdy utyka w desce:

java.awt.Rectangle[x=4,y=190,width=10,height=50] X4 Y190 speedY 0.11 speedX 1.5
java.awt.Rectangle[x=4,y=190,width=10,height=50] X4 Y190 speedY -0.89 speedX -1.5
java.awt.Rectangle[x=4,y=190,width=10,height=50] X4 Y190 speedY -1.89 speedX 1.5
java.awt.Rectangle[x=4,y=190,width=10,height=50] X4 Y190 speedY -0.89 speedX -1.5

Jakieś pomysły? Mogę podrzucić cały kod programu.