Ir al contenido principal

Unidad 5 Practica 2 - Juego 'Space Invaders'

# 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

Entradas más populares de este blog

Unidad III: Configuración y administración del espacio en disco

3.1 Estructuras lógicas de almacenamiento  Para la gestión del almacenamiento de una base de datos existen 4 conceptos bien definidos que deben ser conocidos para poder comprender la forma en la que se almacenan los datos. Vamos a ver la diferencia entre bloque, extensión, segmento y espacio de tablas. Bloques: Se tratan de la unidad más pequeña. Generalmente debe múltiple del tamaño de bloque del sistema operativo, ya que es la unidad mínima que va a pedir Oracle al sistema operativo. Si no fuera múltiple del bloque del sistema se añadiría un trabajo extra ya que el sistema debería obtener más datos de los estrictamente necesarios. Se especifica mediante DB_BLOCK_SIZE. Extensiones: Se forma con uno o más bloques. Cuando se aumenta tamaño de un objeto se usa una extensión para incrementar el espacio. Segmentos: Grupo de extensiones que forman un objeto de la base de datos, como por ejemplo una tabla o un índice. Espacio de tablas: Formado por uno o más datafiles, cada da...

Conexion MySQL Workbench con Python

CODIGO (FORMA 1): import pymysql try: conexion = pymysql.connect(host='localhost',user='root',password='kennethbd',db='escuela') print("Conexión correcta") except (pymysql.err.OperationalError, pymysql.err.InternalError) as e: print("Ocurrió un error al conectar: ", e) CODIGO (FORMA 2): import pymysql ############### CONFIGURAR ESTO ################### # Abre conexion con la base de datos db = pymysql.connect(host='localhost',user='root',password='kennethbd',db='escuela') ################################################## # prepare a cursor object using cursor() method cursor = db.cursor() # ejecuta el SQL query usando el metodo execute(). cursor.execute("SELECT VERSION()") # procesa una unica linea usando el metodo fetchone(). data = cursor.fetchone() print ("Database version : {0}".format(data)) # desconecta del servidor db.close() NOTA (FORMA 2) Si corres este...

Ejemplos de Lenguaje Ensamblador (Emu8086)

Ejemplos de lenguaje ensamblador Programa 1 Programa que muestre como mensaje en la pantalla "Hello World" Código: https://gist.github.com/46e552d13e29cc398d48ce6bfe195eb9.git Resultado: Programa 2 Programa que convierta números de decimal a binario Código: https://gist.github.com/46af226806fdfa4c94359dd9c982d6e7.git Resultado: Programa 3 Programa que verifica si dos cadenas son iguales Código: https://gist.github.com/7c9d5013124f78a94341696756c9c25d.git Resultado: Programa 4 Escribir un código que verifique si una cadena es subcadena de otra. Por ejemplo: «la Mu» es subcadena de «Hola Mundo». La cadena: «233» es subcadena de la cadena «2122432234» Código: https://gist.github.com/Kenneth9951/20bd7ed7b9871018af99aab6685e7f3f Resultado: Programa 5  Escribir un código que verifique que todas los caracteres de una cadena se encuentran en otra. Por ejemplo: todas las letras de la cadena «casa» se encuentran en «escaso». Pero no todas las letras de «cerro» se en cuentran en «recana...