From 4692f381185a9219e4436d5eedd7755c79aa0ac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artjoms=20Marians=20=C5=85e=C4=8Dajevs?= Date: Sun, 3 Mar 2024 20:01:36 +0000 Subject: [PATCH] Update bla.py --- bla.py | 75 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/bla.py b/bla.py index 25a319d..023dca9 100644 --- a/bla.py +++ b/bla.py @@ -2,14 +2,13 @@ import pygame import random import math - # Определение констант SCREEN_WIDTH = 1920 SCREEN_HEIGHT = 1080 -PLAYER_WIDTH = 100 -PLAYER_HEIGHT = 150 -LOH_WIDTH = 300 -LOH_HEIGHT = 250 +PLAYER_WIDTH = 90 +PLAYER_HEIGHT = 135 +LOH_WIDTH = 150 +LOH_HEIGHT = 100 BULLET_SIZE = 20 FPS = 60 BULLET_SPEED = 6 @@ -26,6 +25,7 @@ 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 означает зацикливание музыки @@ -43,7 +43,6 @@ loh_image = pygame.transform.scale(pygame.image.load("loh.png"), (LOH_WIDTH, LOH bullet_image = pygame.transform.scale(pygame.image.load("bullet.png"), (BULLET_SIZE, BULLET_SIZE)) explosion_images = [pygame.image.load(f"explosion_{i}.png") for i in range(1, 48)] stoneexplosion_images = [pygame.image.load(f"stoneexplosion_{i}.png") for i in range(1, 6)] - menu_background = pygame.transform.scale(pygame.image.load("menu_background.jpg"), (SCREEN_WIDTH, SCREEN_HEIGHT)) @@ -209,30 +208,32 @@ class Bot(pygame.sprite.Sprite): self.original_image = loh_image self.image = self.original_image self.rect = self.image.get_rect(center=(x, y)) - self.angle = random.randint(0, 360) # Случайный начальный угол поворота - self.last_fire_time = pygame.time.get_ticks() # Время последнего выстрела - self.rotate_delay = random.randint(100, 500) # Начальная задержка перед поворотом - self.rotate_timer = 0 + self.angle = 0 # Угол поворота бота + self.speed = BOT_SPEED # Скорость бота def update(self): - self.move_random() - self.rotate_random() - self.check_bounds() - # self.shoot_random() + # Находим координаты игрока + player_x, player_y = player.rect.center - def move_random(self): - # Движение вперёд в направлении текущего угла поворота + # Вычисляем угол к игроку + dx = player_x - self.rect.centerx + dy = player_y - self.rect.centery + self.angle = math.degrees(math.atan2(dy, dx)) + 90 + + # Поворачиваем изображение бота + self.image = pygame.transform.rotate(self.original_image, -self.angle) + self.rect = self.image.get_rect(center=self.rect.center) + + # Двигаем бота в направлении игрока angle_rad = math.radians(self.angle + 270) - self.rect.x += BOT_SPEED * math.cos(angle_rad) - self.rect.y += BOT_SPEED * math.sin(angle_rad) + self.rect.x += self.speed * math.cos(angle_rad) + self.rect.y += self.speed * math.sin(angle_rad) - def rotate_random(self): - # Случайный поворот бота - self.rotate_timer += 1 - if self.rotate_timer >= self.rotate_delay: - self.angle += random.randint(-10, 10) # Случайный поворот - self.rotate_delay = random.randint(100, 500) # Новая случайная задержка перед поворотом - self.rotate_timer = 0 + # Проверяем, не выходит ли бот за границы экрана + self.check_bounds() + + # Проверяем столкновения с другими ботами + self.check_bot_collisions() def check_bounds(self): # Проверка выхода за границы экрана @@ -245,14 +246,21 @@ class Bot(pygame.sprite.Sprite): elif self.rect.bottom > SCREEN_HEIGHT: self.rect.bottom = SCREEN_HEIGHT - def shoot_random(self): - # 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) # Стрельба в направлении дула - all_sprites.add(bullet) - bullets.add(bullet) - self.last_fire_time = current_time + def check_bot_collisions(self): + # Проверяем столкновения с другими ботами + for bot in tanks: + if bot != self: + # Проверяем расстояние между ботами + distance = math.sqrt( + (self.rect.centerx - bot.rect.centerx) ** 2 + (self.rect.centery - bot.rect.centery) ** 2) + min_distance = 100 # Минимальное допустимое расстояние между ботами + if distance < min_distance: + # Если боты слишком близко, переместим текущий бот подальше от другого бота + dx = self.rect.centerx - bot.rect.centerx + dy = self.rect.centery - bot.rect.centery + self.rect.x += dx / distance * min_distance / 2 + self.rect.y += dy / distance * min_distance / 2 + class Wall(pygame.sprite.Sprite): @@ -403,7 +411,6 @@ while menu_active: clock = pygame.time.Clock() running = True paused = False # Track pause state - while running: # Handle events for event in pygame.event.get():