2016-11-24 3 views
-1

Я делаю игру, и она имеет разные плитки. Но я столкнулся с проблемой в моей основной игре в цикле.Проблема с циклом while в игре.

def play(): 
    player = player1() 
    while True: 
     room = ClubWorld.tile_at(player.x, player.y) 
     print(room.intro_text()) 
     choose_action(room, player) 

Пример плитки в моей игре:

class GirlTile(MapTile): 
    def __init__(self,x,y): 
     self.meet_girl = Girls() 
     super().__init__(x, y) 

    def intro_text(self): 
     return "Hey whats up, my name is {}".format(self.meet_girl.name) 

Этот цикл продолжает идти до тех пор, как я на игровом плитке. Он создает доступные действия и позволяет другим функциям знать вашу позицию. он также выводит текст ввода в виде фрагментов, где моя проблема. Я хочу, чтобы игра выводила только вводный текст при входе в плитку, как только это произойдет, я хочу, чтобы он отображал доступные действия. Предложения?

+0

что проблема с петлей здесь? с частью кода, которую вы предоставили, трудно сделать какие-либо предложения. –

+0

Был надеяться, что через один цикл была задействована все три функции, а затем только петля через комнату и выберите_action до тех пор, пока комната не изменится. Запрашивая много, я знаю –

+0

'if new_room: print (room.intro_text())', и теперь вам нужно найти способ распознавания новой комнаты - вы можете использовать ie player.old_x, player.old_y'. Или 'old_room', чтобы помнить предыдущую комнату. – furas

ответ

1

Вы можете держать previous_room и сравнить с room:

def play(): 
    player = player1() 
    previous_room = None 
    while True: 
     room = ClubWorld.tile_at(player.x, player.y) 
     if room != previous_room: 
      print(room.intro_text()) 
      previous_room = room 
     choose_action(room, player) 

Или держать игрока предыдущее положение previous_x, previous_y и сравнить с новым положением

def play(): 
    player = player1() 
    previous_x = None 
    previous_y = None 
    while True: 
     if player.x != previous_x or player.y != previous_y : 
      room = ClubWorld.tile_at(player.x, player.y) 
      print(room.intro_text()) 
      previous_x = player.x 
      previous_y = player.y 
     choose_action(room, player) 
+0

спасибо! –

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