diff --git a/bla.py b/bla.py index d5c731a..25a319d 100644 --- a/bla.py +++ b/bla.py @@ -2,7 +2,6 @@ import pygame import random import math -from test import current_time # Определение констант SCREEN_WIDTH = 1920 @@ -19,7 +18,7 @@ BOT_SPEED = 2 FIRE_DELAY = 1000 # Задержка между выстрелами в миллисекундах WHITE = (255, 255, 255) BLACK = (0, 0, 0) - +score = 0 # Инициализация Pygame pygame.init() @@ -70,7 +69,7 @@ class Explosion(pygame.sprite.Sprite): self.rect = self.image.get_rect() self.rect.center = center - # Добавление класса для анимации удара о каменную стену + # Добавление класса для анимации удара о каменную стену class StoneExplosion(pygame.sprite.Sprite): def __init__(self, x, y): super().__init__() @@ -161,14 +160,13 @@ class Tank(pygame.sprite.Sprite): bullets.add(bullet) self.last_fire_time = current_time # Обновление времени последнего выстрела - # Проверяем столкновение пули с каменными стенами + # Проверяем столкновение пули с каменными стенами if pygame.sprite.spritecollideany(bullet, walls): stoneexplosion_sound.play() # Воспроизведение звука столкновения с каменной стеной explosion = StoneExplosion(bullet.rect.centerx, bullet.rect.centery) # Создание анимации удара о стену all_sprites.add(explosion) # Добавление анимации удара о стену в группу спрайтов bullet.kill() # Удаление пули - class PlayerBullet(pygame.sprite.Sprite): def __init__(self, x, y, angle): super().__init__() @@ -183,7 +181,7 @@ class PlayerBullet(pygame.sprite.Sprite): if not screen.get_rect().colliderect(self.rect): self.kill() if pygame.sprite.spritecollideany(self, walls): - self.kill() # Удаляем снаряд, если он столкнулся со стеной + self.kill() # Удаляем снаряд, если он столкнулся со стеной # Определение класса снаряда бота @@ -201,7 +199,7 @@ class BotBullet(pygame.sprite.Sprite): if not screen.get_rect().colliderect(self.rect): self.kill() if pygame.sprite.spritecollideany(self, walls): - self.kill() # Удаляем снаряд, если он столкнулся со стеной + self.kill() # Удаляем снаряд, если он столкнулся со стеной # Определение класса для бота @@ -248,7 +246,7 @@ class Bot(pygame.sprite.Sprite): self.rect.bottom = SCREEN_HEIGHT def shoot_random(self): - # Vыстрел в направлении дула + # Vыстрел в направлении дула current_time = pygame.time.get_ticks() if current_time - self.last_fire_time > random.randint(1000, 5000): bullet = BotBullet(self.rect.centerx, self.rect.centery, self.angle + 90) # Стрельба в направлении дула @@ -429,24 +427,26 @@ while running: # Update sprites all_sprites.update() - # Проверка столкновений пуль с танками - for bullet in bullets: - if isinstance(bullet, PlayerBullet): - tank_hit = pygame.sprite.spritecollideany(bullet, tanks, pygame.sprite.collide_mask) - if tank_hit and isinstance(tank_hit, Bot): - explosion_sound.play() # Воспроизведение звука взрыва - explosion = Explosion(tank_hit.rect.centerx, tank_hit.rect.centery) # Создание взрыва - all_sprites.add(explosion) # Добавление взрыва в группу спрайтов - bullet.kill() # Удаляем пулю - tank_hit.kill() # Удаляем бота - respawn_bot() # Создаем нового бота - elif isinstance(bullet, BotBullet): - # Проверяем столкновение пули бота с стенами - if pygame.sprite.spritecollideany(bullet, walls): - stoneexplosion_sound.play() # Воспроизведение звука взрыва камня - explosion = Explosion(bullet.rect.centerx, bullet.rect.centery) # Создание взрыва камня - all_sprites.add(explosion) # Добавление взрыва камня в группу спрайтов - bullet.kill() # Удаляем пулю бота + # Проверка столкновений пуль с танками + for bullet in bullets: + if isinstance(bullet, PlayerBullet): + tank_hit = pygame.sprite.spritecollideany(bullet, tanks, pygame.sprite.collide_mask) + if tank_hit and isinstance(tank_hit, Bot): + explosion_sound.play() # Воспроизведение звука взрыва + explosion = Explosion(tank_hit.rect.centerx, tank_hit.rect.centery) # Создание взрыва + all_sprites.add(explosion) # Добавление взрыва в группу спрайтов + bullet.kill() # Удаляем пулю + tank_hit.kill() # Удаляем бота + respawn_bot() # Создаем нового бота + score += 1 + + elif isinstance(bullet, BotBullet): + # Проверяем столкновение пули бота с стенами + if pygame.sprite.spritecollideany(bullet, walls): + stoneexplosion_sound.play() # Воспроизведение звука взрыва камня + explosion = Explosion(bullet.rect.centerx, bullet.rect.centery) # Создание взрыва камня + all_sprites.add(explosion) # Добавление взрыва камня в группу спрайтов + bullet.kill() # Удаляем пулю бота # Отрисовка фона for i in range(2): @@ -532,6 +532,13 @@ while running: screen.blit(stenki, (1600, 1030)) screen.blit(stenki, (1800, 1030)) + font = pygame.font.Font(None, 36) + score_text = font.render(f'Score: {score}', True, WHITE) + screen.blit(score_text, (10, 10)) + score_rect = score_text.get_rect(topleft=(10, 10)) + pygame.draw.rect(screen, (0, 255, 0), ( + score_rect.topleft, (score_rect.width, score_rect.height))) # Draw a green rectangle behind the score + screen.blit(score_text, score_rect.topleft) pygame.display.flip() clock.tick(FPS)