Je ne peux pas te donner de programme en java, je ne le connais pas.
Tu cherches à faire rebondir un cercle sur le bord d'un rectangle. Tu as déjà créé des variables dx et dy qui, je suppose, représentent le déplacement du centre de ton cercle à chause étape du mouvement. Tout ce que j'ai essayé de te dire, c'est que quand tu détectes que tu arrives sur un bord, il faut que tu changes le signe de dx ou celui de dy, selon que tu heurtes n bord vertical ou horizontal.
Un des moyens, c'est de mémoriser le sens de déplacement dans une variable sensX qui va valeir 1 quand tu vas de droite à gauche et -1 quand tu vas de gauche à droite. Avec un dx positif, tu as juste à faire un mouvement de sensX * dx à chaque étape.
Quant au 50+(int)(Math.random() *50) , c'est juste pour éviter d'avoir un cercle qui ne bouge pas. Avec ta formule, tu pouvais avoir dx=0, et là, ton cercle ne se déplacerait que de haut en bas. Et avec beaucoup de malchance, il ne bougerait même pas du tout, si dy tombe aussi sur 0 !