2017-08-10 66 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. 
相关问题