def fire(self): if self.limit_bull > 0 and time_t() - self.last_time > limit_time: fire_sound.play() bullet = Bullet(img_bullet, x=self.rect.centerx, y=self.rect.top, size_x=15, size_y=20, speed=-15) self.bullets.add(bullet) self.limit_bull -= 1 self.last_time = time_t()
def next_frame(): global limit_bull, last_time, run # событие нажатия на кнопку Закрыть for e in event.get(): if e.type == QUIT: run = False # событие нажатия на пробел - спрайт стреляет if e.type == KEYDOWN and e.key == K_SPACE and not finish: if limit_bull > 0 and time_t() - last_time > limit_time: ship.fire() limit_bull -= 1 last_time = time_t() display.update() clock.tick(30)
def update(self): if sprite.collide_rect(self.scaner, ship) and time_t() - self.last_shot > 0.3: self.fire() self.last_shot = time_t() if self.direction == 'left' and self.rect.x <= self.left: self.direction = "right" elif self.direction == 'right' and self.rect.x >= self.right: self.direction = "left" if self.direction == "left": self.rect.x -= self.speed elif self.direction == "right": self.rect.x += self.speed self.scaner.rect.centerx = self.rect.centerx
def update(self): if (self.armor and sprite.collide_rect(self.goal, ship) and time_t() - self.last_time > pause_fire * 5): self.fire() self.armor -= 1 self.last_time = time_t() self.rect.y += self.speed global lost # исчезает, если дойдет до края экрана if self.rect.y > win_height: self.rect.x = randint(80, win_width - 80) self.goal.rect.x = self.rect.centerx self.rect.y = 0 lost = lost + 1 self.armor = 3
def __init__(self, player_image, x, y, size_x, size_y, speed): # Вызываем конструктор класса (Sprite): super().__init__(player_image, x, y, size_x, size_y, speed) self.bullets = sprite.Group() self.last_time = time_t() self.life = None self.limit_bull = None
def update(self): if not self.hide: if (self.armor and sprite.collide_rect(self.goal, ship) and time_t() - self.last_time > pause_fire * 5): self.fire() self.armor -= 1 self.last_time = time_t() if self.side == "left" and self.rect.x <= self.left: self.side = "right" if self.side == "right" and self.rect.x >= self.right: self.side = "left" if self.side == "left": self.rect.x -= self.speed else: self.rect.x += self.speed self.goal.rect.x = self.rect.centerx
def update(self): if self.i < len(self.exp_img) and time_t() - self.last_time > 0.15: x, y = self.rect.centerx, self.rect.centery self.image = self.exp_img[self.i] self.rect = self.image.get_rect() self.rect.centerx, self.rect.centery = x, y self.i += 1 elif self.i == len(self.exp_img): self.kill()
def __init__(self, boss_image, x, y, size_x, size_y, speed): GameSprite.__init__(self, boss_image, x, y, size_x, size_y, speed) self.scaner = Scaner(x + size_x // 2) self.right = win_width - 100 self.left = 100 self.direction = "right" * randint(0, 1) or "left" self.health = 10 self.last_shot = time_t() self.bulletes = sprite.Group()
def update(self): if not self.hide: keys = key.get_pressed() if keys[K_LEFT] and self.rect.x > 5: self.rect.x -= self.speed if keys[K_RIGHT] and self.rect.x < win_width - size_x_sh: self.rect.x += self.speed if keys[K_UP] and self.rect.y > 5: self.rect.y -= self.speed // 2 if keys[K_DOWN] and self.rect.y < win_height - size_y_sh: self.rect.y += self.speed # событие нажатия на пробел - спрайт стреляет if self.limit_bull and keys[ K_SPACE] and time_t() - self.last_time > pause_fire: self.fire() self.limit_bull -= 1 self.last_time = time_t() elif self.i < 10: self.i += 1 else: self.dead = True self.bullets.update()
def __init__(self, x, y) -> None: super().__init__() size_x, size_y = size_x_enemy // 2, size_y_enemy // 2 self.bum = [ transform.scale(image.load(img_bum), (size_x, size_y)), transform.scale(image.load(img_bum), (size_x + 15, size_y + 15)), transform.scale(image.load(img_bum), (size_x + 30, size_y + 30)), transform.scale(image.load(img_bum), (size_x + 40, size_y + 40)), transform.scale(image.load(img_bum), (size_x + 50, size_y + 50)) ] self.i = 1 self.last_time = time_t() self.image = self.bum[0] self.rect = self.image.get_rect() self.rect.centerx, self.rect.centery = x, y
def __init__(self, player_image, x, y, size_x, size_y, speed, direction): # Вызываем конструктор класса (Sprite): #sprite.Sprite.__init__(self) super().__init__() self.direction = direction self.last_time = time_t() # каждый спрайт должен хранить свойство image - изображение self.image = transform.scale(image.load(player_image), (size_x, size_y)) self.speed = speed # каждый спрайт должен хранить свойство rect - прямоугольник, в который он вписан self.rect = self.image.get_rect() self.rect.x = x self.rect.y = y
def __init__(self, x, y) -> None: super().__init__() size_x, size_y = 40, 25 exp_sound.play() self.exp_img = [transform.scale(image.load(img_exp), (size_x, size_y)), transform.scale(image.load(img_exp), (size_x + 10, size_y + 5)), transform.scale(image.load(img_exp), (size_x + 20, size_y + 10)), transform.scale(image.load(img_exp), (size_x + 30, size_y + 15)), transform.scale(image.load(img_exp), (size_x + 40, size_y + 25)), transform.scale(image.load(img_exp), (size_x + 50, size_y + 35))] self.image = self.exp_img[0] self.rect = self.image.get_rect() self.rect.centerx = x self.rect.centery = y self.i = 1 self.last_time = time_t()
def __init__(self, x, y, size_x, size_y) -> None: super().__init__() size_x //= 2 size_y //= 2 self.boom_imgs = [ transform.scale(image.load(img_boom), (size_x, size_y)), transform.scale(image.load(img_boom), (size_x + 5, size_y + 5)), transform.scale(image.load(img_boom), (size_x + 15, size_y + 10)), transform.scale(image.load(img_boom), (size_x + 25, size_y + 20)), transform.scale(image.load(img_boom), (size_x + 35, size_y + 25)), transform.scale(image.load(img_boom), (size_x + 40, size_y + 30)) ] self.image = self.boom_imgs[0] self.rect = self.image.get_rect() self.rect.centerx, self.rect.centery = x, y self.i = 1 self.last_time = time_t() boom_sound.play()
if finish != True: player.update() monsters.update() draw_all() #Ситуация "Проигрыш" if (sprite.spritecollide(player, monsters, dokill=False)): # для грцппы kick.play() player.change_image(new_image="sprite2.png", new_size=hero_size) draw_all() draw_final(lose) sleep(1) player.change_image(new_image="hero.png", new_size=hero_size) player.rect.x, player.rect.y = start_x, start_y if (sprite.spritecollide(player, traps, dokill=False)): # для грцппы player.speed = 1 else: player.speed = 5 #Ситуация "Выигрыш" if sprite.collide_rect(player, final): finish = True draw_final(win) money.play() last_time = time_t() elif time_t() - last_time > 5: game = False display.update() clock.tick(FPS)
# Создаем окошко display.set_caption("Shooter") window = display.set_mode((win_width, win_height)) background = transform.scale(image.load(img_back), (win_width, win_height)) # создаем спрайты ship = Player(img_hero, x=5, y=win_height - 100, size_x=80, size_y=100, speed=10) ship.bullets = sprite.Group() # создание группы спрайтов-врагов monsters = sprite.Group() boss = Boss(img_enemy, x=win_width//2, y=70, size_x=120, size_y=80, speed=12) booms = sprite.Group() start_game() last_time = time_t() clock = time.Clock() # Основной цикл игры: run = True # флаг сбрасывается кнопкой закрытия окна while run: # сама игра: действия спрайтов, проверка правил игры, перерисовка if not finish: main_update() # проверка столкновения пули и монстров (и монстр, и пуля при касании исчезают) collides = sprite.groupcollide(monsters, ship.bullets, False, True) score = monsters_collide_actions(collides, score) if final and boss.health > 0 and sprite.spritecollide(boss, ship.bullets, True): boss.health -= 1 booms.add(Boom(x=boss.rect.centerx, y=boss.rect.bottom,
ship = Player(img_hero, x=5, y=win_height - 120, size_x=80, size_y=100, speed=15) bullets = sprite.Group() exps = sprite.Group() monsters = sprite.Group() for i in range(1, 8): monster = Enemy(img_enemy, x=randint(80, win_width - 80), y=-40, size_x=80, size_y=50, speed=randint(1, 3)) monsters.add(monster) run = True finish = False last_time = time_t() while run: for e in event.get(): if e.type == QUIT: run = False if e.type == KEYDOWN and e.key == K_SPACE and not finish: if limit_bull > 0 and time_t() - last_time > limit_time: ship.fire() limit_bull -= 1 last_time = time_t() if not finish: window.blit(background,(0,0)) text = font2.render("Счет: " + str(score), 1, WHITE_COLOR) window.blit(text, (10, 20))
def restart(self, max_life, max_bull): self.last_time = time_t() self.life = max_life self.limit_bull = max_bull self.rect.centerx = win_width // 2