2017-08-10 68 views
2

我試圖找到一種方法將值(房間)增加到列表中的下一項(地牢),以便我可以在文本冒險中創建房間的隨機實例。將變量迭代到下一個列表項

def dungeon_generator(): #used to generate random dungeon order 
    dungeon = random.sample(range(2, 19), 8) 
    dungeon.append(20) #used to add Boss 
    dungeon[:0]=[1] #used to add Entrance 

僞代碼:

room = dungeon[0] #i.e. room == 1 
while room != 0 

    if room == 1: 
     do things in room 
     room finished 
     room = NEXT number in dungeon list 

    elif room == 2 
     do things in room 
     room finished 
     room = NEXT number in dungeon list 

etc 

    elif room == 0 
     game over 

任何人都可以提出來讀取地牢列表中的下一個項目的最佳方法?因爲我已經使用random.sample,如果有幫助,列表項將是唯一的。

+1

你可能要考慮,而不必處理數字和長期的if/elif的塊具有與方法'do_things_in_room'(或更好的名字)一套房間類。 –

回答

1

使用變量來訪問地牢。

roomNumber = 1 
room = dungeon[roomNumber] 

if room == 1: 
    do things in room 
    roomNumber += 1 

etc... 

這樣,您不需要手動跟蹤索引。

+0

雖然這不只是增加房間號碼?是否應該用roomNumber + = 1來增加從房間讀取的值?即地牢[0],地牢[1],地牢[2]等。如果我遠離商標,道歉,我對Python很新穎。 – Codebyalex

+0

糟糕,你是對的。錯字。編輯以反映我原本的意思。 – blake

2
import random 

def dungeon_generator(): #used to generate random dungeon order 
    dungeon = random.sample(range(2, 19), 8) 
    dungeon.append(20) #used to add Boss  
    dungeon[:0]=[1] #used to add Entrance 
    return dungeon 


room = 0 #i.e. room == 1 

dungeon = dungeon_generator(); 

while room < len(dungeon) and dungeon[room] != 0: 
    if dungeon[room] == 1:   
     # do something 
     print (dungeon[room]) 
    elif dungeon[room] == 2: 
     # do something 
     print (dungeon[room]) 
    room = room + 1 
0

您可以簡單地使用for循環遍歷房間號碼。

dungeon = [1, 3, 2, 20] 

for room in dungeon: 
    if room == 1: 
     print('room 1') 
    elif room == 2: 
     print('room 2') 
    elif room == 3: 
     print('room 3') 
    # etc. 

如果你想嘗試的東西票友,您可以爲不同的房間定義函數(或類),然後添加這些功能到dungeon列表,而不是數量。

import random 

def room1(): 
    print('In room1.') 

def room2(): 
    print('In room2.') 

def room3(): 
    print('In room3.') 

def intro_room(): 
    print('Intro') 

def boss_room(): 
    print('Boss') 

def dungeon_generator(): 
    """Create a list of function objects (the rooms).""" 
    dungeon = [intro_room] 
    dungeon += random.sample((room1, room2, room3), 2)  
    dungeon.append(boss_room) 
    return dungeon 


dungeon = dungeon_generator() 

for room in dungeon: # Iterate over the room functions. 
    room() # Now call the current room function. 
相關問題