SpaceAgain v2: Sonidos, Monedas y Kills en Pygame


SpaceAgain v2 es la actualizacion de este pequeño juego en python, donde podemos disparar a las naves enemigas, en esta version agregamos sonidos al destruir enemigos y al disparar.

El el articulo anterior sobre el juego Space Again explicamos el funcionamiento basico del juego, como jugarlo y como ejecutarlo en python y pygame.

En esta nueva actualizacion del juego tenemos varias novedades.

  • Se agrego un sonido al disparar usando la tecla ESPACIO
  • Se agrego un sonido de explosion cuando una bala colisiona con un enemigo y lo destruye
  • Se agrego la opcion de recoger monedas
  • Se agrego un sonido al recoger las monedas
  • Se agrego un contador de los kills o naves que hemos destruido

Codigo

A continuacion el codigo fuente del juego con sus actualizaciones.

# GameAgain v1.2
# En esta version vamos a incluir la aparicion de monedas del juego las cuales igual que los enemigos van a aparecer aleatoriamente pero estas le daran puntos al jugador
#
import pygame
import sys
import random
import os
pygame.init()
############ SONIDOS
pygame.mixer.init()
shoot = pygame.mixer.Sound(os.path.join("sounds", 'shoot.wav'))
explosion = pygame.mixer.Sound(os.path.join("sounds", 'explosion.wav'))
coin_sound = pygame.mixer.Sound(os.path.join("sounds", 'coin.wav'))
###########
width, height = 540,960
myfont = pygame.font.SysFont("monospace", 15)
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Disparando …")
player_img= pygame.image.load("space/ship.webp")
player_img=pygame.transform.scale(player_img,(80,80))
bullet_img= pygame.image.load("space/shot.png")
bullet_img=pygame.transform.scale(bullet_img,(40,40))
### ROTAR LA IMAGEN DEL DISPARO
bullet_img = pygame.transform.rotate(bullet_img, 90)
#bullet_img = bullet_img.get_rect(center=rect.center)
enemy_img= pygame.image.load("space/enemy.png")
enemy_img=pygame.transform.scale(enemy_img,(64,36))
#definimos las monedas
coin_img= pygame.image.load("space/gold-coin.png")
coin_img=pygame.transform.scale(coin_img,(25,25))
background_img= pygame.image.load("space/bg-space.png")
background_img=pygame.transform.scale(background_img,(width,height))
player = player_img.get_rect()
player.topleft = (width//2 – player.width//2, height – player.height – 10)
player_speed = 15
bullet = bullet_img.get_rect()
bullet_speed=20
bullets_array = []
# Monedas
coin = coin_img.get_rect()
coin_speed=15
coins_array = []
enemy = enemy_img.get_rect()
enemy_speed = 10
enemies_array = []
clock = pygame.time.Clock()
keys = {"left": False, "right": False}
points =0
losts =0
coins =0
score =0
while True:
print("Enemigos: ", len(enemies_array), "Balas : ",len(bullets_array))
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key==pygame.K_LEFT:
keys["left"]=True
elif event.key==pygame.K_RIGHT:
keys["right"]=True
elif event.key==pygame.K_SPACE:
bullet = bullet_img.get_rect()
bul = {"rect":pygame.Rect(
player.x+
player.width//2 – bullet.width//2,
player.y,
bullet.width,
bullet.height
),
"image":bullet_img
}
bullets_array.append(bul)
pygame.mixer.Sound.play(shoot)
if event.type==pygame.KEYUP:
if event.key==pygame.K_LEFT:
keys["left"]=False
if event.key == pygame.K_RIGHT:
keys["right"]=False
if keys["left"] and player.left>0:
player.x-=player_speed
if keys["right"] and player.right < width:
player.x+=player_speed
for b in bullets_array:
b["rect"].y-=bullet_speed
# Aparecer enemigos aleatoriamente
if random.randint(0,100)<5:
enemy= enemy_img.get_rect()
enemy.x=random.randint(0, width – enemy.width)
enemies_array.append(enemy.copy())
# aparecer monedas aleatoriamente
if random.randint(0,200)<2:
coin= coin_img.get_rect()
coin.x=random.randint(0, width – coin.width)
coins_array.append(coin.copy())
for ene in enemies_array:
ene.y +=enemy_speed
for c in coins_array:
c.y +=coin_speed
if ene.y > height + 50:
losts+=1
enemies_array.remove(ene)
print("Perdiste: " , points)
#pygame.quit()
#sys.exit()
for b in bullets_array:
for ene in enemies_array:
if ene.colliderect(b["rect"]):
bullets_array.remove(b)
enemies_array.remove(ene)
score+=1
points+=1
pygame.mixer.Sound.play(explosion)
for ene in enemies_array:
if player.colliderect(ene):
pygame.quit()
sys.exit()
for c in coins_array:
if player.colliderect(c):
coins_array.remove(c)
score+=10
coins+=1
pygame.mixer.Sound.play(coin_sound)
label = myfont.render(f"Score: {score} – Monedas : {coins} – Kills: {points} – Perdidos: {losts} ", 1, (255,255,255))
screen.blit(background_img,(0,0))
screen.blit(label, (0, 0))
screen.blit(player_img,player)
for b in bullets_array:
screen.blit(b["image"],b["rect"].topleft)
for ene in enemies_array:
screen.blit(enemy_img,ene)
for c in coins_array:
screen.blit(coin_img,c)
pygame.display.flip()
clock.tick(30)

Descargar

Para descargar el codigo, imagenes y sonidos les dejo el siguiente enlace de descarga.

Link: https://www.dropbox.com/scl/fi/iuc2xt9duczndimqyhhj7/space-again-v1.2.zip?rlkey=lp5lx7l8zuuiojnjii0keymm1&st=meuf02to&dl=0

Ejecutar

Para ejecutar el juego solo deben ejecutar el archivo space-again-v1.2.py de la siguiente manera.

py space-again-v1.2.py

Leave a comment