Un juego de plataformas 2D desarrollado con Pygame. ¡Explora mundos únicos y supera desafíos!
Sigue las aventuras de [Nombre del Protagonista] en su misión para [objetivo del juego].
Desarrollado con Python 3 y Pygame. Compatible con Windows, Linux y macOS.
import pygame
import sys
import time
# Inicializar Pygame
pygame.init()
ANCHO, ALTO = 800, 600
ventana = pygame.display.set_mode((ANCHO, ALTO))
pygame.display.set_caption("Block Heroes")
# Cargar recursos
logo = pygame.image.load("assets/logo.png")
logo = pygame.transform.scale(logo, (300, 150))
personaje_img = pygame.image.load("assets/player.png")
personaje_img = pygame.transform.scale(personaje_img, (64, 64))
# Cargar sprites animados para caminar hacia abajo (modifica para otras direcciones)
caminar_abajo = [
pygame.image.load("assets/walk_down1.png"),
pygame.image.load("assets/walk_down2.png"),
pygame.image.load("assets/walk_down3.png")
]
caminar_abajo = [pygame.transform.scale(img, (64, 64)) for img in caminar_abajo]
# Sonidos y música (coloca archivos mp3/wav en assets/)
pygame.mixer.music.load("assets/musica_fondo.wav")
pygame.mixer.music.play(-1)
sonido_pesca = pygame.mixer.Sound("assets/Sonido_pesca.mp3")
# Variables animación
frame = 0
reloj_animacion = 0
direccion = "abajo"
# Fuente para textos
fuente = pygame.font.SysFont("arial", 40)
BLANCO = (255, 255, 255)
NEGRO = (0, 0, 0)
# Zona de pesca
zona_agua = pygame.Rect(100, 450, 600, 100)
pescando = False
tiempo_pesca = 0
# Ciclo día/noche
opacidad_noche = 0
ciclo_noche_dia = 1 # 1 para día, -1 para noche
# Pantalla de carga
def pantalla_carga():
ventana.fill(NEGRO)
ventana.blit(logo, (ANCHO // 2 - logo.get_width() // 2, 100))
texto = fuente.render("Cargando...", True, BLANCO)
ventana.blit(texto, (ANCHO // 2 - texto.get_width() // 2, 300))
pygame.display.update()
time.sleep(2)
# Juego principal
def juego():
global frame, reloj_animacion, direccion, pescando, tiempo_pesca, opacidad_noche, ciclo_noche_dia
x, y = ANCHO // 2, ALTO // 2
velocidad = 5
reloj = pygame.time.Clock()
ejecutando = True
while ejecutando:
for evento in pygame.event.get():
if evento.type == pygame.QUIT:
ejecutando = False
teclas = pygame.key.get_pressed()
moved = False
if not pescando:
if teclas[pygame.K_LEFT]:
x -= velocidad
direccion = "izquierda"
moved = True
elif teclas[pygame.K_RIGHT]:
x += velocidad
direccion = "derecha"
moved = True
elif teclas[pygame.K_UP]:
y -= velocidad
direccion = "arriba"
moved = True
elif teclas[pygame.K_DOWN]:
y += velocidad
direccion = "abajo"
moved = True
# Animación
if moved and not pescando:
reloj_animacion += 1
if reloj_animacion >= 10:
frame = (frame + 1) % len(caminar_abajo)
reloj_animacion = 0
else:
frame = 0
ventana.fill((100, 200, 100)) # Fondo pasto
# Dibujar zona de agua
pygame.draw.rect(ventana, (0, 100, 255), zona_agua)
# Posición jugador para colisiones
pos_jugador = pygame.Rect(x, y, 64, 64)
en_agua = zona_agua.colliderect(pos_jugador)
# Iniciar pesca
if en_agua and teclas[pygame.K_f] and not pescando:
pescando = True
tiempo_pesca = pygame.time.get_ticks()
# Controlar pesca
if pescando:
# Capa negra semi-transparente
filtro_pesca = pygame.Surface((ANCHO, ALTO))
filtro_pesca.set_alpha(180)
filtro_pesca.fill((0, 0, 0))
ventana.blit(filtro_pesca, (0, 0))
texto_pescar = fuente.render("Pescando...", True, (255, 255, 255))
ventana.blit(texto_pescar, (ANCHO // 2 - texto_pescar.get_width() // 2, ALTO // 2))
if pygame.time.get_ticks() - tiempo_pesca > 3000: # 3 segundos pesca
pescando = False
sonido_pesca.play()
print("¡Has pescado un pez!")
# Mostrar personaje (solo animación abajo para ahora)
if direccion == "abajo":
ventana.blit(caminar_abajo[frame], (x, y))
else:
ventana.blit(personaje_img, (x, y))
# Ciclo noche/día
opacidad_noche += ciclo_noche_dia
if opacidad_noche >= 150 or opacidad_noche <= 0:
ciclo_noche_dia *= -1
filtro_noche = pygame.Surface((ANCHO, ALTO))
filtro_noche.set_alpha(opacidad_noche)
filtro_noche.fill((0, 0, 50))
ventana.blit(filtro_noche, (0, 0))
pygame.display.update()
reloj.tick(60)
pygame.quit()
sys.exit()
# Ejecutar juego
pantalla_carga()
juego()