我正在创建一个基于文本的游戏,尝试添加刀传递到森林时遇到问题。我的想法是,游戏玩家需要使用'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.')
一种简单的方法是建立一个数据结构来容纳所有游戏位置,然后维持玩家位置,这是对该结构的某种索引。我试图使这个答案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_location
为2
,则可用对象将为[ "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_location
为1
),此位置文本将变为:
在海滩上。有:刀
然而,另一个退出列表可以控制玩家从当前位置移动的方式,而另一个列表可以指示需要哪个“键”。因此,如果玩家在位置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