Krok 8: eliksir czasu
Kryształowa jaskinia - Gry w Pythonie - przykłady (Python)
Coś dla gracza: eliksir czasu. `Potion` jest na początku niewidoczny i liczy własne ticki. Co 300 ticków (10 sekund) pojawia się w losowym miejscu na 90 ticków (`timer`). Złapany oddaje 5 sekund, ale `game.ticks` nie spada poniżej zera.
import random
class Game(Sprite):
def __init__(self):
self.size = 14
self.color = (99, 102, 241)
self.points = 0
self.ticks = 0
self.state = "start"
self.text = "Kryształowa jaskinia\nSpacja = start"
def update(self):
if self.state == "start" and world.key('space'):
self.state = "play"
if self.state == "play":
self.ticks = self.ticks + 1
left = 30 - self.ticks // 30
self.position = (0, 88)
self.text = f"Kryształy: {self.points} Czas: {left}"
if left <= 0:
self.state = "over"
if self.state == "over":
self.position = (0, 0)
self.text = f"Koniec czasu! Kryształy: {self.points}"
class Player(Sprite):
def __init__(self):
self.image = 0
self.color = (124, 58, 237)
self.size = 25
self.rotate = False
def update(self):
if game.state != "play":
return
if world.key('right'):
self.x = self.x + 3
if world.key('left'):
self.x = self.x - 3
if world.key('up'):
self.y = self.y + 3
if world.key('down'):
self.y = self.y - 3
class Crystal(Sprite):
def __init__(self):
self.image = 43
self.color = (14, 165, 233)
self.size = 18
self.position = (random.randint(-85, 85), random.randint(-85, 70))
def update(self):
if game.state != "play":
return
if self.touches(player):
game.points = game.points + 1
self.position = (random.randint(-85, 85), random.randint(-85, 70))
if game.points % 5 == 0:
add_bat()
class Bat(Sprite):
def __init__(self):
self.image = 20
self.color = (71, 85, 105)
self.size = 22
self.rotate = False
self.position = (random.randint(-80, 80), 80)
self.vx = random.choice([-2, 2])
self.vy = random.choice([-2, 2])
def update(self):
if game.state != "play":
return
self.x = self.x + self.vx
self.y = self.y + self.vy
if self.x >= 92 or self.x <= -92:
self.vx = -self.vx
if self.y >= 92 or self.y <= -92:
self.vy = -self.vy
if self.touches(player):
game.ticks = game.ticks + 150
player.position = (0, 0)
class Potion(Sprite):
def __init__(self):
self.image = 50
self.color = (22, 163, 74)
self.size = 18
self.visible = False
self.ticks = 0
self.timer = 0
def update(self):
if game.state != "play":
return
self.ticks = self.ticks + 1
if self.ticks % 300 == 0:
self.position = (random.randint(-85, 85), random.randint(-85, 70))
self.visible = True
self.timer = 90
if self.visible:
self.timer = self.timer - 1
if self.timer <= 0:
self.visible = False
if self.touches(player):
game.ticks = game.ticks - 150
if game.ticks < 0:
game.ticks = 0
self.visible = False
def add_bat():
bat = Bat()
bats.append(bat)
world.add(bat)
game = Game()
player = Player()
crystal = Crystal()
bats = []
potion = Potion()
world.add(game)
world.add(player)
world.add(crystal)
world.add(potion)
add_bat()
world.start()Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.
Wszystkie lekcje kursu Gry w Pythonie - przykłady·Zaloguj się, aby zapisać postęp na koncie.