Update bla.py

main
Artjoms Marians Ņečajevs 2024-03-03 20:01:36 +00:00
parent 4c4321c88b
commit 4692f38118
1 changed files with 41 additions and 34 deletions

75
bla.py
View File

@ -2,14 +2,13 @@ import pygame
import random import random
import math import math
# Определение констант # Определение констант
SCREEN_WIDTH = 1920 SCREEN_WIDTH = 1920
SCREEN_HEIGHT = 1080 SCREEN_HEIGHT = 1080
PLAYER_WIDTH = 100 PLAYER_WIDTH = 90
PLAYER_HEIGHT = 150 PLAYER_HEIGHT = 135
LOH_WIDTH = 300 LOH_WIDTH = 150
LOH_HEIGHT = 250 LOH_HEIGHT = 100
BULLET_SIZE = 20 BULLET_SIZE = 20
FPS = 60 FPS = 60
BULLET_SPEED = 6 BULLET_SPEED = 6
@ -26,6 +25,7 @@ pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), flags=pygame.FULLSCREEN) screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), flags=pygame.FULLSCREEN)
pygame.display.set_caption("Танчики") pygame.display.set_caption("Танчики")
# Загрузка и воспроизведение музыки # Загрузка и воспроизведение музыки
pygame.mixer.music.load('music.mp3') pygame.mixer.music.load('music.mp3')
pygame.mixer.music.play(-1) # Параметр -1 означает зацикливание музыки 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)) 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)] 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)] 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)) 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.original_image = loh_image
self.image = self.original_image self.image = self.original_image
self.rect = self.image.get_rect(center=(x, y)) self.rect = self.image.get_rect(center=(x, y))
self.angle = random.randint(0, 360) # Случайный начальный угол поворота self.angle = 0 # Угол поворота бота
self.last_fire_time = pygame.time.get_ticks() # Время последнего выстрела self.speed = BOT_SPEED # Скорость бота
self.rotate_delay = random.randint(100, 500) # Начальная задержка перед поворотом
self.rotate_timer = 0
def update(self): def update(self):
self.move_random() # Находим координаты игрока
self.rotate_random() player_x, player_y = player.rect.center
self.check_bounds()
# self.shoot_random()
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) angle_rad = math.radians(self.angle + 270)
self.rect.x += BOT_SPEED * math.cos(angle_rad) self.rect.x += self.speed * math.cos(angle_rad)
self.rect.y += BOT_SPEED * math.sin(angle_rad) self.rect.y += self.speed * math.sin(angle_rad)
def rotate_random(self): # Проверяем, не выходит ли бот за границы экрана
# Случайный поворот бота self.check_bounds()
self.rotate_timer += 1
if self.rotate_timer >= self.rotate_delay: # Проверяем столкновения с другими ботами
self.angle += random.randint(-10, 10) # Случайный поворот self.check_bot_collisions()
self.rotate_delay = random.randint(100, 500) # Новая случайная задержка перед поворотом
self.rotate_timer = 0
def check_bounds(self): def check_bounds(self):
# Проверка выхода за границы экрана # Проверка выхода за границы экрана
@ -245,14 +246,21 @@ class Bot(pygame.sprite.Sprite):
elif self.rect.bottom > SCREEN_HEIGHT: elif self.rect.bottom > SCREEN_HEIGHT:
self.rect.bottom = SCREEN_HEIGHT self.rect.bottom = SCREEN_HEIGHT
def shoot_random(self): def check_bot_collisions(self):
# Vыстрел в направлении дула # Проверяем столкновения с другими ботами
current_time = pygame.time.get_ticks() for bot in tanks:
if current_time - self.last_fire_time > random.randint(1000, 5000): if bot != self:
bullet = BotBullet(self.rect.centerx, self.rect.centery, self.angle + 90) # Стрельба в направлении дула # Проверяем расстояние между ботами
all_sprites.add(bullet) distance = math.sqrt(
bullets.add(bullet) (self.rect.centerx - bot.rect.centerx) ** 2 + (self.rect.centery - bot.rect.centery) ** 2)
self.last_fire_time = current_time 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): class Wall(pygame.sprite.Sprite):
@ -403,7 +411,6 @@ while menu_active:
clock = pygame.time.Clock() clock = pygame.time.Clock()
running = True running = True
paused = False # Track pause state paused = False # Track pause state
while running: while running:
# Handle events # Handle events
for event in pygame.event.get(): for event in pygame.event.get():