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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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.
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