Zagraj: Meteorytowy deszcz

Meteorytowy deszcz - Gry w Pythonie - przykłady (Python)

Tak będzie wyglądać gra z tego tematu. Kliknij planszę, żeby zacząć. Rakieta jedzie za myszką, a spacja strzela gwiazdkami. Każdy meteor, który spadnie na dół albo uderzy w rakietę, zabiera życie. Co 10 punktów meteory spadają szybciej. Po końcu gry kliknij, żeby zagrać jeszcze raz. Kolejne przykłady pokazują, jak ta gra powstaje krok po kroku, a potem napiszesz własną wersję z kilkoma zmianami.

import random

class Game(Sprite):
  def __init__(self):
    self.size = 10
    self.color = (99, 102, 241)
    self.points = 0
    self.lives = 3
    self.level = 1
    self.best = 0
    self.state = "start"
    self.text = "Meteorytowy deszcz\nKliknij, aby zacząć"

  def restart(self):
    self.state = "play"
    self.points = 0
    self.lives = 3
    self.level = 1
    for meteor in meteors:
      meteor.reset()

  def update(self):
    if self.state != "play" and world.mouse.down:
      self.restart()
    if self.state == "play":
      self.position = (0, 90)
      self.text = f"Punkty: {self.points}  Życia: {self.lives}  Poziom: {self.level}"
      if self.lives <= 0:
        self.state = "over"
        if self.points > self.best:
          self.best = self.points
    if self.state == "over":
      self.position = (0, 0)
      self.text = f"Koniec gry! Punkty: {self.points}\nRekord: {self.best}\nKliknij, aby zagrać"

class Rocket(Sprite):
  def __init__(self):
    self.image = 12
    self.color = (234, 88, 12)
    self.size = 20
    self.position = (0, -80)
    self.was_down = False
    self.safe = 0

  def update(self):
    if game.state != "play":
      return
    self.x = world.mouse.x
    down = world.key('space')
    if down and not self.was_down:
      shot = Bullet()
      shot.position = (self.x, -70)
      world.add(shot)
    self.was_down = down
    if self.safe > 0:
      self.safe = self.safe - 1
      self.visible = self.safe % 10 < 5

class Meteor(Sprite):
  def __init__(self):
    self.image = 40
    self.color = (120, 72, 40)
    self.size = 20
    self.reset()

  def reset(self):
    self.position = (random.randint(-90, 90), 100)

  def update(self):
    if game.state != "play":
      return
    self.y = self.y - game.level - 1
    if self.y <= -100:
      game.lives = game.lives - 1
      self.reset()
    if self.touches(rocket) and rocket.safe == 0:
      game.lives = game.lives - 1
      rocket.safe = 60
      self.reset()

class Bullet(Sprite):
  def __init__(self):
    self.image = 4
    self.color = (250, 204, 21)
    self.size = 8

  def update(self):
    if game.state != "play":
      return
    self.y = self.y + 6
    if self.y >= 95:
      self.remove()
      return
    for meteor in meteors:
      if self.touches(meteor):
        game.points = game.points + 1
        game.level = 1 + game.points // 10
        spark = Spark()
        spark.position = (meteor.x, meteor.y)
        world.add(spark)
        meteor.reset()
        self.remove()
        return

class Spark(Sprite):
  def __init__(self):
    self.image = 38
    self.color = (249, 115, 22)
    self.size = 10

  def update(self):
    self.size = self.size + 3
    if self.size >= 40:
      self.remove()

game = Game()
rocket = Rocket()
meteors = [Meteor(), Meteor(), Meteor()]
world.add(game)
world.add(rocket)
for item in meteors:
  world.add(item)
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.