Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2022, 11:14   #1
DenSawer
Новичок
Джуниор
 
Регистрация: 10.02.2022
Сообщений: 1
Вопрос Как задать случайное пояление врагов в pygame

в коде я задал врага и его отрисовку, для их случайного появления я использую таймер
Код:
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()
DenSawer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прервать воспроизведение звуковой дорожки в pygame fgdfgdf Python 1 30.07.2020 17:39
Спавн врагов - сделать делей SergGoFun Общие вопросы по Java, Java SE, Kotlin 0 19.03.2016 00:10
Flash Движение врагов Yachiry Общие вопросы Web 0 12.04.2014 21:39
Delphi. Проверить, если файл с таким именем существует то задать новое случайное имя delfin07 Помощь студентам 9 04.06.2011 23:21
Как генирируеться случайное число? Altera Общие вопросы Delphi 8 20.04.2008 18:20