import  math
import  randomimport  pygame
import  sys
class  Ball : def  __init__ ( self,  radius) : self. radius =  radiusself. pos =  [ screen_width //  2 ,  screen_height -  20  -  radius] self. velocity =  [ 2 ,  - 2 ] def  draw ( self,  surface) : pygame. draw. circle( surface,  WHITE,  self. pos,  self. radius) def  update ( self) : self. pos[ 0 ]  +=  self. velocity[ 0 ] self. pos[ 1 ]  +=  self. velocity[ 1 ] if  self. pos[ 0 ]  <  self. radius or  self. pos[ 0 ]  >  ( screen_width -  self. radius) : self. velocity[ 0 ]  *=  - 1 if  self. pos[ 1 ]  <=  self. radius or  self. pos[ 1 ]  >  ( screen_height -  self. radius) : self. velocity[ 1 ]  *=  - 1 
class  Paddle : def  __init__ ( self,  width,  height) : self. width =  widthself. height =  heightself. pos =  [ screen_width //  2  -  width //  2 ,  screen_height -  20 ] self. velocity =  [ - 5 ,  0 ] def  draw ( self,  surface) : pygame. draw. rect( surface,  WHITE,  ( self. pos[ 0 ] ,  self. pos[ 1 ] ,  self. width,  self. height) ,  0 ,  0 ) def  update ( self) : keys =  pygame. key. get_pressed( ) if  keys[ pygame. K_LEFT]  and  self. pos[ 0 ]  >  0 : self. pos[ 0 ]  +=  self. velocity[ 0 ] if  keys[ pygame. K_RIGHT]  and  self. pos[ 0 ]  <  screen_width -  self. width: self. pos[ 0 ]  -=  self. velocity[ 0 ] class  Brick : def  __init__ ( self,  x,  y,  width,  height,  color) : self. rect =  pygame. Rect( x,  y,  width,  height) self. color =  colordef  draw ( self,  surface) : pygame. draw. rect( surface,  self. color,  self. rect) def  check_collision ( ball,  brick) : if  ( brick. rect. x -  ball. radius <=  ball. pos[ 0 ]  <=  brick. rect. x +  brick. rect. width +  ball. radius)  and  ( brick. rect. y <=  ball. pos[ 1 ]  <=  brick. rect. y +  brick. rect. height) : return  1   if  ( brick. rect. y -  ball. radius <=  ball. pos[ 1 ]  <=  brick. rect. y +  brick. rect. height +  ball. radius)  and  ( brick. rect. x <=  ball. pos[ 0 ]  <=  brick. rect. x +  brick. rect. width) : return  2   return  0 def  update_bricks ( ball,  bricks) : score =  0 for  brick in  bricks[ : ] : if  check_collision( ball,  brick)  ==  1 : bricks. remove( brick) ball. velocity[ 0 ]  *=  - 1 score +=  10 break elif  check_collision( ball,  brick)  ==  2 : bricks. remove( brick) ball. velocity[ 1 ]  *=  - 1 score +=  10 break return  scoredef  create_explosion ( brick) : pass def  update_explosions ( explosions,  bricks) : for  explosion in  explosions[ : ] : if  explosion. is_finished( ) : explosions. remove( explosion) if  explosion. intersects( brick) : bricks. remove( brick) if  __name__ ==  '__main__' : pygame. init( ) screen_width,  screen_height =  640 ,  480 screen =  pygame. display. set_mode( ( screen_width,  screen_height) ) pygame. display. set_caption( 'Bounce Game' ) clock =  pygame. time. Clock( ) WHITE =  ( 255 ,  255 ,  255 ) BLACK =  ( 0 ,  0 ,  0 ) RED =  ( 255 ,  0 ,  0 ) ball =  Ball( 10 ) paddle =  Paddle( 80 ,  10 ) bricks =  [ ] for  x in  range ( 0 ,  screen_width,  80 ) :   for  y in  range ( 0 ,  screen_height //  4 ,  20 ) :   brick =  Brick( x +  2 ,  y +  2 ,  80  -  2 ,  20  -  2 ,  ( 255 ,  255 ,  255 ) )   bricks. append( brick) score =  0 running =  True while  running: for  event in  pygame. event. get( ) : if  event. type  ==  pygame. QUIT: running =  False ball. update( ) paddle. update( ) if  ball. pos[ 1 ]  +  ball. radius >  paddle. pos[ 1 ] : if  ball. pos[ 0 ]  <  paddle. pos[ 0 ]  or  ball. pos[ 0 ]  >  paddle. pos[ 0 ]  +  paddle. width: score -=  1 else : ss =  abs ( ball. pos[ 0 ]  -  ( paddle. pos[ 0 ] + paddle. width// 2 ) )  /  20 ball. velocity[ 0 ]  =  2 + ss* 2 ball. velocity[ 1 ]  *=  - 1 screen. fill( BLACK) ball. draw( screen) paddle. draw( screen) xx =  random. randint( 0 ,  255 ) for  brick in  bricks: brick. draw( screen) if  ball. pos[ 1 ]  <=  screen_height// 2 : score +=  update_bricks( ball,  bricks) font =  pygame. font. Font( None ,  36 ) score_text =  font. render( 'Score: '  +  str ( score) ,  True ,  RED) screen. blit( score_text,  ( 10 ,  10 ) ) pygame. display. flip( ) clock. tick( 60 ) pygame. quit( ) sys. exit( )