Esta es la primera demo o version de este juego de disparos SpaceAgain, en la cual podremos controlar nuestra nave, disparar y matar enemigos.
Se esta desarrollando en Python y Pygame y posiblemente lo pasemos mas a delante a Unity.
El motivo de desarrollar el juego SpaceAgain es ir mostrandoles paso a paso el desarrollo de un proyecto de juego y compartirles el codigo fuente y assets.
Para que ustedes puedan modifcar sigustan el juego y sacar sus propias versiones para disfrutarlas o monetizarlas.

Inicialmente el juego cuenta con 4 elementos:
- Imagen de fondo
- Nave (Jugador Principal En la parte de Abajo)
- Enemigos (Los enemigos Salen o Caen de la parte de arriba)
- Balas – Las ballas las dispara la Nave o el jugador y estan van de Abajo hacia arriba
El proposito del juego es destruir las naves enemigas, las cuales van apareciendo y van hacia la nave principal y el objetivo es destruirlas y llegar al mayor puntaje posible.
Los controles de teclado son: las fechas Izquiera y Derecha para moverse hacia los lados y la tecla ESPACIO para disparar.
El codigo es el siguiente.
import pygame | |
import sys | |
import random | |
pygame.init() | |
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)) | |
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 = [] | |
enemy = enemy_img.get_rect() | |
enemy_speed = 10 | |
enemies_array = [] | |
clock = pygame.time.Clock() | |
keys = {"left": False, "right": False} | |
points =0 | |
losts =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) | |
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 | |
if random.randint(0,100)<5: | |
enemy= enemy_img.get_rect() | |
enemy.x=random.randint(0, width – enemy.width) | |
enemies_array.append(enemy.copy()) | |
for ene in enemies_array: | |
ene.y +=enemy_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) | |
points+=1 | |
for ene in enemies_array: | |
if player.colliderect(ene): | |
pygame.quit() | |
sys.exit() | |
label = myfont.render(f"Puntos: {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) | |
pygame.display.flip() | |
clock.tick(30) | |
Para ejecutar el juego es necesario tener instalado el modulo Pygame, para instalarlo se usa el comando.
pip install pygame
Y para ejecutarlo vamos a usar
py space-again-v1.0.py
Y listo ya podremos juegar el jueguito.
Link para descargar: https://www.dropbox.com/scl/fo/enc25q3jkgfc4wqry0ouw/ABq_3P0uCfde1wBTl5kSioM?rlkey=yoswtwftw9ru2wpe0yxzaq91w&st=xj5re2y0&dl=0