# coding=utf-8
#Space Invaders
import turtle
import os
import math
import random
# Configurar la pantalla
win = turtle.Screen()
win.bgcolor("black")
win.title("Space Invaders")
win.bgpic("space_invaders_background.gif")
#Registra los gráficos para el juego
turtle.register_shape("invader.gif")
turtle.register_shape("player.gif")
#Dibujar borde
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color("white")
border_pen.penup()
border_pen.setposition(-300,-300)
border_pen.pensize(3)
border_pen.pendown()
for side in range(4):
border_pen.fd(600)
border_pen.lt(90)
border_pen.hideturtle()
# Establecer el puntaje a 0
score = 0
# Dibuja la puntuación en el escenario
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, "bold"))
score_pen.hideturtle()
#Cree la tortuga del jugador
player = turtle.Turtle()
player.color("blue")
player.shape("player.gif")
player.speed(0)
player.penup()
player.setposition(0, -250)
player.setheading(90)
playerspeed = 15
# Elige el número de enemigos
number_of_enemies = 10
#Cree una lista vacía de enemigos
enemiesList = []
#Agregar enemigos a la lista
#Necesitamos crear más objetos de tortuga
for i in range(number_of_enemies):
#Crea al enemigo
enemiesList.append(turtle.Turtle())
for enemy in enemiesList:
enemy.color("red")
enemy.shape("invader.gif")
enemy.speed(0)
enemy.penup()
x = random.randint(-200, 200)
y = random.randint(100, 200)
enemy.setposition(x, y)
enemyspeed = 2
#Crea la bala del jugador
bullet = turtle.Turtle()
bullet.color("yellow")
bullet.shape("triangle")
bullet.speed(0)
bullet.penup()
bullet.setheading(90)
bullet.shapesize(0.5, 0.5)
bullet.hideturtle()
bulletspeed = 20
#Definir estado de bala
# tenemos 2 estados:
# listo - listo para disparar bala
#fire - bala está disparando
bulletstate = "ready"
# Mueve el jugador a izquierda y derecha
def move_left():
x = player.xcor()
x = x - playerspeed
if x < -280:
x = -280
player.setx(x)
def move_right():
x = player.xcor()
x = x + playerspeed
if x > 280:
x = 280
player.setx(x)
def fire_bullet():
#Declare bulletstate como global si necesita un cambio
global bulletstate
if bulletstate == "ready":
os.system("afplay laser.wav&")
# para linux use os.system ("aplay laser.wav &")
# Mueve la bala justo por encima del jugador
x = player.xcor()
y = player.ycor() + 10
bullet.setposition(x,y)
bullet.showturtle()
bulletstate = "fire"
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
# crear enlaces de teclado
turtle.listen()
turtle.onkey(move_left, "Left")
turtle.onkey(move_right, "Right")
turtle.onkey(fire_bullet, "space")
# Bucle principal del juego
while True:
for enemy in enemiesList:
#Este es un ciclo para siempre
#Mover al enemigo
x = enemy.xcor()
x = x + enemyspeed
enemy.setx(x)
#mover al enemigo hacia derecha y hacia izquierda
if enemy.xcor() > 280:
enemyspeed = enemyspeed * -1
y = enemy.ycor()
y = y - 40
enemy.sety(y)
if enemy.xcor() < -280:
enemyspeed = enemyspeed * -1
y = enemy.ycor()
y = y - 40
enemy.sety(y)
#Verifica la colisión entre bala y enemigo
if isCollision(bullet, enemy):
os.system("afplay explosion.wav&")
#para linux use os.system ("aplay explosion.wav &")
#Restablecer la bala
bullet.hideturtle()
bulletstate = "ready"
bullet.setposition(0, -400)
#Restablecer al enemigo
x = random.randint(-200, 200)
y = random.randint(100, 200)
enemy.setposition(x, y)
#Actualiza el puntaje
score += 10
scorestring = "Score: %s" %score
score_pen.clear()
score_pen.write(scorestring, False, align="left", font = ("Arial", 14, "bold"))
#Verifica la colisión entre el enemigo y el jugador
if isCollision(player, enemy):
os.system("afplay explosion.wav&")
#para linux use os.system ("aplay explosion.wav &")
player.hideturtle()
enemy.hideturtle()
print("GAME OVER")
break
#Mueva la bala solo cuando el estado de bala sea "fuego"
if bulletstate == "fire":
y = bullet.ycor()
y = y + bulletspeed
bullet.sety(y)
#Verifique si la bala ha alcanzado la cima
if bullet.ycor() > 275:
bullet.hideturtle()
bulletstate = "ready"
#delay = raw_input("Press enter to finish")
Resultado
Comentarios
Publicar un comentario