Programmin-in-Python

Space Invaders Game

Dec 21st, 2020 (edited)
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.90 KB | None | 0 0
  1. #Space Invader Game
  2.  
  3. from random import randint
  4. from math import sqrt
  5. import turtle
  6.  
  7. #Setting up the screen
  8. wn = turtle.Screen()
  9. wn.bgcolor("black")
  10. wn.title("Space Invaders")
  11. wn.bgpic("Space Invader Background.gif") # The Image is available in the GitHub Link : https://github.com/Programmin-in-Python/Space-Invader-Game.git
  12.  
  13. #Draw border
  14. border_pen = turtle.Turtle()
  15. border_pen.speed(0)
  16. border_pen.color("white")
  17. border_pen.penup()
  18. border_pen.setposition(-300 , -300)
  19. border_pen.pendown()
  20. border_pen.pensize(3)
  21. for side in range(4):
  22.     border_pen.fd(600)
  23.     border_pen.lt(90)
  24. border_pen.hideturtle()
  25.  
  26. #Set the score to ZERO
  27. score = 0
  28.  
  29. #Drawing the score
  30. score_pen = turtle.Turtle()
  31. score_pen.speed(0)
  32. score_pen.color("white")
  33. score_pen.penup()
  34. score_pen.setposition((-280) , 270)
  35. scorestring = "Your Score : {}".format(score)
  36. score_pen.write(scorestring , False , align = "left" , font = ("Times New Roman" , 20 , "normal" ))
  37. score_pen.hideturtle()
  38.  
  39. #Fetching the highest score
  40. try :
  41.     file = open("Space Invader.b")
  42.     high_score = file.readline()
  43. except FileNotFoundError :
  44.     high_score = 0
  45.  
  46. #Printing the Highest Score
  47. high_pen = turtle.Turtle()
  48. high_pen.speed(0)
  49. high_pen.color("White")
  50. high_pen.penup()
  51. high_pen.setposition(280 , 270)
  52. hscore = "Highest Score : {}".format(high_score)
  53. high_pen.write(hscore , False , align = "right" , font = ("Times New Roman" , 20 , "normal"))
  54.  
  55. #Create the player turtle
  56. player = turtle.Turtle()
  57. player.color("green")
  58. player.shape("triangle")
  59. player.shapesize(1 , 1)
  60. player.penup()
  61. player.speed(0)
  62. player.setposition(0 , -250)
  63. player.setheading(90)
  64. playerspeed = 15
  65.  
  66. #Choose a number of enemies
  67. number_of_enemies = 10
  68.  
  69. #Creating an empty list of enemies
  70. enemies = []
  71.  
  72. #Add enemies to the list
  73. for i in range(number_of_enemies) :
  74.  
  75.     #Create the enemy
  76.     enemies.append(turtle.Turtle())
  77.    
  78. for enemy in enemies :
  79.     enemy.color("red")
  80.     enemy.shape("circle")
  81.     enemy.penup()
  82.     enemy.speed(0)
  83.     x = randint((-200) , 200)
  84.     y = randint(100 , 250)
  85.     enemy.setposition(x , y)
  86. enemyspeed = 10
  87.  
  88. #Create the player's projectile
  89. bullet = turtle.Turtle()
  90. bullet.color("yellow")
  91. bullet.shape('triangle')
  92. bullet.penup()
  93. bullet.speed(0)
  94. bullet.setheading(90)
  95. bullet.shapesize(0.5 , 0.5)
  96. bullet.hideturtle()
  97. bulletspeed = 20
  98.  
  99. #Defining bulletstate
  100. #ready - ready to fire
  101. #fire - bullet is firing
  102. bulletstate = "ready"
  103.  
  104. #Move the player left and right
  105. def move_left() :
  106.     x = player.xcor()
  107.     x -= playerspeed
  108.     if x < (-280) :
  109.         x = (-280)
  110.     player.setx(x)
  111. move_left()
  112.  
  113. def move_right() :
  114.     x = player.xcor()
  115.     x += playerspeed
  116.     if x >280 :
  117.         x = 280
  118.     player.setx(x)
  119. move_right()
  120.  
  121. #Move the player forward and backward
  122. def move_forward() :
  123.     y = player.ycor()
  124.     y += playerspeed
  125.     if y > 0 :
  126.         y = 0
  127.     player.sety(y)
  128. move_forward()
  129.  
  130. def move_backward() :
  131.     y = player.ycor()
  132.     y -= playerspeed
  133.     if y < (-250) :
  134.         y = (-250)
  135.     player.sety(y)
  136. move_backward()
  137.  
  138. def Collision(t1 , t2) :
  139.     dist = sqrt(pow((t1.xcor() - t2.xcor()) , 2) + pow((t1.ycor() - t2.ycor()) , 2))
  140.     if dist < 15 :
  141.         return True
  142.     else :
  143.         return False
  144.  
  145. def fire_bullet() :
  146.     #Declaring bulletstate as global if it needs to be changed
  147.     global bulletstate
  148.     if bulletstate == "ready" :
  149.         bulletstate = "fire"
  150.    
  151.         #Move the bullet just above the player
  152.         x = player.xcor()
  153.         y = player.ycor() + 25
  154.         bullet.setposition(x , y)
  155.         bullet.showturtle()        
  156.        
  157. #Create keyboard bindings
  158. turtle.listen()
  159. turtle.onkey(move_left , "Left")
  160. turtle.onkey(move_right , "Right")
  161. turtle.onkey(fire_bullet , "space")
  162. turtle.onkey(move_forward , "Up")
  163. turtle.onkey(move_backward , "Down")
  164.  
  165. #Main Game Loop
  166. while True:
  167.    
  168.     for enemy in enemies :        
  169.        
  170.         #Move the enemy
  171.         x = enemy.xcor()    
  172.         x += enemyspeed
  173.         enemy.setx(x)    
  174.    
  175.         #Move the enemy to and fro
  176.         if enemy.xcor() > 280 :            
  177.            
  178.             #Move all enemies down
  179.             for e in enemies :
  180.                 y = e.ycor()
  181.                 y -= 40
  182.                 e.sety(y)                
  183.                
  184.             #Changes the enemy direction
  185.             enemyspeed *= (-1)
  186.              
  187.         if enemy.xcor() < (-280) :            
  188.            
  189.             #Move all enemies down
  190.             for e in enemies :
  191.                 y = e.ycor()
  192.                 y -= 40
  193.                 e.sety(y)                
  194.                
  195.             #Changes the enemy direction
  196.             enemyspeed *= (-1)        
  197.        
  198.         #Check if there is a collision between the bullet and enemy
  199.         if Collision(bullet , enemy) :            
  200.            
  201.             #Reset the bullet
  202.             bullet.hideturtle()
  203.             bulletstate = "ready"
  204.             bullet.setposition(0 , (-400))            
  205.            
  206.             #Reset the enemy
  207.             x = randint((-200) , 200)
  208.             y = randint(100 , 250)
  209.             enemy.setposition(x , y)            
  210.            
  211.             #Update the score
  212.             score += 10
  213.             scorestring = "Your Score : {}".format(score)
  214.             score_pen.clear()
  215.             score_pen.write(scorestring , False , align = "left" , font = ("Times New Roman" , 20 , "normal" ))            
  216.            
  217.         #Check if there is a collision between the player and enemy
  218.         if Collision(player , enemy) :
  219.             player.hideturtle()
  220.             enemy.hideturtle()
  221.             bullet.hideturtle()            
  222.            
  223.             #Printing Your Score
  224.             score_pen = turtle.Turtle()
  225.             score_pen.speed(0)
  226.             score_pen.color("white")
  227.             score_pen.penup()
  228.             score_pen.setposition(0 , 50)
  229.             scorestring = "Your Score : {}".format(score)
  230.             score_pen.write(scorestring , False , align = "center" , font = ("Times New Roman" , 50 , "normal" ))            
  231.            
  232.             #Saving the Score
  233.             file = open("Space Invader.b" , mode = 'w')
  234.             file.write('{}'.format(score))
  235.            
  236.             #Printing Game Over
  237.             end_pen = turtle.Turtle()
  238.             end_pen.speed(0)
  239.             end_pen.color("white")
  240.             end_pen.penup()
  241.             end_pen.setposition(0 , (-50))
  242.             endstring = "Game Over"
  243.             end_pen.write(endstring , False , align = "center" , font = ("Times New Roman" , 50 , "normal"))
  244.             break        
  245.        
  246.         #Check if the enemy has gone down the border
  247.         if enemy.ycor() < (-280) :
  248.             for e in enemies :
  249.                 e.hideturtle()                
  250.                
  251.                 #Printing Your Score
  252.                 score_pen = turtle.Turtle()
  253.                 score_pen.speed(0)
  254.                 score_pen.color("white")
  255.                 score_pen.penup()
  256.                 score_pen.setposition(0 , 50)
  257.                 scorestring = "Your Score : {}".format(score)
  258.                 score_pen.write(scorestring , False , align = "center" , font = ("Times New Roman" , 50 , "normal" ))                
  259.                
  260.                 #Printing Game Over
  261.                 end_pen = turtle.Turtle()
  262.                 end_pen.speed(0)
  263.                 end_pen.color("white")
  264.                 end_pen.penup()
  265.                 end_pen.setposition(0 , 0)
  266.                 endstring = "Game Over"
  267.                 end_pen.write(endstring , False , align = "center" , font = ("Times New Roman" , 50 , "normal"))
  268.                 break    
  269.    
  270.     #Move the bullet
  271.     if bulletstate == "fire" :
  272.         y = bullet.ycor()
  273.         y += bulletspeed
  274.         bullet.sety(y)    
  275.    
  276.     #Checking whether the bullet has gone to the top
  277.     if bullet.ycor() > 275 :
  278.         bullet.hideturtle()
  279.         bulletstate = "ready"
Add Comment
Please, Sign In to add comment