Facebook
From Md. Inzamam-Ul Haque Sobuz, 1 Month ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 149
  1. import random
  2. import time
  3. import turtle
  4.  
  5. lasers = []
  6. aliens = []
  7.  
  8. CANNON_STEP = 10
  9. LASER_LENGTH = 20
  10. LASER_SPEED = 10
  11. ALIEN_SPAWN_INTERVAL = 1.2  # Seconds
  12. ALIEN_SPEED = 2
  13.  
  14.  
  15. # Draw cannon
  16. def draw_cannon():
  17.     cannon.clear()
  18.     cannon.turtlesize(1, 4)  # Base
  19.     cannon.stamp()
  20.     cannon.sety(FLOOR_LEVEL + 10)
  21.     cannon.turtlesize(1, 1.5)  # Next tier
  22.     cannon.stamp()
  23.     cannon.sety(FLOOR_LEVEL + 20)
  24.     cannon.turtlesize(0.8, 0.3)  # Tip of cannon
  25.     cannon.stamp()
  26.     cannon.sety(FLOOR_LEVEL)
  27.     window.update()
  28.  
  29.  
  30. def move_left():
  31.     new_x = cannon.xcor() - CANNON_STEP
  32.     if new_x >= LEFT + GUTTER:
  33.         cannon.setx(new_x)
  34.         draw_cannon()
  35.  
  36.  
  37. def move_right():
  38.     new_x = cannon.xcor() + CANNON_STEP
  39.     if new_x <= RIGHT - GUTTER:
  40.         cannon.setx(new_x)
  41.         draw_cannon()
  42.  
  43.  
  44. def create_laser():
  45.     laser = turtle.Turtle()
  46.     laser.penup()
  47.     laser.color(1, 0, 0)
  48.     laser.hideturtle()
  49.     laser.setposition(cannon.xcor(), cannon.ycor())
  50.     laser.setheading(90)
  51.     # Move laser to just above cannon tip
  52.     laser.forward(20)
  53.     # Prepare to draw the laser
  54.     laser.pendown()
  55.     laser.pensize(5)
  56.  
  57.     lasers.append(laser)
  58.  
  59.  
  60. def move_laser(laser):
  61.     laser.clear()
  62.     laser.forward(LASER_SPEED)
  63.     # Draw the laser
  64.     laser.forward(LASER_LENGTH)
  65.     laser.forward(-LASER_LENGTH)
  66.  
  67.  
  68. def create_alien():
  69.     alien = turtle.Turtle()
  70.     alien.penup()
  71.     alien.turtlesize(1.5)
  72.     alien.setposition(
  73.         random.randint(
  74.             int(LEFT + GUTTER),
  75.             int(RIGHT - GUTTER),
  76.         ),
  77.         TOP,
  78.     )
  79.     alien.shape("turtle")
  80.     alien.setheading(-90)
  81.     alien.color(random.random(), random.random(), random.random())
  82.     aliens.append(alien)
  83.  
  84.  
  85. # Remove alien
  86. def remove_alien(alien):
  87.     alien.clear()
  88.     alien.hideturtle()
  89.     aliens.remove(alien)
  90.     turtle.turtles().remove(alien)
  91.  
  92.  
  93. # Remove laser
  94. def remove_laser(laser):
  95.     laser.clear()
  96.     laser.hideturtle()
  97.     lasers.remove(laser)
  98.     turtle.turtles().remove(laser)
  99.  
  100.  
  101. # Remove sprite
  102. def remove_sprite(sprite, sprite_list):
  103.     sprite.clear()
  104.     sprite.hideturtle()
  105.     window.update()
  106.     sprite_list.remove(sprite)
  107.     turtle.turtles().remove(sprite)
  108.  
  109.  
  110. window = turtle.Screen()
  111. window.tracer(0)
  112.  
  113. window.setup(0.5, 0.75)
  114. window.bgcolor(0.2, 0.2, 0.2)
  115. window.title("The Real Python Space Invaders")
  116.  
  117. LEFT = -window.window_width() / 2
  118. RIGHT = window.window_width() / 2
  119. TOP = window.window_height() / 2
  120. BOTTOM = -window.window_height() / 2
  121. FLOOR_LEVEL = 0.9 * BOTTOM
  122. GUTTER = 0.025 * window.window_width()
  123.  
  124. # Create laser cannon
  125.  cann
  126. cannon.penup()
  127. cannon.color(1, 1, 1)
  128. cannon.shape("square")
  129. cannon.setposition(0, FLOOR_LEVEL)
  130.  
  131. # Create turtle for writing text
  132. text = turtle.Turtle()
  133. text.penup()
  134. text.hideturtle()
  135. text.setposition(LEFT * 0.8, TOP * 0.8)
  136. text.color(1, 1, 1)
  137.  
  138. draw_cannon()
  139. window.onkeypress(move_left, "Left")
  140. window.onkeypress(move_right, "Right")
  141. window.onkeypress(create_laser, "space")
  142. window.onkeypress(turtle.bye, "q")
  143. window.listen()
  144.  
  145. # Game loop
  146. alien_timer = 0
  147. score = 0
  148. game_timer = time.time()
  149. game_running = True
  150. while game_running:
  151.     time_elapsed = time.time() - game_timer
  152.     text.clear()
  153.     text.write(
  154.         f"Time: {time_elapsed:5.1f}snScore: {score:5}",
  155.          f 20, "bold"),
  156.     )
  157.     # Move all lasers
  158.     for laser in lasers.copy():
  159.         move_laser(laser)
  160.         # Remove laser if it goes off screen
  161.         if laser.ycor() > TOP:
  162.             remove_sprite(laser, lasers)
  163.             break
  164.         # Check for collision with aliens
  165.         for alien in aliens.copy():
  166.             if laser.distance(alien) < 20:
  167.                 remove_sprite(laser, lasers)
  168.                 remove_sprite(alien, aliens)
  169.                 score += 1
  170.                 break
  171.  
  172.     # Spawn new aliens when time interval elapsed
  173.     if time.time() - alien_timer > ALIEN_SPAWN_INTERVAL:
  174.         create_alien()
  175.         alien_timer = time.time()
  176.  
  177.     # Move all aliens
  178.     for alien in aliens:
  179.         alien.forward(ALIEN_SPEED)
  180.         # Check for game over
  181.         if alien.ycor() < FLOOR_LEVEL:
  182.             game_running = False
  183.             break
  184.     window.update()
  185.  
  186. splash_text = turtle.Turtle()
  187. splash_text.hideturtle()
  188. splash_text.color(1, 1, 1)
  189.  splash_text.write("GAME OVER", f 40, "bold"), align="center")
  190.  
  191. turtle.done()