diff --git a/.idea/Pygame_Project.iml b/.idea/Pygame_Project.iml
index f571432..909438d 100644
--- a/.idea/Pygame_Project.iml
+++ b/.idea/Pygame_Project.iml
@@ -2,7 +2,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e73a553..a6218fe 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,5 +3,5 @@
-
+
\ No newline at end of file
diff --git a/main.py b/main.py
index e3947c7..518a426 100644
--- a/main.py
+++ b/main.py
@@ -18,6 +18,9 @@ FIRE_DELAY = 1000 # Задержка между выстрелами в мил
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
+#Определение переменных
+score = 0
+
# Инициализация Pygame
pygame.init()
@@ -402,6 +405,8 @@ while running:
bullet.kill() # Удаляем пулю
tank_hit.kill() # Удаляем бота
respawn_bot() # Создаем нового бота
+ score += 1
+
elif isinstance(bullet, BotBullet):
# Проверяем столкновение пули бота с стенами
if pygame.sprite.spritecollideany(bullet, walls):
@@ -410,6 +415,7 @@ while running:
all_sprites.add(explosion) # Добавление взрыва камня в группу спрайтов
bullet.kill() # Удаляем пулю бота
+
# Отрисовка фона
for i in range(2):
for j in range(2):
@@ -494,6 +500,14 @@ 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)
diff --git a/semiautorifle3-101256.mp3 b/semiautorifle3-101256.mp3
new file mode 100644
index 0000000..42200ad
Binary files /dev/null and b/semiautorifle3-101256.mp3 differ
diff --git a/test.py b/test.py
index fcd57e6..3c08467 100644
--- a/test.py
+++ b/test.py
@@ -18,6 +18,9 @@ FIRE_DELAY = 1000 # Задержка между выстрелами в мил
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
+# Определение переменных
+score = 0
+
# Инициализация Pygame
pygame.init()
@@ -25,14 +28,6 @@ pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), flags=pygame.FULLSCREEN)
pygame.display.set_caption("Танчики")
-# Загрузка и воспроизведение музыки
-pygame.mixer.music.load('music.mp3')
-pygame.mixer.music.play(-1) # Параметр -1 означает зацикливание музыки
-shot_sound = pygame.mixer.Sound('shot.wav')
-meme_sound = pygame.mixer.Sound("meme_sound.wav")
-
-
-
# Загрузка изображений
background_image = pygame.transform.scale(pygame.image.load("travka_pol.jpeg"), (960, 540))
stena = pygame.transform.scale(pygame.image.load("stena.jpeg").convert(), (100, 100))
@@ -43,6 +38,10 @@ bullet_image = pygame.transform.scale(pygame.image.load("bullet.png"), (BULLET_S
menu_background = pygame.transform.scale(pygame.image.load("menu_background.jpg"), (SCREEN_WIDTH, SCREEN_HEIGHT))
+# Загрузка звуков
+shooting_sound = pygame.mixer.Sound("semiautorifle3-101256.mp3")
+theme_song = pygame.mixer.Sound("theme.mp3")
+
# Определение класса танка
class Tank(pygame.sprite.Sprite):
@@ -54,8 +53,9 @@ class Tank(pygame.sprite.Sprite):
self.angle = -90 # Поворот на 90 градусов против часовой стрелки
self.TANK_SPEED = 2
self.last_fire_time = pygame.time.get_ticks() # Время последнего выстрела
- self.boosted = False # Флаг, показывающий, активирован ли ускоритель
- self.boost_multiplier = 2 # Множитель скорости ускорения
+ self.shooting_sound = shooting_sound
+ self.theme_song = theme_song
+ self.theme_song.play(loops=-1)
def update(self):
keys = pygame.key.get_pressed()
@@ -66,15 +66,6 @@ class Tank(pygame.sprite.Sprite):
self.image = pygame.transform.rotate(self.original_image, -self.angle)
self.rect = self.image.get_rect(center=self.rect.center)
- if keys[pygame.K_x]:
- if not self.boosted:
- self.TANK_SPEED *= self.boost_multiplier
- self.boosted = True
- else:
- if self.boosted:
- self.TANK_SPEED /= self.boost_multiplier
- self.boosted = False
-
def move_forward(self):
angle_rad = math.radians(self.angle + 270)
self.rect.x += self.TANK_SPEED * math.cos(angle_rad)
@@ -83,7 +74,6 @@ class Tank(pygame.sprite.Sprite):
def shoot(self):
current_time = pygame.time.get_ticks()
if current_time - self.last_fire_time > FIRE_DELAY: # Проверка задержки между выстрелами
- shot_sound.play() # Воспроизведение звука выстрела
# Коррекция угла вылета пули, чтобы она вылетала из дула танка
offset_angle = -90 # Угол смещения для вылета пули из дула
corrected_angle = self.angle + offset_angle
@@ -94,6 +84,7 @@ class Tank(pygame.sprite.Sprite):
bullet = PlayerBullet(self.rect.centerx + offset_x, self.rect.centery + offset_y, self.angle + 270)
all_sprites.add(bullet)
bullets.add(bullet)
+ self.shooting_sound.play()
self.last_fire_time = current_time # Обновление времени последнего выстрела
@@ -112,7 +103,8 @@ 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() # Удаляем снаряд, если он столкнулся со стеной
+
# Определение класса снаряда бота
class BotBullet(pygame.sprite.Sprite):
@@ -129,7 +121,8 @@ 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() # Удаляем снаряд, если он столкнулся со стеной
+
# Определение класса для бота
class Bot(pygame.sprite.Sprite):
@@ -147,7 +140,6 @@ class Bot(pygame.sprite.Sprite):
self.move_random()
self.rotate_random()
self.check_bounds()
- #self.shoot_random()
def move_random(self):
# Движение вперёд в направлении текущего угла поворота
@@ -174,15 +166,14 @@ class Bot(pygame.sprite.Sprite):
elif self.rect.bottom > SCREEN_HEIGHT:
self.rect.bottom = SCREEN_HEIGHT
- #def shoot_random(self):
- # Выстрел в направлении дула
- #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) # Стрельба в направлении дула
- #all_sprites.add(bullet)
- #bullets.add(bullet)
- #self.last_fire_time = current_time
-
+ # def shoot_random(self):
+ # Выстрел в направлении дула
+ # 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) # Стрельба в направлении дула
+ # all_sprites.add(bullet)
+ # bullets.add(bullet)
+ # self.last_fire_time = current_time
class Wall(pygame.sprite.Sprite):
@@ -194,11 +185,12 @@ class Wall(pygame.sprite.Sprite):
# Создание групп спрайтов
all_sprites = pygame.sprite.Group()
-tanks = pygame.sprite.Group()
+player_tanks = pygame.sprite.Group()
+bot_player_tanks = pygame.sprite.Group()
+bot_tanks = pygame.sprite.Group()
bullets = pygame.sprite.Group()
walls = pygame.sprite.Group() # Группа для всех стен
-
# Создание стен
wall_positions = [
(360, 40), (460, 730), (460, 830), (460, 930),
@@ -233,9 +225,6 @@ for pos in wall_stenki_positions:
all_sprites.add(wall_stenki)
walls.add(wall_stenki)
-
-
-
# Создание групп спрайтов
all_sprites = pygame.sprite.Group()
tanks = pygame.sprite.Group()
@@ -244,22 +233,14 @@ bullets = pygame.sprite.Group()
# Создание игрока
player = Tank(SCREEN_WIDTH // 8, SCREEN_HEIGHT // 7)
all_sprites.add(player)
-tanks.add(player)
+player_tanks.add(player)
+for _ in range(3):
+ bot = Bot(3 * SCREEN_WIDTH // 4, SCREEN_HEIGHT // 2)
+ all_sprites.add(bot)
+ bot_tanks.add(bot)
-bot = Bot(3 * SCREEN_WIDTH // 4, SCREEN_HEIGHT // 2)
-all_sprites.add(bot)
-tanks.add(bot)
-
-bot = Bot(3 * SCREEN_WIDTH // 4, SCREEN_HEIGHT // 2)
-all_sprites.add(bot)
-tanks.add(bot)
-
-bot = Bot(3 * SCREEN_WIDTH // 4, SCREEN_HEIGHT // 2)
-all_sprites.add(bot)
-tanks.add(bot)
-
def draw_menu():
screen.blit(menu_background, (0, 0))
# Рисуем текст меню
@@ -282,11 +263,7 @@ def respawn_bot():
# Создание нового экземпляра бота
new_bot = Bot(random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT))
all_sprites.add(new_bot)
- tanks.add(new_bot)
-
-last_meme_time = 0
-meme_delay = 2000 # Задержка в миллисекундах (2 секунды)
-
+ bot_tanks.add(new_bot)
# Главный цикл программы
@@ -302,45 +279,32 @@ while menu_active:
else:
menu_active = False # Нажата кнопка "Старт"
-
-
# Основной игровой цикл
clock = pygame.time.Clock()
running = True
-
while running:
player_bullets = []
bot_bullets = []
- current_time = pygame.time.get_ticks()
-
-
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: # Обработка левой кнопки мыши
player.shoot()
-
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_k:
- if current_time - last_meme_time > meme_delay: # Проверка задержки
- meme_sound.play()
- last_meme_time = current_time # Обновление времени последнего воспроизведения звука
-
# Обновление всех спрайтов
all_sprites.update()
- # Проверка столкновений пуль с танками
+ # Проверка столкновений пуль
for bullet in bullets:
if isinstance(bullet, PlayerBullet):
- tank_hit = pygame.sprite.spritecollideany(bullet, tanks, pygame.sprite.collide_mask)
+ tank_hit = pygame.sprite.spritecollideany(bullet, bot_tanks, pygame.sprite.collide_mask)
if tank_hit and isinstance(tank_hit, Bot):
tank_hit.kill() # Удаляем бота, если попал игрок
bullet.kill() # Удаляем пулю
elif isinstance(bullet, BotBullet):
- tank_hit = pygame.sprite.spritecollideany(bullet, tanks, pygame.sprite.collide_mask)
+ tank_hit = pygame.sprite.spritecollideany(bullet, player_tanks, pygame.sprite.collide_mask)
if tank_hit and isinstance(tank_hit, Tank):
tank_hit.kill() # Удаляем игрока, если попал бот
bullet.kill() # Удаляем пулю
@@ -348,7 +312,7 @@ while running:
tank_hit.kill() # Удаляем бота, если попал игрок
bullet.kill() # Удаляем пулю
respawn_bot() # Пересоздаем бота в случайном месте карты
-
+ score += 1
bullet.update()
# Отрисовка фона
@@ -435,10 +399,17 @@ 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, (255, 0, 0), (
+ score_rect.topleft, (score_rect.width, score_rect.height))) # Draw a red rectangle behind the score
+ screen.blit(score_text, score_rect.topleft)
pygame.display.flip()
clock.tick(FPS)
# Завершение работы Pygame
pygame.quit()
-# token: 8f195a885b18a96da6577884cc731f850f33a9e2
\ No newline at end of file
+# token: 8f195a885b18a96da6577884cc731f850f33a9e2
diff --git a/theme.mp3 b/theme.mp3
new file mode 100644
index 0000000..30685eb
Binary files /dev/null and b/theme.mp3 differ