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 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():