в коде я задал врага и его отрисовку, для их случайного появления я использую таймер
Код:
if timer > 0:
timer -= 1
else:
enemie()
timer = 30
враг появляется, но через секунду игра крашиться. Подскажите, что делать?
Вот код игры:
Код:
import pygame
import time
from random import randint
import random
WIDTH = 1280
HEIGHT = 720
FPS = 30
# Задаем цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# Создаем игру и окно
pygame.init()
pygame.mixer.init()
win = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
# название на окне
pygame.display.set_caption("New Hitman Games")
walkRight = pygame.image.load('D:/Python/Моя первая задумка игры/Выстрел_Вправо.png')
walkLeft = pygame.image.load('D:/Python/Моя первая задумка игры/Выстрел_Влево.png')
playerStand = pygame.image.load('D:/Python/Моя первая задумка игры/Стоит.png')
fon = pygame.image.load('D:/Python/Моя первая задумка игры/БФон.png')
Pula = pygame.image.load('D:/Python/Моя первая задумка игры/Пуля.png')
# параметры игрока и его положение
x = 500
y = 405
widht = 215
height = 252
speed = 7
left = False
right = False
animCount = 0
class snaryad():
def __init__(self, x, y, radius, color, facing):
# self - обязательный параметр , х и у - позиция, radius - радиус,
#color - цвет, facing - в какую сторону летит, vel - скорость
self.x = x
self.y = y
self.facing = facing
self.vel = 16 * facing
def draw(self, win):
win.blit(Pula, (self.x, self.y))
class enemie():
def __init__(self):
self.x = 0 #randint(0, 1280)
self.y = 405
self.vel = 3
self.rect = pygame.Rect(self.x, self.y, 215, 252)
enemies.append(self)
def walking(self):
self.x += self.vel
self.rect.x = self.x
if self.rect.top > WIDTH: enemie.remove(self)
def draw(self):
pygame.draw.rect(win, (0,255,0), self.rect)
def drawPlayer():
global animCount
#win.blit(fon, (0,0))
win.fill(WHITE)
if animCount + 1 >= 32:
animCount = 0
if left:
win.blit(walkLeft, (x, y))
animCount += 1
elif right:
win.blit(walkRight, (x, y))
animCount += 1
else:
win.blit(playerStand, (x, y))
for bullet in bullets:
bullet.draw(win)
for enemie in enemies:
enemie.draw()
pygame.display.update()
run = True
bullets = []
enemies = []
timer = FPS
while run:
clock.tick(FPS) # выполнение цикла - кадры в секунду фпс (100 = 0.1 секунду)
for event in pygame.event.get():
if event.type == pygame.QUIT: # делаем так чтобы не закрывалось само
run = False
if event.type == pygame.KEYDOWN: # выстрелы влево и вправо
if event.key == pygame.K_LEFT:
facing = -1
left = True
right = False
lastMove = "left"
if len(bullets) < 8:
bullets.append(snaryad(round(x + widht // 11), # положение по х и у,
round(y + widht / 1.6), 5, (255,0,0), facing)) # ,размер снаряда, цвет
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
facing = 1
left = False
right = True
lastMove = "right"
if len(bullets) < 8:
bullets.append(snaryad(round(x + widht // 0.85), # положение по х и у,
round(y + widht / 1.6), 5, (255,0,0), facing)) # ,размер снаряда, цвет
else:
left = False
right = False
animCount = 0
if timer > 0:
timer -= 1
else:
enemie()
timer = 30
# враги
for enemie in enemies:
enemie.walking()
# снаряд
for bullet in bullets:
if bullet.x < 1280 and bullet.x > 0:
bullet.x += bullet.vel
else:
bullets.pop(bullets.index(bullet))
drawPlayer()
pygame.quit()