informatica:programacion:python:pyxel:juego_plataformas
Plataformas clon
Juego tipo plataformas usando Pyxel.
El código fue generado por DeepSeek (una inteligencia artificial generativa)
import pyxel class Platformer: def __init__(self): pyxel.init(160, 160, title="Llave del Tesoro", fps=60) self.reset_game() pyxel.run(self.update, self.draw) def reset_game(self): self.player_x = 80 self.player_y = 140 self.player_dy = 0 self.has_key = False self.current_level = 0 self.levels = [ { # Nivel 1 "platforms": [(0, 150, 160, 10), (40, 120, 40, 10), (100, 90, 40, 10)], "obstacles": [(60, 140, 10, 10), (120, 110, 10, 10)], "key": (140, 80), "door": (10, 100) }, { # Nivel 2 "platforms": [(0, 150, 160, 10), (20, 120, 40, 10), (100, 90, 40, 10), (60, 60, 40, 10)], "obstacles": [(90, 140, 10, 10), (140, 110, 10, 10), (30, 80, 10, 10)], "key": (10, 140), "door": (140, 100) }, { # Nivel 3 "platforms": [(0, 150, 160, 10), (40, 120, 20, 10), (100, 100, 20, 10), (60, 70, 20, 10)], "obstacles": [(60, 140, 10, 10), (140, 120, 10, 10), (20, 90, 10, 10)], "key": (80, 30), "door": (75, 120) } ] self.load_level() def load_level(self): level = self.levels[self.current_level] self.platforms = level["platforms"] self.obstacles = level["obstacles"] self.key = level["key"] self.door = level["door"] self.has_key = False def check_platform_collision(self, x, y): for (px, py, pw, ph) in self.platforms: if (x + 8 > px and x < px + pw and y + 8 > py and y < py + ph): return True return False def check_obstacle_collision(self): for (ox, oy, ow, oh) in self.obstacles: if (self.player_x + 8 > ox and self.player_x < ox + ow and self.player_y + 8 > oy and self.player_y < oy + oh): return True return False def update(self): if self.check_obstacle_collision(): self.load_level() self.player_x = 80 self.player_y = 140 return # Movimiento horizontal if pyxel.btn(pyxel.KEY_LEFT): self.player_x = max(0, self.player_x - 2) if pyxel.btn(pyxel.KEY_RIGHT): self.player_x = min(152, self.player_x + 2) # Salto if pyxel.btnp(pyxel.KEY_SPACE) and self.check_platform_collision(self.player_x, self.player_y + 1): self.player_dy = -4 # Gravedad self.player_dy = min(self.player_dy + 0.2, 3) new_y = self.player_y + self.player_dy # Colisión vertical if not self.check_platform_collision(self.player_x, new_y): self.player_y = new_y else: self.player_dy = 0 # Recolectar llave if (abs(self.player_x - self.key[0]) < 8 and abs(self.player_y - self.key[1]) < 8): self.has_key = True # Cambiar de nivel if self.has_key and (abs(self.player_x - self.door[0]) < 8 and abs(self.player_y - self.door[1]) < 8): if self.current_level < len(self.levels) - 1: self.current_level += 1 self.load_level() self.player_x = 80 self.player_y = 140 else: pyxel.text(60, 80, "¡HAS GANADO!", pyxel.frame_count % 16) def draw(self): pyxel.cls(0) # Dibujar plataformas for (x, y, w, h) in self.platforms: pyxel.rect(x, y, w, h, 3) # Dibujar obstáculos for (x, y, w, h) in self.obstacles: pyxel.rect(x, y, w, h, 8) # Dibujar llave if not self.has_key: pyxel.rect(self.key[0], self.key[1], 8, 8, 9) # Dibujar puerta if self.has_key: door_color = 7 else: door_color = 4 pyxel.rect(self.door[0], self.door[1], 8, 8, door_color) # Dibujar jugador pyxel.rect(self.player_x, self.player_y, 8, 8, 11) # UI pyxel.text(5, 5, f"Nivel: {self.current_level + 1}", 7) pyxel.text(105, 5, f"Llave: {'SI' if self.has_key else 'NO'}", 9) # pyxel.text(5, 25, "Controles:", 7) # pyxel.text(5, 35, "Flechas: Movimiento", 7) # pyxel.text(5, 45, "Espacio: Saltar", 7) Platformer()
informatica/programacion/python/pyxel/juego_plataformas.txt · Última modificación: por tempwin
