Update bla.py
parent
4c4321c88b
commit
4692f38118
75
bla.py
75
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():
|
||||
|
|
Loading…
Reference in New Issue