如何在列表中附加项目以供以后在If陈述中使用

问题描述 投票:0回答:1

我正在创建一个基于文本的游戏,尝试添加刀传递到森林时遇到问题。我的想法是,游戏玩家需要使用'C'选项将Knife添加到广告资源中。并在Knife选项中使用该'B'传递到目录林。有什么解决办法吗?

a1 = input('What you want to do? \nCheck some rock around you(A) \nGo to the Forest(B) \nSee around of the beach in the island(C) \n\n')
obj = []
def addknife():
    obj.append('Knife')
if a1.capitalize() == 'A':
    print()
    print('It is nothing else than a rock.')
elif a1.capitalize() == 'C':
    print()
    print('Walking for the beach, you encountered a Knife.')
    addknife()
    print(obj)
elif a1.capitalize() == 'B':
    if 'Knife' in obj:
        print('You can go to the forest.')
    else:
        print('The plants do not allow you to pass.')
python-3.x if-statement pygame append
1个回答
0
投票

一种简单的方法是建立一个数据结构来容纳所有游戏位置,然后维持玩家位置,这是对该结构的某种索引。我试图使这个答案really很简单,所以我省去了一些更复杂的细节,这些细节可能会使它更有效。

也许只是从位置列表开始,然后是该列表的整数索引:

#             index 0                   index 1         index 2               index 3
locations = [ "Rocky End of The Beach", "On The Beach", "Edge of The Forest", "In The Forest" ]
player_location = 0

因此,开始时可以显示locations[ player_location ],这是“海滩的岩石尽头”。

类似于locations,也许可能存在一个放置在每个位置的对象的列表:

objects = [ [ ], [ "Knife" ], [ "Coconut", "Banana" ], [ ] ]

显然,我们有一个列表列表,因此,如果player_location2,则可用对象将为[ "Coconuts", "Bananas" ]

为了向玩家显示位置的描述,现在它是位置和对象的组合:

def showLocation( player_location ):
    global locations, objects
    # show the location description
    print( locations[ player_location ], end='. ' )
    # show the location's objects
    if ( len( objects[ player_location ] ) > 0 ):
        print( "There is: " )
        for item in objects[ player_location ]:
            print( item, end=", " )
    print("") # end-of-line

因此,在“海滩”位置(player_location1),此位置文本将变为:

在海滩上。有:刀

然而,另一个退出列表可以控制玩家从当前位置移动的方式,而另一个列表可以指示需要哪个“键”。因此,如果玩家在位置0,他们可以移动到1 =海滩,2 =森林边缘。如果玩家“在沙滩上”,他们只能返回index = 0(多岩石的一端),依此类推。

exits = [ [ 1, 2 ], [ 0 ], [ 0, 2 ], [ 1 ] ]   # numbers of joined locations
keys  = [ [ ], [ ], [ ], [ "Knife" ] ]         # objects needed to enter

keys指示在允许玩家进入该位置之前,需要将其保留在玩家手中。因此,对于前三个位置,不需要任何对象。但是要进入森林(只能从“森林边缘”进入),玩家需要拥有“刀”。

这样的简单列表系统可以定义一组有关您的位置的规则。然后相同的代码就会循环播放,向播放器询问命令。将命令与位置进行比较。因此,例如,仅当objects列表在该特定player_location索引中包含“香蕉”项时,“获取香蕉”才有效。

从一组简单的规则数据开始,甚至可能只是位置名称,并一直向其中添加越来越多的功能。

写一些伪代码:

# Do Forever:
#     Show player the location description
#     Get input from player
#     if a movement command
#         if player has key-object to move, or no object needed
#             change the `player_location` index
#         else
#             Show "You need object XXX" to player
#     if a get/drop command and item valid
#         change the player & location objects list   
© www.soinside.com 2019 - 2024. All rights reserved.