2013-12-09 4 views
0

Я начинаю программировать игру на языке 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

Если вы хотите иметь n бомбы на уровне n попробовать это:

for _ in range(level): #level goes here 
    bomb = Bomb() 
    bomb.rect.x = random.randrange(640) 
    bomb.rect.y = random.randrange(-200, -20) 
    BombGroup.add(bomb) 

Также этот фрагмент:

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 

такой же, как этот фрагмент кода:

self.rect.y += (level + 2) if level < 8 else 10 

сейчас с вашей проблемой спрайта, я не могу вам помочь, поскольку я никогда не использовал pygame.

+0

Благодарим вас за ответ. Я попытался отредактировать диапазон бомб с (уровнем). Это, к сожалению, не сработало, я все равно получаю одну бомбу на уровне 1, но когда она ничего не увеличивает, ничего не происходит. Спасибо за совет падения скорости! Я буду использовать это. С уважением, HJ. – user2977298

+0

@ user2977298 О проблеме с бомбой: я не знаю, как реализована «Бомба», как реализована «BombGroup» и как взаимодействуют с вашей игрой. Мой код генерирует «уровень» - раз объект бомбы в случайных координатах, а затем добавляет его в группу бомб. – Hyperboreus

Смежные вопросы