Advertisement
Guest User

Untitled

a guest
Mar 27th, 2011
617
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 58.04 KB | None | 0 0
  1. # Matthew N. Brown copyright 2007
  2.  
  3. # Here is an example program in wich
  4. # balls hit walls and other balls:
  5. #
  6. # This program draws circles using:   pygame.draw.circle
  7. #
  8. # You can copy this program on to
  9. # your own computer and run it.
  10. #
  11.  
  12. import os, sys
  13.  
  14.  ## INIT STUFF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  15. #########################################################################################
  16. def HE_HE_init():
  17.     global screen, big_black_rect, APPLICATION_w_size, APPLICATION_z_size
  18.     global WOW_pi_divided_by_180, WOW_180_divided_by_pi
  19.     pygame.init()
  20.     random.seed()
  21.     APPLICATION_w_size = 700
  22.     APPLICATION_z_size = 500
  23.     ##### To close window while in fullscreen, press Esc while holding shift. #######
  24.     screen = pygame.display.set_mode((APPLICATION_w_size, APPLICATION_z_size))
  25.     #screen = pygame.display.set_mode((APPLICATION_w_size, APPLICATION_z_size), FULLSCREEN)
  26.     pygame.display.set_caption("They bwounce off bwalls? Matthew N. Brown copyright 2007")
  27.     pygame.mouse.set_visible(1)
  28.     big_black_rect = pygame.Surface(screen.get_size())
  29.     big_black_rect = big_black_rect.convert()
  30.     big_black_rect.fill((0, 0, 0))
  31.     screen.blit(big_black_rect, (0, 0))
  32.     #fonty = pygame.font.Font(None, 36)
  33.     fonty = pygame.font.SysFont("Times New Roman", 25)
  34.     fonty.set_bold(0)
  35.     IMAGEE = fonty.render('Loading . . .', 1, (0, 250, 10))
  36.     screen.blit(IMAGEE, (100, 200)); del IMAGEE
  37.     pygame.display.flip()
  38.     pygame.mixer.init(22050, -16, True, 1024)
  39.     WOW_pi_divided_by_180 = math.pi / 180.0
  40.     WOW_180_divided_by_pi = 180.0 / math.pi
  41.     set_up_key_variables()
  42.     Lets_ROLL()
  43.  ## INIT STUFF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  44. #########################################################################################
  45.  
  46.  ## SAVE LEVEL?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  47. #########################################################################################
  48. def write_to_file_WEEE_STRANGE(file_namey, data):
  49.     noq = '\n'
  50.     filey = open(file_namey, 'w')
  51.     for d in data:
  52.      filey.write(   str(d) + noq)
  53.  ## SAVE LEVEL?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  54. #########################################################################################
  55.  
  56.  ## SMALL FUNCTIONS STUFF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  57. #########################################################################################
  58.      ### some functions: ###
  59. def distance_2D (w1, z1, w2, z2):
  60.     return math.sqrt(math.pow(float(w1) - float(w2), 2) + math.pow(float(z1) - float(z2), 2))
  61. def rect_touching_rect(w1, z1, wol1, zol1, w2, z2, wol2, zol2):
  62.     w2 -= w1
  63.     z2 -= z1
  64.     ww1 = -wol2
  65.     zz1 = -zol2
  66.     return (w2 > ww1 and w2 < wol1 and z2 > zz1 and z2 < zol1)
  67. def rect_touching_rect2(w1, z1, wol1, zol1, w2, z2, wol2, zol2):
  68.     w2 -= w1
  69.     z2 -= z1
  70.     ww1 = -wol2
  71.     zz1 = -zol2
  72.     return (w2 >= ww1 and w2 <= wol1 and z2 >= zz1 and z2 <= zol1)
  73. def positive(n):
  74.     if n < 0: n = -n; return n
  75. def int_randy(range, add):
  76.     return int((random.random() * range) + add)
  77. def randy(range, add):
  78.     return (random.random() * range) + add
  79. def freaky_rect_switcharoo_2D(pw, pz, pwol, pzol, buffy_the_fat):
  80.     buffy_the_fat2 = buffy_the_fat * 2
  81.     if pwol > 0:
  82.      gw = pw; gwol = pwol
  83.     else:
  84.      gw = pwol + pw; gwol = pw - gw
  85.     if pzol > 0:
  86.      gz = pz; gzol = pzol
  87.     else:
  88.      gz = pzol + pz; gzol = pz - gz
  89.     return [gw - buffy_the_fat, gz - buffy_the_fat, gwol + buffy_the_fat2, gzol + buffy_the_fat2]
  90. def points_rotated_by_angle_2D(points_wz, axis_w, axis_z, angle):
  91.     rotated_points_wz = []
  92.     angle = -angle -90
  93.     angle_times_WOW_pi_divided_by_180 = angle * WOW_pi_divided_by_180
  94.     c1 = math.cos(angle_times_WOW_pi_divided_by_180)
  95.     s1 = math.sin(angle_times_WOW_pi_divided_by_180)
  96.     for pointy in points_wz:
  97.      xt = pointy[0] - axis_w
  98.      yt = pointy[1] - axis_z
  99.      rotated_points_wz += [(-xt * s1) + (yt * c1) + axis_w, (-xt * c1) - (yt * s1) + axis_z]
  100.     return rotated_points_wz
  101. def point_rotated_by_angle_2D(point_w, point_z, axis_w, axis_z, angle):
  102.     angle = -angle -90
  103.     angle_times_WOW_pi_divided_by_180 = angle * WOW_pi_divided_by_180
  104.     c1 = math.cos(angle_times_WOW_pi_divided_by_180)
  105.     s1 = math.sin(angle_times_WOW_pi_divided_by_180)
  106.     xt = point_w - axis_w
  107.     yt = point_z - axis_z
  108.     return (-xt * s1) + (yt * c1) + axis_w, (-xt * c1) - (yt * s1) + axis_z
  109. def arc_tangent_2D(point_w, point_z):
  110.     return math.atan2(point_w, point_z) * WOW_180_divided_by_pi + 180
  111. def arc_tangent_2D_2(point_w, point_z):
  112.     return -math.atan2(point_w, point_z) * WOW_180_divided_by_pi + 180
  113. def ball_to_ball_wzkol_bounce(V1, m1, V2, m2, ball1_is_to_the_left):
  114.     if (ball1_is_to_the_left and V1 >= V2) or (not ball1_is_to_the_left and V1 <= V2):
  115.      Rv1 = V1 - V2
  116.      Rv2 = 0 #V2 - V2
  117.      NewV1 = ((m1 - m2) / float(m1 + m2)) * float(Rv1) + V2
  118.      NewV2 = (( 2 * m1) / float(m1 + m2)) * float(Rv1) + V2
  119.      return NewV1, NewV2
  120.     else:
  121.      return V1, V2
  122. def Find_where_ball_stops_on_line_w(ball_w, ball_z, ball_wol, ball_zol, ball_rad, line_w, line_rad):
  123.     did_collide = False
  124.     totally = ball_rad + line_rad
  125.     b1 = line_w + totally
  126.     b2 = line_w - totally
  127.     New_ball_w = ball_w + ball_wol
  128.     New_ball_z = ball_z + ball_zol
  129.     if   ball_w >= b1 and ball_wol < 0 and New_ball_w < b1: New_ball_w = b1; did_collide = True
  130.     elif ball_w <= b2 and ball_wol > 0 and New_ball_w > b2: New_ball_w = b2; did_collide = True
  131.     else:
  132.      if ball_w > b2 and ball_w < b1:
  133.       if   ball_w > line_w and ball_wol < 0:
  134.        New_ball_w = ball_w; New_ball_z = ball_z
  135.        did_collide = True
  136.       elif ball_w < line_w and ball_wol > 0:
  137.        New_ball_w = ball_w; New_ball_z = ball_z
  138.        did_collide = True
  139.      return New_ball_w, New_ball_z, did_collide
  140.     New_ball_z = (float(ball_zol) / float(ball_wol) * float(New_ball_w - ball_w)) + float(ball_z)
  141.     return New_ball_w, New_ball_z, did_collide
  142. def find_where_ball_collides_on_a_wall(
  143.                                        ball_w, ball_z,
  144.                                        ball_wol, ball_zol,
  145.                                        ball_rad,
  146.                                        wall_type,
  147.                                        wall_w1, wall_z1,
  148.                                        wall_w2, wall_z2,
  149.                                        wall_rad):
  150.     toetoadly = ball_rad + wall_rad
  151.     did_collide = False
  152.     New_ball_w = ball_w + ball_wol
  153.     New_ball_z = ball_z + ball_zol
  154.     angle_hit_at = None
  155.     Relate_ball_w = ball_w - wall_w1
  156.     Relate_ball_z = ball_z - wall_z1
  157.     Relate_wall_w2 = wall_w2 - wall_w1
  158.     Relate_wall_z2 = wall_z2 - wall_z1
  159.     arc_tangeriney = arc_tangent_2D(Relate_wall_w2, Relate_wall_z2)
  160.     Rotate_Relate_ball_w, Rotate_Relate_ball_z, Rotate_Relate_wall_w2, Rotate_Relate_wall_z2 = points_rotated_by_angle_2D(((Relate_ball_w, Relate_ball_z), (Relate_wall_w2, Relate_wall_z2)), 0, 0, arc_tangeriney)
  161.     Rotate_ball_wol, Rotate_ball_zol = point_rotated_by_angle_2D(ball_wol, ball_zol, 0, 0, arc_tangeriney)
  162.     Rotate_Relate_ball_collide_w, Rotate_Relate_ball_collide_z, did_hit_weird_line = Find_where_ball_stops_on_line_w(Rotate_Relate_ball_w, Rotate_Relate_ball_z, Rotate_ball_wol, Rotate_ball_zol, ball_rad, 0, wall_rad)
  163.     if Rotate_Relate_ball_w > -toetoadly and Rotate_Relate_ball_w < toetoadly:
  164.      HE_HE_strange_popper_z = Rotate_Relate_ball_z
  165.     else:
  166.      HE_HE_strange_popper_z = Rotate_Relate_ball_collide_z
  167.     Rotate_angle_hit_at = None
  168.     if   HE_HE_strange_popper_z < Rotate_Relate_wall_z2:
  169.        if ball_is_going_towards_point(Rotate_Relate_ball_w, Rotate_Relate_ball_z, Rotate_ball_wol, Rotate_ball_zol, 0, Rotate_Relate_wall_z2):
  170.         p1_touched, p1_collide_w, p1_collide_z, p1_angle_hit_at = find_where_ball_collides_on_another_ball(Rotate_Relate_ball_w, Rotate_Relate_ball_z, Rotate_ball_wol, Rotate_ball_zol, ball_rad, 0, Rotate_Relate_wall_z2, wall_rad)
  171.         if p1_touched:
  172.          Rotate_Relate_ball_collide_w = p1_collide_w
  173.          Rotate_Relate_ball_collide_z = p1_collide_z
  174.          Rotate_angle_hit_at = p1_angle_hit_at
  175.          did_collide = True
  176.     elif HE_HE_strange_popper_z > 0:
  177.        if ball_is_going_towards_point(Rotate_Relate_ball_w, Rotate_Relate_ball_z, Rotate_ball_wol, Rotate_ball_zol, 0, 0):
  178.         p2_touched, p2_collide_w, p2_collide_z, p2_angle_hit_at = find_where_ball_collides_on_another_ball(Rotate_Relate_ball_w, Rotate_Relate_ball_z, Rotate_ball_wol, Rotate_ball_zol, ball_rad, 0, 0, wall_rad)
  179.         if p2_touched:
  180.          Rotate_Relate_ball_collide_w = p2_collide_w
  181.          Rotate_Relate_ball_collide_z = p2_collide_z
  182.          Rotate_angle_hit_at = p2_angle_hit_at
  183.          did_collide = True
  184.     else:
  185.        if did_hit_weird_line:
  186.         did_collide = True
  187.         if Rotate_Relate_ball_collide_w < 0: Rotate_angle_hit_at = 90
  188.         else: Rotate_angle_hit_at = 270
  189.     if did_collide:
  190.      arc_tangeriney_2 = -arc_tangeriney
  191.      angle_hit_at = Rotate_angle_hit_at + arc_tangeriney
  192.      New_ball_w, New_ball_z = point_rotated_by_angle_2D(Rotate_Relate_ball_collide_w, Rotate_Relate_ball_collide_z, 0, 0, arc_tangeriney_2)
  193.      New_ball_w += wall_w1
  194.      New_ball_z += wall_z1
  195.     return did_collide, New_ball_w, New_ball_z, angle_hit_at  #, is_moving_towards
  196. def zol_at_angle(wol, zol, angle):
  197.     rotated_wol, rotated_zol = point_rotated_by_angle_2D(wol, zol, 0, 0, angle)
  198.     return rotated_zol
  199. def wzol_bounce_at_angle(wol, zol, angle, multi):
  200.     rotated_wol, rotated_zol = point_rotated_by_angle_2D(wol, zol, 0, 0, angle)
  201.     if rotated_zol > 0: rotated_zol = -rotated_zol * multi
  202.     return point_rotated_by_angle_2D(rotated_wol, rotated_zol, 0, 0, -angle)
  203. def ball_is_going_towards_point(ball_w, ball_z, ball_wol, ball_zol, point_w, point_z):
  204.     angley = arc_tangent_2D(ball_w - point_w, ball_z - point_z)
  205.     rotated_wol, rotated_zol = point_rotated_by_angle_2D(ball_wol, ball_zol, 0, 0, angley)
  206.     return rotated_zol > 0
  207. def find_where_ball_collides_on_another_ball (
  208.                                                ball1_w, ball1_z,
  209.                                                ball1_wol, ball1_zol,
  210.                                                ball1_rad,
  211.                                                ball2_w, ball2_z,
  212.                                                ball2_rad
  213.                                              ):
  214.     totally = ball1_rad + ball2_rad
  215.     dis_from_each_other = math.sqrt(math.pow(float(ball1_w) - float(ball2_w), 2) + math.pow(float(ball1_z) - float(ball2_z), 2))
  216.     if dis_from_each_other < totally:
  217.      angley = arc_tangent_2D(ball1_w - ball2_w, ball1_z - ball2_z)
  218.      return True, ball1_w, ball1_z, angley
  219.     else:
  220.         they_did_touch = False
  221.         New_ball1_w = ball1_w + ball1_wol
  222.         New_ball1_z = ball1_z + ball1_zol
  223.         angle_hit_at = None
  224.         Relate_ball1_w = ball1_w - ball2_w
  225.         Relate_ball1_z = ball1_z - ball2_z
  226.         Relate_ball2_w = 0
  227.         Relate_ball2_z = 0
  228.         arcy_tangeriney = arc_tangent_2D(ball1_wol, ball1_zol)
  229.         Rotated_Relate_ball1_w, Rotated_Relate_ball1_z, Rotated_ball1_wol, Rotated_ball1_zol = points_rotated_by_angle_2D(((Relate_ball1_w, Relate_ball1_z), (ball1_wol, ball1_zol)), 0, 0, arcy_tangeriney)
  230.         did_collidey = False
  231.         if Rotated_Relate_ball1_z > 0 and (Rotated_Relate_ball1_w > -totally and Rotated_Relate_ball1_w < totally):
  232.          Rotated_Relate_ball1_collide_w = Rotated_Relate_ball1_w # + Rotated_ball1_wol
  233.          HE_HE = math.pow(Rotated_Relate_ball1_w, 2) - math.pow(totally, 2)
  234.          if HE_HE < 0: HE_HE = -HE_HE
  235.          Rotated_Relate_ball1_collide_z = math.sqrt(HE_HE)
  236.          Rotated_Relate_ball1_z__PLUS__Rotated_ball1_zol = Rotated_Relate_ball1_z + Rotated_ball1_zol
  237.          if Rotated_Relate_ball1_collide_z < Rotated_Relate_ball1_z__PLUS__Rotated_ball1_zol:
  238.           collision_wol = Rotated_ball1_wol
  239.           collision_zol = Rotated_ball1_zol
  240.           Rotated_Relate_ball1_collide_z = Rotated_Relate_ball1_z__PLUS__Rotated_ball1_zol
  241.           angley_to_hit = None
  242.          else:
  243.           did_collidey = True
  244.           they_did_touch = True
  245.           angley_to_hit = arc_tangent_2D(Rotated_Relate_ball1_collide_w, Rotated_Relate_ball1_collide_z)
  246.         else:
  247.          angley_to_hit = None
  248.          collision_wol = Rotated_ball1_wol
  249.          collision_zol = Rotated_ball1_zol
  250.          Rotated_Relate_ball1_collide_w = Rotated_Relate_ball1_w + Rotated_ball1_wol
  251.          Rotated_Relate_ball1_collide_z = Rotated_Relate_ball1_z + Rotated_ball1_zol
  252.         if did_collidey:
  253.          arcy_tangeriney_2 = -arcy_tangeriney
  254.          angle_hit_at = angley_to_hit + arcy_tangeriney
  255.          New_ball1_w, New_ball1_z = point_rotated_by_angle_2D(Rotated_Relate_ball1_collide_w, Rotated_Relate_ball1_collide_z, 0, 0, arcy_tangeriney_2)
  256.          New_ball1_w += ball2_w
  257.          New_ball1_z += ball2_z
  258.     return they_did_touch, New_ball1_w, New_ball1_z, angle_hit_at  #, New_ball1_wol, New_ball1_zol
  259.      ### some functions: ###
  260.  
  261.  ## GRAPHICS STUFF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  262. #########################################################################################
  263. def chilly_font(size):
  264.     fonti = pygame.font.SysFont("Times New Roman", size)
  265.     return fonti
  266. def chilly_font_Italicy(size):
  267.     fonti = pygame.font.SysFont("Times New Roman", size)
  268.     fonti.set_italic(1)
  269.     return fonti
  270. def draw_loading_messagey(stringy): # Draw loading message
  271.     pygame.mouse.set_visible(1)
  272.     fonty = chilly_font(26)
  273.     IMAGEE = fonty.render(stringy, 0, (0, 255, 0), (0, 0, 0))
  274.     screen.blit(IMAGEE, (200, 250))
  275.     del IMAGEE
  276.     pygame.display.flip()
  277.            ## GRAPHICS STUFF: ##
  278. #########################################################################################
  279.  
  280.  ## KEYS AND MOUSE STUFF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  281. #########################################################################################
  282. def set_up_key_variables():
  283.      global ky_held, ky_first_held, ky_time_last_pressed
  284.      global mowse_w, mowse_z, mowse_inn
  285.      global mowse_left_pressed, mowse_right_pressed, mowse_left_held, mowse_right_held
  286.      mowse_left_held = False
  287.      mowse_right_held = False
  288.      mowse_left_pressed = False
  289.      mowse_right_pressed = False
  290.      mowse_w = 0
  291.      mowse_z = 0
  292.      mowse_inn = 0
  293.      ky_held = []
  294.      ky_first_held = []
  295.      ky_time_last_pressed = []
  296.      m = -1
  297.      while m < 500:
  298.       m += 1
  299.       ky_held              += [0]
  300.       ky_first_held        += [0]
  301.       ky_time_last_pressed += [0]
  302. def clear_all_kys():
  303.     global mowse_left_pressed, mowse_right_pressed, mowse_left_held, mowse_right_held
  304.     mowse_left_held = False
  305.     mowse_right_held = False
  306.     mowse_left_pressed = False
  307.     mowse_right_pressed = False
  308.     m = -1
  309.     while (m < 500):
  310.      m += 1; ky_held[m] = 0; ky_first_held[m] = 0; ky_time_last_pressed[m] = 0
  311. def clear_these_ky_first_held(list_keys_numbers):
  312.     for k in list_keys_numbers:
  313.      ky_first_held[k] = 0
  314. def clear_first_held_kys():
  315.     m = -1
  316.     while (m < 500):
  317.      m += 1; ky_first_held[m] = 0
  318. def old_style_ky(n):
  319.     return (ky_first_held_CEV(n) or (ky_held[n] and ky_time_last_pressed[n] < time.time() - .3))
  320. def ky_first_held_CEV(n):
  321.     if (ky_first_held[n]):
  322.      ky_first_held[n] = 0; return 1
  323.     else:
  324.      return 0
  325. def mowse_in_rect (w, z, wol, zol):
  326.     return (mowse_w >= w and mowse_z >= z and mowse_w <= w + wol and mowse_z <= z + zol)
  327. def mowse_in_circle (w, z, rad):
  328.     dia = rad * 2
  329.     if mowse_in_rect(w - rad, z - rad, w + dia, z + dia):
  330.      return (distance_2D(mowse_w, mowse_z, w, z) < rad)
  331.     else:
  332.      return 0
  333.     ## CHECK FOR: KEYBOARD, MOUSE, JOYSTICK, AND OTHERY INPUTY: ##
  334. def check_for_keys():
  335.         global mowse_w, mowse_z, mowse_inn, mowse_left_pressed, mowse_right_pressed, mowse_left_held, mowse_right_held, APPLICATION_w_size, APPLICATION_z_size
  336.         global loopy
  337.         global unicodey
  338.         mowse_left_pressed = False
  339.         mowse_right_pressed = False
  340.         unicodey = ''
  341.         for e in pygame.event.get():
  342.           if e.type == QUIT:
  343.             loopy = 0
  344.           elif e.type == ACTIVEEVENT:
  345.             mowse_inn = (e.gain and (e.state == 1 or e.state == 6))
  346.           elif e.type == KEYDOWN:
  347.             ky_held[e.key] = 1
  348.             ky_first_held[e.key] = 1
  349.             ky_time_last_pressed[e.key] = time.time()
  350.             unicodey = e.unicode
  351.           elif e.type == KEYUP:
  352.             ky_held[e.key] = 0
  353.           elif e.type == MOUSEMOTION:
  354.             mowse_w = e.pos[0]
  355.             mowse_z = e.pos[1]
  356.             if mowse_w >= 0 and mowse_w <= APPLICATION_w_size and mowse_z >= 0 and mowse_z <= APPLICATION_z_size:
  357.              mowse_inn = 1
  358.             else:
  359.              mowse_inn = 0
  360.           elif e.type == MOUSEBUTTONUP:
  361.             if e.button == 1: mowse_left_held = 0
  362.             if e.button == 3: mowse_right_held = 0
  363.           elif e.type == MOUSEBUTTONDOWN:
  364.             mowse_left_pressed  = (e.button == 1)
  365.             mowse_right_pressed = (e.button == 3)
  366.             mowse_left_held =  mowse_left_held or e.button == 1
  367.             mowse_right_held = mowse_right_held or e.button == 3
  368.           elif e.type == JOYAXISMOTION:
  369.             pass
  370.           elif e.type == JOYBALLMOTION:
  371.             pass
  372.           elif e.type == JOYHATMOTION:
  373.             pass
  374.           elif e.type == JOYBUTTONUP:
  375.             pass
  376.           elif e.type == JOYBUTTONDOWN:
  377.             pass
  378.           elif e.type == VIDEORESIZE:
  379.             print e
  380.             print "What happened!?"
  381.             #global big_black_rect, screen
  382.             #APPLICATION_w_size = e.size[0]
  383.             #APPLICATION_z_size = e.size[1]
  384.             #screen = pygame.display.set_mode((APPLICATION_w_size, APPLICATION_z_size))#, RESIZABLE)
  385.             #big_black_rect = pygame.Surface(screen.get_size())
  386.             #big_black_rect = big_black_rect.convert()
  387.             #big_black_rect.fill((0, 100, 200))
  388.           elif e.type == VIDEOEXPOSE:
  389.             pass
  390.           elif e.type == USEREVENT:
  391.             pass
  392.         if ky_held[27] and (ky_held[303] or ky_held[304]): loopy = 0
  393.     ## CHECK FOR: KEYBOARD, MOUSE, JOYSTICK, AND OTHERY INPUTY: ##
  394.  ## KEYS AND MOUSE STUFF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  395. #########################################################################################
  396.  
  397. #######################################################################################
  398. #######################################################################################
  399. #######################################################################################
  400. #######################################################################################
  401. #######################################################################################
  402.  
  403.  
  404.  ## MAIN LOOPY STUFF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  405. #########################################################################################
  406. def ball_is_going_towards_ball(Bn1, Bn2):
  407.     global ball_max, ball_w, ball_z, ball_wol, ball_zol, ball_rad, ball_color, ball_mass, ball_RECT
  408.     arc_tangerine = arc_tangent_2D(ball_w[Bn1] - ball_w[Bn2], ball_z[Bn1] - ball_z[Bn2])
  409.     woly1, zoly1 = point_rotated_by_angle_2D(ball_wol[Bn1], ball_zol[Bn1], 0, 0, arc_tangerine)
  410.     return zoly1 > 0
  411. def ball_is_relatively_going_towards_ball(Bn1, Bn2):
  412.     global ball_max, ball_w, ball_z, ball_wol, ball_zol, ball_rad, ball_color, ball_mass, ball_RECT
  413.     arc_tangerine = arc_tangent_2D(ball_w[Bn1] - ball_w[Bn2], ball_z[Bn1] - ball_z[Bn2])
  414.     woly1, zoly1, woly2, zoly2 = points_rotated_by_angle_2D(((ball_wol[Bn1], ball_zol[Bn1]), (ball_wol[Bn2], ball_zol[Bn2])), 0, 0, arc_tangerine)
  415.     return zoly1 > 0 and zoly1 > zoly2  # zoly2 < zoly1 or zoly2 > zoly1 # zoly1 + zoly2 > 0
  416.     #return zoly1 > 0 or zoly1 > zoly2
  417. def Make_two_balls_hit_at_angle(Bn1, Bn2, angle):
  418.     global bounce_friction
  419.     #print angle
  420.     global ball_max, ball_w, ball_z, ball_wol, ball_zol, ball_rad, ball_color, ball_mass, ball_RECT
  421.     woly1, zoly1, woly2, zoly2 = points_rotated_by_angle_2D(((ball_wol[Bn1], ball_zol[Bn1]), (ball_wol[Bn2], ball_zol[Bn2])), 0, 0, angle)
  422.     V1 = zoly1 * bounce_friction
  423.     V2 = zoly2 * bounce_friction
  424.     zoly1, zoly2 = ball_to_ball_wzkol_bounce(V1, ball_mass[Bn1], V2, ball_mass[Bn2], True)
  425.     ball_wol[Bn1], ball_zol[Bn1], ball_wol[Bn2], ball_zol[Bn2] = points_rotated_by_angle_2D(((woly1, zoly1), (woly2, zoly2)), 0, 0, -angle)
  426.     updatey_ball_quick_rect(Bn1)
  427.     updatey_ball_quick_rect(Bn2)
  428. def updatey_ball_quick_rect(B):
  429.     dia = ball_rad[B] * 2 + 4
  430.     ball_squar[B] = [ball_w[B] - ball_rad[B] - 2, ball_z[B] - ball_rad[B] - 2, dia, dia]
  431.     ball_RECT[B] = freaky_rect_switcharoo_2D(ball_w[B], ball_z[B], ball_wol[B], ball_zol[B], ball_rad[B] + 4)
  432. def minus_ball_thing(n):
  433.     global ball_max, ball_w, ball_z, ball_wol, ball_zol, ball_rad, ball_color, ball_angle, ball_angleol, ball_squar, ball_mass, ball_RECT
  434.     if ball_max >= 0:
  435.      del ball_w      [n]
  436.      del ball_z      [n]
  437.      del ball_wol    [n]
  438.      del ball_zol    [n]
  439.      del ball_rad    [n]
  440.      del ball_color  [n]
  441.      del ball_squar  [n]
  442.      del ball_angle  [n]
  443.      del ball_angleol[n]
  444.      del ball_mass   [n]
  445.      del ball_RECT   [n]
  446.      ball_max -= 1
  447. def add_ball_thing(w, z, wol, zol, rad, color, angle, angleol, mass_thing, rect_thing):
  448.     global ball_max, ball_w, ball_z, ball_wol, ball_zol, ball_rad, ball_color, ball_squar, ball_angle, ball_angleol, ball_mass, ball_RECT
  449.     ball_max += 1
  450.     ball_w       += [w]
  451.     ball_z       += [z]
  452.     ball_wol     += [wol]
  453.     ball_zol     += [zol]
  454.     ball_rad     += [rad]
  455.     ball_color   += [color]
  456.     ball_angle   += [angle]
  457.     ball_angleol += [angleol]
  458.     dia = rad * 2
  459.     ball_squar += [[w - rad, z - rad, dia, dia]]
  460.     if mass_thing == True:
  461.      ball_mass += [4 / 3 * math.pi * rad * rad * rad]
  462.     else:
  463.      ball_mass += [mass_thing]
  464.     if rect_thing == True:
  465.      ball_RECT += [None]
  466.      updatey_ball_quick_rect(ball_max)
  467.      #ball_RECT += [freaky_rect_switcharoo_2D(w, z, wol, zol, rad)]
  468.     else:
  469.      ball_RECT += [rect_thing]
  470. def minus_wall_thing(WAL):
  471.     global wall_max, wall_type, wall_w1, wall_z1, wall_w2, wall_z2, wall_rad, wall_color, wall_RECT
  472.     if wall_max >= 0:
  473.      del wall_type   [WAL]
  474.      del wall_w1     [WAL]
  475.      del wall_z1     [WAL]
  476.      del wall_w2     [WAL]
  477.      del wall_z2     [WAL]
  478.      del wall_rad    [WAL]
  479.      del wall_color  [WAL]
  480.      del wall_RECT   [WAL]
  481.      wall_max        -= 1
  482. def add_wall_thing(type, w1, z1, w2, z2, rad, color_thing, rect_thing):
  483.     global wall_max, wall_type, wall_w1, wall_z1, wall_w2, wall_z2, wall_rad, wall_color, wall_RECT
  484.     wall_max    += 1
  485.     wall_type   += [type]
  486.     wall_w1     += [w1]
  487.     wall_z1     += [z1]
  488.     wall_w2     += [w2]
  489.     wall_z2     += [z2]
  490.     wall_rad    += [rad]
  491.     if color_thing == True:
  492.      if   type == 1: color_thing = (220, 220, 220)
  493.      elif type == 2: color_thing = (240, 140, 130)
  494.      elif type == 3: color_thing = (100, 255, 100)
  495.      elif type == 4: color_thing = (255, 100, 100)
  496.      elif type == 5: color_thing = (100, 100, 255)
  497.     wall_color  += [color_thing]
  498.     if rect_thing == True:
  499.      wall_RECT   += [freaky_rect_switcharoo_2D(w1 - 2, z1 - 2, w2 - w1 + 4, z2 - z1 + 4, rad)]
  500.     else:
  501.      wall_RECT   += [rect_thing]
  502. def reset_stuff():
  503.     global ball_max, ball_w, ball_z, ball_wol, ball_zol, ball_rad, ball_color, ball_angle, ball_angleol, ball_squar, ball_mass, ball_RECT
  504.     global wall_max, wall_type, wall_w1, wall_z1, wall_w2, wall_z2, wall_rad, wall_color, wall_RECT
  505.     global levely
  506.     if levely == 1:
  507.      ball_max     = -1
  508.      ball_w       = []
  509.      ball_z       = []
  510.      ball_wol     = []
  511.      ball_zol     = []
  512.      ball_rad     = []
  513.      ball_color   = []
  514.      ball_angle   = []
  515.      ball_angleol = []
  516.      ball_squar   = []
  517.      ball_mass    = []
  518.      ball_RECT    = []
  519.      #add_ball_thing(350, 300, 0, 0, 18, (230, 230, 250), 0, 0, True, True)
  520.      #add_ball_thing(150, 400, 0, 0, 40, (220, 210, 255), 0, 0, True, True)
  521.      #add_ball_thing(300, 150, 0, 0, 62, (110, 106, 255), 0, 0, True, True)
  522.      add_ball_thing(220, 200, 0, 0, 50, (180, 226, 255), 180, 0, True, True)
  523.      wall_max    = -1
  524.      wall_type   = []
  525.      wall_w1     = []
  526.      wall_z1     = []
  527.      wall_w2     = []
  528.      wall_z2     = []
  529.      wall_rad    = []
  530.      wall_color  = []
  531.      wall_RECT   = []
  532.      add_wall_thing(1, 160, 250, 300, 270,  1, True, True)
  533.      add_wall_thing(1, 500, 270, 600, 310,  1, True, True)
  534.      add_wall_thing(1, 200, 450, 600, 450, 10, True, True)
  535.      add_wall_thing(1, 300, 350, 400, 370,  5, True, True)
  536.      add_wall_thing(1, 300, 100, 400, 100, 20, True, True)
  537.      add_wall_thing(1, 650, 140, 700, 200,  6, True, True)
  538.      add_wall_thing(1, 650, 140, 600,  40,  6, True, True)
  539.      add_wall_thing(1, 150, 340, 150, 340, 30, True, True)
  540.      add_wall_thing(1,  40, 200,  40, 200, 30, True, True)
  541.      add_wall_thing(1,  30, 30,  30, 30, 10, True, True)
  542.      add_wall_thing(1,  30, 30,  30, 30, 10, True, True)
  543.      add_wall_thing(1,  30, 30,  30, 30, 10, True, True)
  544.      add_wall_thing(1,  30, 30,  30, 30, 10, True, True)
  545.      add_wall_thing(1,  30, 30,  30, 30, 10, True, True)
  546.      add_wall_thing(1,  0, 0, APPLICATION_w_size, 0, 5, True, True)
  547.      add_wall_thing(1,  0, 0, 0, APPLICATION_z_size, 5, True, True)
  548.      add_wall_thing(1,  0, APPLICATION_z_size, APPLICATION_w_size, APPLICATION_z_size, 5, True, True)
  549.      add_wall_thing(1,  APPLICATION_w_size, 0, APPLICATION_w_size, APPLICATION_z_size, 5, True, True)
  550.     elif levely == 2:
  551.      ball_max = 1
  552.      ball_w = [323.62638473709342, 384.72135876760257]
  553.      ball_z = [298.67896746658624, 109.24043981044279]
  554.      ball_wol = [-0.27396932987421913, 7.133321987715842]
  555.      ball_zol = [-0.38420912894762504, 1.6564147490246901]
  556.      ball_rad = [15, 28]
  557.      ball_color = [(137, 244, 234), (138, 221, 217)]
  558.      ball_angle = [51.908780125668613, 294.77431504891717]
  559.      ball_angleol = [-1.2400074168431123, 17.698615258690229]
  560.      ball_squar = [[306.62638473709342, 281.67896746658624, 34, 34], [354.72135876760257, 79.240439810442794, 60, 60]]
  561.      ball_mass = [10602.875205865552, 68964.24193160313]
  562.      ball_RECT = [[304.35241540721921, 279.2947583376386, 38.273969329874205, 38.384209128947646], [352.72135876760257, 77.240439810442794, 71.133321987715846, 65.656414749024691]]
  563.      wall_max = 17
  564.      wall_type = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
  565.      wall_w1 = [189, 290, 166, 14, 697, 562, 643, 3, 0, 223, 117, 695, 497, 497, 0, 0, 0, 700]
  566.      wall_z1 = [284, 316, 436, 499, 446, 0, 128, 225, 106, 310, 155, 210, 159, 159, 0, 0, 500, 0]
  567.      wall_w2 = [222, 446, 697, 157, 377, 681, 679, 49, 383, 287, 5, 448, 376, 546, 700, 0, 700, 700]
  568.      wall_z2 = [301, 314, 478, 432, 487, 99, 98, 416, 171, 324, 225, 323, 147, 179, 0, 500, 500, 500]
  569.      wall_rad = [1, 1, 10, 5, 20, 6, 6, 30, 30, 10, 10, 10, 10, 10, 5, 5, 5, 5]
  570.      wall_color = [(220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220)]
  571.      wall_RECT = [[186, 281, 39, 23], [287, 313, 162, 4], [154, 424, 555, 66], [7, 429, 157, 73], [359, 424, 356, 85], [554, -8, 135, 115], [635, 94, 52, 38], [-29, 193, 110, 255], [-32, 74, 447, 129], [211, 298, 88, 38], [-3, 143, 128, 94], [440, 198, 263, 137], [368, 139, 137, 28], [485, 147, 73, 44], [-7, -7, 714, 14], [-7, -7, 14, 514], [-7, 493, 714, 14], [693, -7, 14, 514]]
  572.     elif levely == 3:
  573.      ball_max = 2
  574.      ball_w = [425.0, 492.31837629165733, 98.512856261065167]
  575.      ball_z = [126.0, 422.24553778829392, 430.4902396760661]
  576.      ball_wol = [-12.0, 2.6816237083426699, 6.487143738934833]
  577.      ball_zol = [-3.0, -1.245537788293916, -21.490239676066096]
  578.      ball_rad = [15, 28, 21]
  579.      ball_color = [(137, 244, 234), (138, 221, 217), (136, 235, 236)]
  580.      ball_angle = [93.833857527468922, 75.681742520058592, 323.2915629772819]
  581.      ball_angleol = [-0.87655530207419896, 0.30220691772972269, 1.1825329351046094]
  582.      ball_squar = [[408.0, 109.0, 34, 34], [462.31837629165733, 392.24553778829392, 60, 60], [75.512856261065167, 407.4902396760661, 46, 46]]
  583.      ball_mass = [10602.875205865552, 68964.24193160313, 29094.28956489508]
  584.      ball_RECT = [[394.0, 104.0, 50.0, 41.0], [460.31837629165733, 389.0, 66.68162370834267, 65.245537788293916], [73.512856261065167, 384.0, 56.487143738934833, 71.490239676066096]]
  585.      wall_max = 17
  586.      wall_type = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
  587.      wall_w1 = [189, 290, 166, 14, 697, 562, 643, 3, 0, 223, 117, 695, 497, 497, 0, 0, 0, 700]
  588.      wall_z1 = [284, 316, 436, 499, 446, 0, 128, 225, 106, 310, 155, 210, 159, 159, 0, 0, 500, 0]
  589.      wall_w2 = [222, 446, 697, 157, 377, 681, 679, 49, 383, 287, 5, 480, 376, 546, 700, 0, 700, 700]
  590.      wall_z2 = [301, 314, 478, 432, 487, 99, 98, 416, 171, 324, 225, 325, 147, 179, 0, 500, 500, 500]
  591.      wall_rad = [1, 1, 10, 5, 20, 6, 6, 30, 30, 10, 10, 10, 10, 10, 5, 5, 5, 5]
  592.      wall_color = [(220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220)]
  593.      wall_RECT = [[186, 281, 39, 23], [287, 313, 162, 4], [154, 424, 555, 66], [7, 429, 157, 73], [359, 424, 356, 85], [554, -8, 135, 115], [635, 94, 52, 38], [-29, 193, 110, 255], [-32, 74, 447, 129], [211, 298, 88, 38], [-3, 143, 128, 94], [472, 198, 231, 139], [368, 139, 137, 28], [485, 147, 73, 44], [-7, -7, 714, 14], [-7, -7, 14, 514], [-7, 493, 714, 14], [693, -7, 14, 514]]
  594.     elif levely == 4:
  595.      ball_max = 15
  596.      ball_w = [60.722554805471077, 452.1573538490178, 80.244575784959252, 38.90004863123329, 526.62934623960155, 561.76077439217966, 51.00641675327735, 476.21179724447387, 74.019911348330012, 104.13986580489509, 77.672785567417591, 97.908669417930454, 492.31309851379422, 107.55531577343871, 25.677250467589708, 408.28461679522843]
  597.      ball_z = [123.53309256655999, 426.85562864865636, 446.98025958602022, 145.55077237791539, 432.36880616921724, 419.52605372165829, 185.76812996010321, 398.60172712183214, 227.90675893521163, 330.14246403509031, 280.7917430301959, 382.77488932204739, 431.7008452670733, 426.72875393133694, 108.86075181750218, 420.07030113046562]
  598.      ball_wol = [0.58974898201312453, 0.29357826379544644, -0.7453458908661944, -0.26977452024547638, -0.13077525550683244, 0.35703289164546842, 0.25581836770201244, -0.16968524576896582, -0.96858759109981474, 0.020541831638986374, 0.21623640500730243, 0.16869582232640204, -0.32778500262837312, -1.0423733543425631, 0.078384075232750969, 0.070169924397188832]
  599.      ball_zol = [2.5202528491916918, -0.067935899483811957, 1.0209651395893582, 1.5519551597452736, 0.37674466231734333, 0.7179102343171756, 1.2098558443319702, -0.21937811619009639, 1.6292902773669935, 0.95366629391114355, 0.99836183708718151, 0.65985328138026611, 0.72997687518744558, -0.33325230167901332, 1.8584237502130836, 1.1180771215980612]
  600.      ball_rad = [12, 20, 14, 19, 14, 23, 23, 13, 25, 28, 28, 25, 20, 20, 20, 24]
  601.      ball_color = [(132, 202, 208), (130, 220, 228), (133, 230, 241), (133, 200, 224), (138, 244, 248), (134, 176, 212), (132, 246, 206), (136, 191, 201), (130, 247, 204), (135, 190, 248), (136, 196, 244), (137, 246, 211), (132, 176, 232), (139, 200, 204), (135, 204, 206), (137, 234, 248)]
  602.      ball_angle = [250.64218161257492, 228.50285566079282, 169.93029421257162, 93.92451866434908, 160.53385135173758, 101.81391124171368, 58.682544988047297, 42.833392250734839, 278.96920717602609, 157.52451729820555, 104.82808146227505, 319.29094377305643, 8.3988066326588289, 61.303383965779759, 262.01723832271352, 187.75853100116501]
  603.      ball_angleol = [-11.145052526574146, 0.73910476098485844, -1.916370769365741, 7.8109934129380036, 1.2564621818214414, -0.21633250902344123, 0.96094866236460608, 18.696614939999161, -2.7765510174821686, -0.46915418861267033, 1.3615127061730832, 0.55215997018655683, 0.83188571652892485, -2.1096665563746759, 4.3536534603644128, 0.77565328887569629]
  604.      ball_squar = [[46.722554805471077, 109.53309256655999, 28, 28], [430.1573538490178, 404.85562864865636, 44, 44], [64.244575784959252, 430.98025958602022, 32, 32], [17.90004863123329, 124.55077237791539, 42, 42], [510.62934623960155, 416.36880616921724, 32, 32], [536.76077439217966, 394.52605372165829, 50, 50], [26.00641675327735, 160.76812996010321, 50, 50], [461.21179724447387, 383.60172712183214, 30, 30], [47.019911348330012, 200.90675893521163, 54, 54], [74.139865804895095, 300.14246403509031, 60, 60], [47.672785567417591, 250.7917430301959, 60, 60], [70.908669417930454, 355.77488932204739, 54, 54], [470.31309851379422, 409.7008452670733, 44, 44], [85.555315773438707, 404.72875393133694, 44, 44], [3.6772504675897082, 86.860751817502177, 44, 44], [382.28461679522843, 394.07030113046562, 52, 52]]
  605.      ball_mass = [5428.6721054031623, 25132.741228718347, 8620.5302414503913, 21548.184010972389, 8620.5302414503913, 38223.757816227015, 38223.757816227015, 6902.0790599367756, 49087.385212340516, 68964.24193160313, 68964.24193160313, 49087.385212340516, 25132.741228718347, 25132.741228718347, 25132.741228718347, 43429.376843225298]
  606.      tempy = [[24.00641675327735, 158.76812996010321, 54.255818367702012, 55.209855844331969], [459.04211199870491, 381.38234900564203, 34.16968524576896, 34.219378116190114], [44.051323757230193, 198.90675893521163, 58.968587591099819, 59.629290277366991], [72.139865804895095, 298.14246403509031, 64.02054183163898, 64.953666293911141], [45.672785567417591, 248.7917430301959, 64.216236405007308, 64.998361837087188], [68.908669417930454, 353.77488932204739, 58.168695822326399, 58.659853281380265], [467.98531351116583, 407.7008452670733, 48.327785002628389, 48.729976875187447], [82.512942419096149, 402.39550162965793, 49.042373354342558, 48.333252301679011], [1.6772504675897082, 84.860751817502177, 48.078384075232748, 49.858423750213085], [380.28461679522843, 392.07030113046562, 56.070169924397192, 57.118077121598063]]
  607.      ball_RECT = [[44.722554805471077, 107.53309256655999, 32.589748982013127, 34.520252849191692], [428.1573538490178, 402.78769274917255, 48.293578263795446, 48.067935899483814], [61.499229894093062, 428.98025958602022, 36.74534589086619, 37.020965139589357], [15.630274110987813, 122.55077237791539, 46.269774520245477, 47.551955159745276], [508.49857098409473, 414.36880616921724, 36.130775255506819, 36.376744662317343], [534.76077439217966, 392.52605372165829, 54.357032891645467, 54.717910234317173]] + tempy
  608.      del tempy
  609.      wall_max = 17
  610.      wall_type = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
  611.      wall_w1 = [189, 196, 166, 14, 697, 562, 643, 0, 326, 51, 18, 695, 497, 497, 0, 0, 0, 700]
  612.      wall_z1 = [284, 221, 436, 499, 446, 0, 128, 201, 62, 9, 182, 210, 159, 159, 0, 0, 500, 0]
  613.      wall_w2 = [220, 297, 697, 157, 377, 681, 679, 49, 304, 139, 0, 480, 376, 524, 700, 0, 700, 700]
  614.      wall_z2 = [244, 218, 478, 432, 487, 99, 98, 416, 161, 315, 126, 325, 147, 176, 0, 500, 500, 500]
  615.      wall_rad = [1, 1, 10, 5, 20, 6, 6, 30, 30, 10, 10, 10, 10, 10, 5, 5, 5, 5]
  616.      wall_color = [(220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220)]
  617.      wall_RECT = [[186, 245, 37, 38], [193, 218, 107, 3], [154, 424, 555, 66], [7, 429, 157, 73], [359, 424, 356, 85], [554, -8, 135, 115], [635, 94, 52, 38], [-32, 169, 113, 279], [276, 30, 78, 163], [39, -3, 112, 330], [-8, 118, 34, 72], [472, 198, 231, 139], [368, 139, 137, 28], [485, 147, 51, 41], [-7, -7, 714, 14], [-7, -7, 14, 514], [-7, 493, 714, 14], [693, -7, 14, 514]]
  618.     elif levely == 5:
  619.      ball_max = 15
  620.      ball_w = [563.2380017184845, 135.5091931534665, 435.09697027584525, 132.51126304855137, 158.80356877160969, 486.49890666361813, 28.0454597909272, 469.94449157610796, 253.77058846375945, 33.311743878553251, 651.08671805489632, 467.4560139814393, 420.90145867058521, 248.83956419449743, 98.267666685148598, 670.85536291962285]
  621.      ball_z = [340.3499477728684, 192.53572614832325, 274.00276170743837, 474.72360924550071, 248.04392629767023, 199.66234253741388, 291.77486188629132, 98.828156873677884, 261.79870802935454, 452.90721309179793, 434.31611085503482, 422.84067516142846, 143.71750465032488, 474.55563009909457, 63.407930077910926, 97.5392796541895]
  622.      ball_wol = [-0.12736934788998625, -0.34670289908297647, -0.62730956112551528, -0.01316352118701539, -0.36875760413492498, 0.3253705975573648, -0.43186646985168864, 0.029829055857965088, -0.051399766840351885, 0.31143213467472303, 0.91261705660387604, -0.39289683694945782, 0.6973192899270082, -0.026739395385515136, 0.47773812365404217, -0.14449244329674141]
  623.      ball_zol = [0.2651067487506561, 0.33747092449158278, -0.20330004911815291, 0.11263669365628809, 0.62183969591811039, 0.220324713577495, 0.12382039798193512, -0.062689280803922554, 0.13756798955280808, 0.8702172500111478, -0.031277763984301599, 0.28378328194527458, 0.1666190295210413, 0.056074468995401638, 0.75422143538357722, 0.14790083350095956]
  624.      ball_rad = [12, 20, 14, 19, 14, 23, 23, 13, 25, 28, 28, 25, 20, 20, 20, 24]
  625.      ball_color = [(132, 202, 208), (130, 220, 228), (133, 230, 241), (133, 200, 224), (138, 244, 248), (134, 176, 212), (132, 246, 206), (136, 191, 201), (130, 247, 204), (135, 190, 248), (136, 196, 244), (137, 246, 211), (132, 176, 232), (139, 200, 204), (135, 204, 206), (137, 234, 248)]
  626.      ball_angle = [103.32400188884675, 316.71158855283181, 66.797426175129175, 35.509394217326573, 15.886531654813545, 0.61656478963343941, 195.33151301725019, 152.08747184390086, 199.80989069184068, 131.62120808048311, 339.38767654500623, 158.21789358507957, 322.31233400906359, 97.437869538449633, 179.6312883714439, 134.41162557033078]
  627.      ball_angleol = [0.54118695268280415, -1.0009948706990461, -0.42583251039327935, -0.049119552546591096, -1.7234897593393199, 0.1278122582140804, -0.33925087348758332, 0.98916269599321738, 0.054177225060088277, 0.93648329222661952, 2.0855948904138386, -1.2792816321392795, 1.9343475351789952, -0.094694117658838645, 1.3328174529019678, 1.0390947956294083]
  628.      ball_squar = [[549.2380017184845, 326.3499477728684, 28, 28], [113.5091931534665, 170.53572614832325, 44, 44], [419.09697027584525, 258.00276170743837, 32, 32], [111.51126304855137, 453.72360924550071, 42, 42], [142.80356877160969, 232.04392629767023, 32, 32], [461.49890666361813, 174.66234253741388, 50, 50], [3.0454597909272003, 266.77486188629132, 50, 50], [454.94449157610796, 83.828156873677884, 30, 30], [226.77058846375945, 234.79870802935454, 54, 54], [3.3117438785532514, 422.90721309179793, 60, 60], [621.08671805489632, 404.31611085503482, 60, 60], [440.4560139814393, 395.84067516142846, 54, 54], [398.90145867058521, 121.71750465032488, 44, 44], [226.83956419449743, 452.55563009909457, 44, 44], [76.267666685148598, 41.407930077910926, 44, 44], [644.85536291962285, 71.5392796541895, 52, 52]]
  629.      ball_mass = [5428.6721054031623, 25132.741228718347, 8620.5302414503913, 21548.184010972389, 8620.5302414503913, 38223.757816227015, 38223.757816227015, 6902.0790599367756, 49087.385212340516, 68964.24193160313, 68964.24193160313, 49087.385212340516, 25132.741228718347, 25132.741228718347, 25132.741228718347, 43429.376843225298]
  630.      tempy = [[140.43481116747478, 230.04392629767023, 36.368757604134913, 36.621839695918112], [459.49890666361813, 172.66234253741388, 54.325370597557367, 54.220324713577497], [0.61359332107551268, 264.77486188629132, 54.431866469851684, 54.123820397981937], [452.94449157610796, 81.765467592873961, 34.029829055857967, 34.062689280803923], [224.7191886969191, 232.79870802935454, 58.051399766840348, 58.137567989552807], [1.3117438785532514, 420.90721309179793, 64.311432134674718, 64.870217250011152], [619.08671805489632, 402.28483309105053, 64.912617056603878, 64.031277763984292], [438.06311714448987, 393.84067516142846, 58.392896836949433, 58.283783281945276], [396.90145867058521, 119.71750465032488, 48.697319289927009, 48.166619029521044], [224.81282479911192, 450.55563009909457, 48.026739395385505, 48.056074468995405], [74.267666685148598, 39.407930077910926, 48.477738123654042, 48.754221435383577], [642.71087047632614, 69.5392796541895, 56.144492443296713, 56.147900833500962]]
  631.      ball_RECT = [[547.11063237059454, 324.3499477728684, 32.127369347889953, 32.265106748750654], [111.16249025438353, 168.53572614832325, 48.34670289908297, 48.337470924491583], [416.46966071471974, 255.79946165832024, 36.627309561125514, 36.203300049118127], [109.49809952736436, 451.72360924550071, 46.01316352118701, 46.112636693656285]] + tempy
  632.      del tempy
  633.      wall_max = 17
  634.      wall_type = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
  635.      wall_w1 = [135, 120, 230, 14, 531, 562, 441, 128, 403, 51, 504, 518, 377, 447, 0, 0, 0, 700]
  636.      wall_z1 = [265, 216, 439, 499, 339, 0, 217, 104, 306, 9, 441, 210, 168, 127, 0, 0, 500, 0]
  637.      wall_w2 = [227, 288, 697, 157, 456, 665, 476, 432, 61, 139, 633, 547, 435, 537, 700, 0, 700, 700]
  638.      wall_z2 = [262, 200, 478, 432, 302, 141, 228, 77, 334, 315, 295, 193, 178, 114, 0, 500, 500, 500]
  639.      wall_rad = [1, 1, 10, 5, 20, 6, 6, 30, 30, 10, 10, 10, 10, 10, 5, 5, 5, 5]
  640.      wall_color = [(220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220), (220, 220, 220)]
  641.      wall_RECT = [[132, 262, 98, 3], [117, 201, 174, 14], [218, 427, 491, 63], [7, 429, 157, 73], [438, 284, 111, 73], [554, -8, 119, 157], [433, 209, 51, 27], [96, 49, 368, 83], [33, 274, 398, 92], [39, -3, 112, 330], [492, 287, 153, 162], [506, 185, 53, 33], [365, 156, 82, 34], [435, 106, 114, 29], [-7, -7, 714, 14], [-7, -7, 14, 514], [-7, 493, 714, 14], [693, -7, 14, 514]]
  642. def draw_walls_on_big_black_rect():
  643.     global wall_max, wall_type, wall_w1, wall_z1, wall_w2, wall_z2, wall_rad, wall_color, wall_RECT
  644.     global big_black_rect
  645.     global LIN_selected, CLICKER, CLICKER2
  646.     if CLICKER:
  647.      if LIN_selected != -1:
  648.       nnn = LIN_selected[0]
  649.       if LIN_selected[1] == 1:
  650.        wall_w1[nnn] = mowse_w
  651.        wall_z1[nnn] = mowse_z
  652.       else:
  653.        wall_w2[nnn] = mowse_w
  654.        wall_z2[nnn] = mowse_z
  655.       w1 = wall_w1[nnn]
  656.       z1 = wall_z1[nnn]
  657.       w2 = wall_w2[nnn]
  658.       z2 = wall_z2[nnn]
  659.       rad = wall_rad[nnn]
  660.       wall_RECT[nnn] = freaky_rect_switcharoo_2D(w1 - 2, z1 - 2, w2 - w1 + 4, z2 - z1 + 4, rad)
  661.     wl = -1
  662.     while wl < wall_max:
  663.      wl += 1
  664.      w1 = wall_w1[wl]
  665.      z1 = wall_z1[wl]
  666.      w2 = wall_w2[wl]
  667.      z2 = wall_z2[wl]
  668.      rad = wall_rad[wl]
  669.      collyu = wall_color[wl]
  670.      pygame.draw.line(big_black_rect, collyu, (w1, z1), (w2, z2), rad * 2)
  671.      pygame.draw.circle(big_black_rect, collyu, (w1, z1), rad)
  672.      pygame.draw.circle(big_black_rect, collyu, (w2, z2), rad)
  673.      #pygame.draw.rect(big_black_rect, (200, 200, 200), wall_RECT[wl], 1)
  674.      if CLICKER2:
  675.       if mowse_in_rect(wall_RECT[wl][0], wall_RECT[wl][1], wall_RECT[wl][2], wall_RECT[wl][3]):
  676.        if   mowse_in_circle(w1, z1, rad+3): selected = -1; LIN_selected = [wl, 1]
  677.        elif mowse_in_circle(w2, z2, rad+3): selected = -1; LIN_selected = [wl, 2]
  678. def Lets_ROLL():
  679.     global loopy
  680.     global ball_max, ball_w, ball_z, ball_wol, ball_zol, ball_rad, ball_color, ball_angle, ball_angleol, ball_squar, ball_mass, ball_RECT
  681.     global wall_max, wall_type, wall_w1, wall_z1, wall_w2, wall_z2, wall_rad, wall_color, wall_RECT
  682.     global bounce_friction, air_friction, gravity, rock_and_ROLLY
  683.     global LIN_selected, CLICKER, CLICKER2
  684.     global levely
  685.     levely = 3
  686.     bounce_friction = 0.8
  687.     #bounce_friction = 1.0
  688.     air_friction = 0.999
  689.     #air_friction = 1.0
  690.     gravity = 0.5
  691.     rock_and_ROLLY = math.pi / 8 * 180 #24
  692.     reset_stuff()
  693.     fontyyy = chilly_font_Italicy(24)
  694.     PRESS_SPACE_BAR_TO_MOVE_immy = fontyyy.render('Press SPACE BAR to start motion.', 0, (100, 200, 100))
  695.     PRESS_SPACE_BAR_TO_STOP_immy = fontyyy.render('Press SPACE BAR to stop motion.', 0, (200, 100, 100))
  696.     PRESS_ENTER_TO_RESET_immy    = fontyyy.render('Press ENTER to reset.', 0, (150, 150, 150))
  697.     PRESS_MINUS_TO_MINUS_immy    = fontyyy.render('Press - to delete a ball.', 0, (150, 150, 150))
  698.     PRESS_ADD_TO_ADD_immy        = fontyyy.render('Press + to add a ball.', 0, (150, 150, 150))
  699.     LEFT_CLICK_TO_immy           = fontyyy.render('Left click on a "ghost ball" to change its speed.', 0, (150, 150, 150))
  700.     RIGHT_CLICK_TO_immy          = fontyyy.render('Right click on a ball to stop its motion.', 0, (150, 150, 150))
  701.     PRESS_S_TO_immy              = fontyyy.render('Press S to stop all balls.', 0, (150, 150, 150))
  702.     PRESS_PAGE_UP_TO_immy        = fontyyy.render('Press Page Up to change the level.', 0, (150, 150, 150))
  703.     #message_1_immy
  704.     del fontyyy
  705.     #calculate_for_sure = True
  706.     selected = -1
  707.     LIN_selected = -1
  708.     move_stuff = True
  709.     t = time.time() + .01
  710.     CLICKER = False
  711.     CLICKER2 = False
  712.     loopy = 1
  713.     while loopy:
  714.           big_black_rect.fill((0, 0, 0))
  715.           draw_walls_on_big_black_rect()
  716.           screen.blit(big_black_rect, (0, 0))
  717.           check_for_keys()
  718.           CLICKER    = mowse_left_held
  719.           CLICKER2   = mowse_left_pressed
  720.           CLICKER_2  = mowse_right_held
  721.           CLICKER2_2 = mowse_right_pressed
  722.           if ky_first_held_CEV(32): move_stuff = not move_stuff
  723.           if ky_first_held_CEV(13): reset_stuff()
  724.           if ky_first_held_CEV(280):
  725.            levely += 1
  726.            if levely > 5: levely = 1
  727.            reset_stuff()
  728.           if ky_first_held_CEV(115): # S
  729.             M = -1
  730.             while M < ball_max:
  731.              M += 1
  732.              ball_wol[M] = 0
  733.              ball_zol[M] = 0
  734.              updatey_ball_quick_rect(M)
  735.           if ky_first_held_CEV(45) or ky_first_held_CEV(269): # -
  736.            minus_ball_thing(0)
  737.           if ky_first_held_CEV(61) or ky_first_held_CEV(270): # +
  738.            add_ball_thing(350 + randy(40, -20), 400 + randy(40, -20), randy(40, -20), randy(40, -20), int_randy(20, 10), (int_randy(10, 130), int_randy(80, 170), int_randy(50, 200)), 0, 0, True, True)
  739.           if ky_first_held_CEV(49):
  740.            listy  = ['Level_save']
  741.            listy += ['ball_max = ' + str(ball_max)]
  742.            listy += ['ball_w = ' + str(ball_w)]
  743.            listy += ['ball_z = ' + str(ball_z)]
  744.            listy += ['ball_wol = ' + str(ball_wol)]
  745.            listy += ['ball_zol = ' + str(ball_zol)]
  746.            listy += ['ball_rad = ' + str(ball_rad)]
  747.            listy += ['ball_color = ' + str(ball_color)]
  748.            listy += ['ball_angle = ' + str(ball_angle)]
  749.            listy += ['ball_angleol = ' + str(ball_angleol)]
  750.            listy += ['ball_squar = ' + str(ball_squar)]
  751.            listy += ['ball_mass = ' + str(ball_mass)]
  752.            listy += ['ball_RECT = ' + str(ball_RECT)]
  753.            listy += ['wall_max = ' + str(wall_max)]
  754.            listy += ['wall_type = ' + str(wall_type)]
  755.            listy += ['wall_w1 = ' + str(wall_w1)]
  756.            listy += ['wall_z1 = ' + str(wall_z1)]
  757.            listy += ['wall_w2 = ' + str(wall_w2)]
  758.            listy += ['wall_z2 = ' + str(wall_z2)]
  759.            listy += ['wall_rad = ' + str(wall_rad)]
  760.            listy += ['wall_color = ' + str(wall_color)]
  761.            listy += ['wall_RECT = ' + str(wall_RECT)]
  762.            ##write_to_file_WEEE_STRANGE("Level_Save.dat", listy)
  763.            del listy
  764.           if CLICKER2:
  765.            allow_selectey_thing = True
  766.           else:
  767.            allow_selectey_thing = False
  768.            if not CLICKER:
  769.             selected = -1
  770.             LIN_selected = -1
  771.           to_be_selected = selected
  772.           M = -1
  773.           while M < ball_max:
  774.            M += 1
  775.            if move_stuff:
  776.             move_ball(M)
  777.            wwol = int(ball_w[M] + ball_wol[M])
  778.            zzol = int(ball_z[M] + ball_zol[M])
  779.            pygame.draw.circle(screen, ball_color[M], (int(ball_w[M]), int(ball_z[M])), ball_rad[M])
  780.            blpw, blpz = point_rotated_by_angle_2D(0, -ball_rad[M], 0, 0, ball_angle[M])
  781.            pygame.draw.line(screen, (100, 100, 100), (int(ball_w[M] + blpw), int(ball_z[M] + blpz)), (int(ball_w[M]), int(ball_z[M])))
  782.            if not move_stuff:
  783.             pygame.draw.circle(screen, (100, 100, 250), (wwol, zzol), ball_rad[M], 1)
  784.             pygame.draw.circle(screen, (100, 100, 150), (wwol, zzol), int(ball_rad[M] * 1.0), 1)
  785.             pygame.draw.circle(screen, (150, 150, 200), (wwol, zzol), int(ball_rad[M] * 0.8), 1)
  786.             pygame.draw.circle(screen, (200, 200, 250), (wwol, zzol), int(ball_rad[M] * 0.5), 1)
  787.             pygame.draw.line(screen, (100, 160, 250), (int(ball_w[M]), int(ball_z[M])), (wwol, zzol))
  788.             pygame.draw.rect(screen, (130, 130, 130), ball_RECT[M], 1)
  789.             pygame.draw.rect(screen, (140, 140, 140), ball_squar[M], 1)
  790.            if allow_selectey_thing:
  791.             if mowse_in_rect(ball_RECT[M][0], ball_RECT[M][1], ball_RECT[M][2], ball_RECT[M][3]):
  792.              if mowse_in_circle(wwol, zzol, ball_rad[M]):
  793.               to_be_selected = M
  794.               LIN_selected = -1
  795.            if CLICKER_2:
  796.             if mowse_in_rect(ball_squar[M][0], ball_squar[M][1], ball_squar[M][2], ball_squar[M][3]):
  797.              if mowse_in_circle(ball_w[M], ball_z[M], ball_rad[M]):
  798.               ball_wol[M] = 0
  799.               ball_zol[M] = 0
  800.               ball_angleol[M] = 0
  801.               updatey_ball_quick_rect(M)
  802.            if CLICKER:
  803.             if selected == M:
  804.              if move_stuff:
  805.               mowseyy_w = mowse_w
  806.               mowseyy_z = mowse_z
  807.               bw1 = ball_rad[M]
  808.               bz1 = ball_rad[M]
  809.               bw2 = APPLICATION_w_size - ball_rad[M]
  810.               bz2 = APPLICATION_z_size - ball_rad[M]
  811.               if mowseyy_w < bw1: mowseyy_w = bw1
  812.               if mowseyy_w > bw2: mowseyy_w = bw2
  813.               if mowseyy_z < bz1: mowseyy_z = bz1
  814.               if mowseyy_z > bz2: mowseyy_z = bz2
  815.               ww = mowseyy_w - ball_w[M]
  816.               zz = mowseyy_z - ball_z[M]
  817.               #dissy = distance_2D(0, 0, ww, zz)
  818.               ball_wol[M] = ww # / 2.0 # / dissy
  819.               ball_zol[M] = zz # / 2.0 # / dissy
  820.              else:
  821.               ball_wol[M] = mowse_w - ball_w[M]
  822.               ball_zol[M] = mowse_z - ball_z[M]
  823.              updatey_ball_quick_rect(M)
  824.           selected = to_be_selected
  825.           if not move_stuff:
  826.            screen.blit(PRESS_SPACE_BAR_TO_MOVE_immy, (10, 10))
  827.           else:
  828.            screen.blit(PRESS_SPACE_BAR_TO_STOP_immy, (10, 10))
  829.           screen.blit(PRESS_MINUS_TO_MINUS_immy, (10, 30))
  830.           screen.blit(PRESS_ADD_TO_ADD_immy, (10, 50))
  831.           screen.blit(PRESS_ENTER_TO_RESET_immy, (10, 70))
  832.           screen.blit(LEFT_CLICK_TO_immy, (10, 90))
  833.           screen.blit(RIGHT_CLICK_TO_immy, (10, 110))
  834.           screen.blit(PRESS_S_TO_immy, (10, 130))
  835.           screen.blit(PRESS_PAGE_UP_TO_immy, (10, 150))
  836.           pygame.display.flip()
  837.           while t > time.time(): pass
  838.           t = time.time() + .01
  839.  # Try_Again_HE_HE Is weird!! maybe It should be deleted!!
  840. def move_ball(M):
  841.             ball_angle[M] += ball_angleol[M]
  842.             if   ball_angle[M] > 359: ball_angle[M] -= 360
  843.             elif ball_angle[M] <   0: ball_angle[M] += 361
  844.             #movey_bally_speciality(M, ball_wol[M], ball_zol[M], 10)
  845.             movey_bally_speciality(M, ball_wol[M], ball_zol[M], 10)
  846.             ball_zol[M] += gravity
  847.             updatey_ball_quick_rect(M)
  848. def movey_bally_speciality(M, wol_special, zol_special, Try_Again_HE_HE):
  849.             global loopy
  850.             global ball_max, ball_w, ball_z, ball_wol, ball_zol, ball_rad, ball_color, ball_angle, ball_angleol, ball_squar, ball_mass, ball_RECT
  851.             global wall_max, wall_type, wall_w1, wall_z1, wall_w2, wall_z2, wall_rad, wall_color, wall_RECT
  852.             global bounce_friction, air_friction, gravity, rock_and_ROLLY
  853.             distance_is_supposed_to_be_at = distance_2D(0, 0, wol_special, zol_special)
  854.             wa = ball_w[M]
  855.             za = ball_z[M]
  856.             #will_be_w = wa + ball_wol[M]
  857.             #will_be_z = za + ball_zol[M]
  858.             will_be_w = wa + wol_special
  859.             will_be_z = za + zol_special
  860.             LIN_collide_max = -1
  861.             LIN_collide_w    = []
  862.             LIN_collide_z     = []
  863.             LIN_collide_ang    = []
  864.             LIN_collide_dis     = []
  865.             LL = -1
  866.             while LL < wall_max:
  867.               LL += 1
  868.               if rect_touching_rect2(ball_RECT[M][0], ball_RECT[M][1], ball_RECT[M][2], ball_RECT[M][3], wall_RECT[LL][0], wall_RECT[LL][1], wall_RECT[LL][2], wall_RECT[LL][3]):
  869.                   #print 'weee'
  870.                   did_collide, New_ball_w, New_ball_z, angle_hit_at = find_where_ball_collides_on_a_wall(wa, za, wol_special, zol_special, ball_rad[M], wall_type[LL], wall_w1[LL], wall_z1[LL], wall_w2[LL], wall_z2[LL], wall_rad[LL])
  871.                   if did_collide:
  872.                    #print 'collide'
  873.                    #print str(New_ball_w), str(New_ball_z)
  874.                    LIN_collide_max += 1
  875.                    LIN_collide_w    += [New_ball_w]
  876.                    LIN_collide_z     += [New_ball_z]
  877.                    LIN_collide_ang    += [angle_hit_at]
  878.                    LIN_collide_dis     += [distance_2D(wa, za, New_ball_w, New_ball_z)]
  879.             HEH_collide_max = -1
  880.             HEH_collide_w    = []
  881.             HEH_collide_z     = []
  882.             HEH_collide_ang    = []
  883.             HEH_collide_dis     = []
  884.             HEH_collide_ball_hit = []
  885.             M2 = -1
  886.             while M2 < ball_max:
  887.              M2 += 1
  888.              if M2 != M:
  889.               if rect_touching_rect2(ball_RECT[M][0], ball_RECT[M][1], ball_RECT[M][2], ball_RECT[M][3], ball_squar[M2][0], ball_squar[M2][1], ball_squar[M2][2], ball_squar[M2][3]):
  890.                   #they_did_touch, New_ball1_w, New_ball1_z, angle_hit_at = find_where_ball_collides_on_another_ball(wa, za, ball_wol[M], ball_zol[M], ball_rad[M], ball_w[M2], ball_z[M2], ball_rad[M2])
  891.                   they_did_touch, New_ball1_w, New_ball1_z, angle_hit_at = find_where_ball_collides_on_another_ball(wa, za, wol_special, zol_special, ball_rad[M], ball_w[M2], ball_z[M2], ball_rad[M2])
  892.                   if they_did_touch:
  893.                    HEH_collide_max += 1
  894.                    HEH_collide_w    += [New_ball1_w]
  895.                    HEH_collide_z     += [New_ball1_z]
  896.                    HEH_collide_ang    += [angle_hit_at]
  897.                    HEH_collide_dis     += [distance_2D(wa, za, New_ball1_w, New_ball1_z)]
  898.                    HEH_collide_ball_hit += [M2]
  899.             current_dis = distance_is_supposed_to_be_at
  900.             Wall_to_hit_at_angley = None
  901.             Grr = -1
  902.             while Grr < LIN_collide_max:
  903.              Grr += 1
  904.              #print LIN_collide_dis[Grr], current_dis
  905.              if LIN_collide_dis[Grr] < current_dis:
  906.                #print 'weee!'
  907.                Wall_to_hit_at_angley = LIN_collide_ang[Grr]
  908.                current_dis = LIN_collide_dis[Grr]
  909.                will_be_w = LIN_collide_w[Grr]
  910.                will_be_z = LIN_collide_z[Grr]
  911.             Ball_to_hit = None
  912.             Ball_to_hit_at_angley = None
  913.             Heh = -1
  914.             while Heh < HEH_collide_max:
  915.              Heh += 1
  916.              if HEH_collide_dis[Heh] < current_dis:
  917.               if ball_is_going_towards_ball(M, HEH_collide_ball_hit[Heh]):
  918.                if ball_is_relatively_going_towards_ball(M, HEH_collide_ball_hit[Heh]):
  919.                 Ball_to_hit = HEH_collide_ball_hit[Heh]
  920.                 Ball_to_hit_at_angley = HEH_collide_ang[Heh]
  921.                else:
  922.                 Ball_to_hit = None
  923.                 Ball_to_hit_at_angley = None
  924.                current_dis = HEH_collide_dis[Heh]
  925.                will_be_w = HEH_collide_w[Heh]
  926.                will_be_z = HEH_collide_z[Heh]
  927.             if Ball_to_hit != None:
  928.              Make_two_balls_hit_at_angle(M, Ball_to_hit, Ball_to_hit_at_angley)
  929.             else:
  930.              #if   bouncey == 1: ball_wol[M] = -ball_wol[M] * bounce_friction
  931.              #elif bouncey == 2: ball_zol[M] = -ball_zol[M] * bounce_friction
  932.              if Wall_to_hit_at_angley != None:
  933.               ball_wol[M], ball_zol[M] = wzol_bounce_at_angle(ball_wol[M], ball_zol[M], Wall_to_hit_at_angley, bounce_friction)
  934.               ball_angleol[M] = zol_at_angle(ball_wol[M], ball_zol[M], Wall_to_hit_at_angley + 90) / ball_rad[M] * rock_and_ROLLY
  935.             ball_w[M] = will_be_w
  936.             ball_z[M] = will_be_z
  937.             if ball_w[M] < 0 or ball_w[M] > APPLICATION_w_size or ball_z[M] < 0 or ball_z[M] > APPLICATION_z_size:
  938.              #print str(M) + "   ", str(wa), str(za)
  939.              print str(M) + "   ", str(ball_w[M]), str(ball_z[M]), str(ball_rad[M])
  940.             ball_wol[M] *= air_friction
  941.             ball_zol[M] *= air_friction
  942.             updatey_ball_quick_rect(M)
  943.             if current_dis < distance_is_supposed_to_be_at:
  944.              if Try_Again_HE_HE > 0:
  945.               distance_to_travel_next = distance_is_supposed_to_be_at - current_dis
  946.               disy_HE_HE = distance_2D(0, 0, ball_wol[M], ball_zol[M])
  947.               next_wol = ball_wol[M]
  948.               next_zol = ball_zol[M]
  949.               movey_bally_speciality(M, next_wol, next_zol, Try_Again_HE_HE - 1)
  950.  
  951.            ## Woah... Finally! Were near the end of the program! ##
  952. if __name__ == '__main__':
  953.   import math
  954.   import pygame
  955.   import random
  956.   import time
  957.   import gc
  958.   import copy
  959.   from   pygame.locals import *
  960.   if not pygame.font: print 'Warning, fonts disabled?'
  961.   if not pygame.mixer: print 'Warning, sound disabled?'
  962.   HE_HE_init()
  963.            ## THE END! ##
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement