Я начинаю программировать игру на языке python, используя pygame. Это игра на основе курсора, в которой вы используете мышь. Объекты падают с верхней части экрана, и цель состоит в том, чтобы поймать их. Я использую функцию диапазона, чтобы определить, сколько объектов упадет. У меня есть 2 вопроса с моим кодом, с которыми мне хотелось бы получить помощь. Я отправлю здесь код:Python: проблемы с циклами и диапазонами
time = 150
level = 1
score = 0
class Bomb(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = load_image("Bomb.png")
screen = pygame.display.get_surface()
self.rect = self.image.get_rect()
def bomb_spawn(self):
self.rect.x = random.randrange(640)
self.rect.y = random.randrange(-200, -0) # Respawns at the top
def update(self):
if self.rect.y > 805: # Respawns if colliding with bottom screen
self.bomb_spawn()
if self.rect.x < 105: # I do have a border/margin so if the object spawns outside
self.bomb_spawn() # It will respawn
if level == 1:
self.rect.y += 3 # The falling speed of the object increases for each level
elif level == 2:
self.rect.y += 4
elif level == 3:
self.rect.y += 5
elif level == 4:
self.rect.y += 6
elif level == 5:
self.rect.y += 7
elif level == 6:
self.rect.y += 8
elif level == 7:
self.rect.y += 9
else:
self.rect.y += 10
if time <= 1: # Game over
self.kill()
class Clocks(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = load_image("Clock.png")
screen = pygame.display.get_surface()
self.rect = self.image.get_rect()
def clock_spawn(self):
self.rect.x = random.randrange(640)
self.rect.y = random.randrange(-200, -0)
def update(self):
if time < 100 and time >= 0: # Required for my current Clock range function
if self.rect.y > 805:
self.clock_spawn()
if self.rect.x < 105:
self.clock_spawn()
if level == 1:
self.rect.y += 3
elif level == 2:
self.rect.y += 4
elif level == 3:
self.rect.y += 5
elif level == 4:
self.rect.y += 6
elif level == 5:
self.rect.y += 7
elif level == 6:
self.rect.y += 8
elif level == 7:
self.rect.y += 9
else:
self.rect.y += 10
if time <= 1:
self.kill()
while done == False:
time -= 0.150 # timer
level = int(score/2000) + 1 # new level when you reach 2000 points.
Теперь я дойду до сути, у меня есть проблемы с диапазоном и циклом. Прежде всего, часы, я хочу, чтобы часы появлялись, только если таймер находится ниже 100. Мне удалось это сделать, но у меня осталась одна проблема. На данный момент я использую clock.rect.x = 2000 и то же самое для rect.y. Это означает, что они появляются за пределами моего экрана. Я хочу, чтобы спрайт ушел/удалился/был убит, а затем он возрождается, когда таймер находится ниже 100. Я попытался выполнить pygame.sprite.Sprite.kill и такие команды, однако это, похоже, не сработало.
for i in range(1):
clocks = Clocks()
if time > 100:
clocks.rect.x = 2000 # spawns outside my screen, I want to change this.
clocks.rect.y = 2000
elif time < 100:
clocks.rect.x = random.randrange(640)
clocks.rect.y = random.randrange(-200, -20)
ClockGroup.add(clocks)
Дальше У меня проблема с моим диапазоном бомб. Я хочу увеличить количество диапазона для каждого нового уровня. Пример: на уровне 1 будет 1 бомба, на уровне 2 будет 2 бомбы и т.д.
for i in range(1):
bomb = Bomb()
bomb.rect.x = random.randrange(640)
bomb.rect.y = random.randrange(-200, -20)
BombGroup.add(bomb)
#I have tried some methods but none of them were working.
#Here is what I went with
if level == 2: # This is where I am at, I don't know how to proceed.
Ссылка на полный код: http://pastebin.com/cpQwi2fR Любая помощь будет принята с благодарностью. С уважением, HJ.
Благодарим вас за ответ. Я попытался отредактировать диапазон бомб с (уровнем). Это, к сожалению, не сработало, я все равно получаю одну бомбу на уровне 1, но когда она ничего не увеличивает, ничего не происходит. Спасибо за совет падения скорости! Я буду использовать это. С уважением, HJ. – user2977298
@ user2977298 О проблеме с бомбой: я не знаю, как реализована «Бомба», как реализована «BombGroup» и как взаимодействуют с вашей игрой. Мой код генерирует «уровень» - раз объект бомбы в случайных координатах, а затем добавляет его в группу бомб. – Hyperboreus