Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # turtle import
- import turtle
- import tkinter
- import os
- import math
- import random
- import time
- #Tips when u click p
- tip = random.randint(1, 3)
- test = 10
- # GUI
- screen = turtle.Screen()
- screen.bgcolor("white")
- screen.title("GUI TEST")
- screen.bgpic("space.gif")
- # Title screen
- title = "SPACE INVADERS"
- title_pen = turtle.Turtle()
- title_pen.speed(0)
- title_pen.color("white")
- title_pen.penup()
- title_pen.setposition(0, 180)
- title_pen.write(title, False, align="center", font=("Orbitron", 50, "normal"))
- title_pen.hideturtle()
- #Click to play text in title screen
- playgame = "Click P to Play!"
- play_pen = turtle.Turtle()
- play_pen.speed(0)
- play_pen.color("grey")
- play_pen.penup()
- play_pen.setposition(-60, 100)
- play_pen.write(playgame, False, align="left", font=("Arial", 20, "normal"))
- play_pen.hideturtle()
- #Click for options text in title screen
- options = "Click O for Options"
- option_pen = turtle.Turtle()
- option_pen.speed(0)
- option_pen.color("grey")
- option_pen.penup()
- option_pen.setposition(-60, 30)
- option_pen.write(options, False, align="left", font=("Arial", 20, "normal"))
- option_pen.hideturtle()
- #Click to quit text in title screen
- quit = "Click Q to Quit"
- quit_pen = turtle.Turtle()
- quit_pen.speed(0)
- quit_pen.color("grey")
- quit_pen.penup()
- quit_pen.setposition(-60, -40)
- quit_pen.write(quit, False, align="left", font=("Arial", 20, "normal"))
- quit_pen.hideturtle()
- #What is done when u click "O"
- def optionsscreen():
- os.system("afplay bottlepop.wav&")
- screen.bgcolor("black")
- screen.title("Options")
- screen.bgpic("")
- title_pen.clear()
- option_pen.clear()
- play_pen.clear()
- quit_pen.clear()
- title = "OPTIONS"
- title_pen.speed(0)
- title_pen.color("white")
- title_pen.penup()
- title_pen.setposition(0, 180)
- title_pen.write(title, False, align="center", font=("Orbitron", 50, "normal"))
- title_pen.hideturtle()
- #What is done when u click "Q"
- def quitscreen():
- exit()
- #What is done when u click "P"
- def playscreen():
- os.system("afplay bottlepop.wav&")
- title_pen.clear()
- option_pen.clear()
- play_pen.clear()
- quit_pen.clear()
- global tip
- if tip == 1:
- title = "Try shooting earlier if an enemy is on top since it takes time for the bullet to reach!"
- elif tip == 2:
- title = "You can change gameplay options if you click O in the title screen!"
- elif tip == 3:
- title = "Hold down arrow keys to move your player faster"
- title_pen.speed(0)
- title_pen.color("#C0C0C0")
- title_pen.penup()
- title_pen.setposition(0, 0)
- title_pen.write(title, False, align="center", font=("Arial", 15, "normal"))
- title_pen.hideturtle()
- time.sleep(3)
- title_pen.clear()
- global test
- test = 11
- if test == 11:
- scorestring.clear()
- global score
- score = 0
- screen = turtle.Screen()
- screen.bgcolor("black")
- screen.title("Space Invaders remake")
- screen.bgpic("space_invaders_background.gif")
- # Register the shapes
- turtle.register_shape("invader.gif")
- turtle.register_shape("player.gif")
- # Border
- border = turtle.Turtle()
- border.speed(0)
- border.color("white")
- border.penup()
- border.setposition(-300, -300)
- border.pendown()
- border.pensize(3)
- for side in range(4):
- border.fd(600)
- border.lt(90)
- border.hideturtle()
- # Set the score to 0
- score = 0
- # Draw the score
- score_pen = turtle.Turtle()
- score_pen.speed(0)
- score_pen.color("white")
- score_pen.penup()
- score_pen.setposition(-290, 280)
- scorestring = "Score: %s" % score
- score_pen.write(scorestring, False, align="left", font=("Arial", 14, "normal"))
- score_pen.hideturtle()
- # create player
- player = turtle.Turtle()
- player.color("green")
- player.shape("player.gif")
- player.penup()
- player.speed(0)
- player.setposition(0, -250)
- player.setheading(90)
- playerspeed = 15
- # Choose a number of enemies
- number_of_enemies = 6
- # Create an empty list of enemies
- enemies = []
- # Add enemies to list
- for i in range(number_of_enemies):
- # Create the enemy
- enemies.append(turtle.Turtle())
- # The enemy / invader
- for enemy in enemies:
- enemy.color("red")
- enemy.shape("invader.gif")
- enemy.penup()
- enemy.speed(0)
- x = random.randint(-200, 200)
- y = random.randint(100, 260)
- enemy.setposition(x, y)
- enemyspeed = 7
- # Bullets for user
- bullet = turtle.Turtle()
- bullet.color("yellow")
- bullet.shape("triangle")
- bullet.penup()
- bullet.speed(0)
- bullet.setheading(90)
- bullet.shapesize(0.5, 0.5)
- bullet.hideturtle()
- bulletspeed = 25
- # Define bullet state
- # Ready to fire
- # fire - bullet is firing
- global bulletstate
- bulletstate = "ready"
- # Moving the player left and right
- def move_left():
- x = player.xcor()
- x -= playerspeed
- if x < -280:
- x = -280
- player.setx(x)
- def move_right():
- x = player.xcor()
- x += playerspeed
- if x > 280:
- x = 280
- player.setx(x)
- def fire_bullet():
- # Declare bulletstate constantly changes so use global
- global bulletstate
- if bulletstate == "ready":
- os.system("afplay laser.wav&")
- bulletstate = "fire"
- # Move the bullet above the player
- x = player.xcor()
- y = player.ycor() + 10
- bullet.setposition(x, y)
- bullet.showturtle()
- # Collision of bullets with enemy pythagorean therom
- def isCollision(t1, t2):
- distance = math.sqrt(math.pow(t1.xcor() - t2.xcor(), 2) + math.pow(t1.ycor() - t2.ycor(), 2))
- if distance < 15:
- return True
- else:
- return False
- # Keybinds
- turtle.listen()
- turtle.onkey(move_left, "Left")
- turtle.onkey(move_right, "Right")
- turtle.onkey(fire_bullet, "space")
- # Main game loop
- while True:
- for enemy in enemies:
- # move the enemy
- x = enemy.xcor()
- x += enemyspeed
- enemy.setx(x)
- #Boundaries for enemy
- if enemy.ycor() < -280:
- player.hideturtle()
- enemy.hideturtle()
- print("Game Over")
- screen.bgcolor("black")
- screen.title("Game Over")
- screen.bgpic("gameover.gif")
- break
- # Boundaries for enemy
- if enemy.xcor() > 280:
- # Move all enemies down
- for e in enemies:
- y = e.ycor()
- y -= 40
- e.sety(y)
- # Change enemy direction [reverse]
- enemyspeed *= -1
- if enemy.xcor() < -280:
- # Move all enemies down
- for e in enemies:
- y = e.ycor()
- y -= 40
- e.sety(y)
- # Change enemy direction [reverse]
- enemyspeed *= -1
- # Check for collision between bullet and enemy
- if isCollision(bullet, enemy):
- os.system("afplay explosion.wav&")
- # Reset the bullet
- bullet.hideturtle()
- bulletstate = "ready"
- bullet.setposition(0, -400)
- # reset the enemy
- x = random.randint(-200, 200)
- y = random.randint(100, 260)
- enemy.setposition(x, y)
- # Update the score
- score += 1
- scorestring = "Score: %s" % score
- score_pen.clear()
- score_pen.write(scorestring, False, align="left", font=("Arial", 14, "normal"))
- # check for collision between player and enemy
- if isCollision(player, enemy):
- os.system("afplay two-pop.wav&")
- player.hideturtle()
- enemy.hideturtle()
- print("Game Over")
- screen.bgcolor("black")
- screen.title("Game Over")
- screen.bgpic("gameover.gif")
- break
- # Moving the bullet
- if bulletstate == "fire":
- y = bullet.ycor()
- y += bulletspeed
- bullet.sety(y)
- # Check to see if the bullet has reached top
- if bullet.ycor() > 275:
- bullet.hideturtle()
- bulletstate = "ready"
- turtle.listen()
- turtle.onkey(optionsscreen, "o")
- turtle.onkey(quitscreen, "q")
- turtle.onkey(playscreen, "p")
- turtle.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement