根据位置设置玩家的主要区域 - Python
Set player's main region depending on location - Python
我是 Python 的新手,我可以使用一些基于文本的小型游戏(实际上是 "Risk" 棋盘游戏的一个版本)的建议。我的位置系统有问题,因为我想将游戏划分为多个区域,而在这些区域中会有多个位置。我必须这样做,因为一开始有些地区不可用。
不管怎样,到目前为止我做了:
区域列表(名称是程序生成的):
regionList = [casia, lorus, mehin]
3 个区域列表,例如:
casia = ["casia", "town1", "town2", "town3"]
(为了代码其他部分的实际方便,我似乎不得不将区域名称留在列表的开头)
和 1 个包含玩家初始位置的列表,当用户输入新位置时更新:
playerPos = [(regionList[0])[0], (regionList[0])[1]]
有没有办法只输入位置名称(它们都是不同的)并自动更新位置列表中的区域?我还没有找到从列表的元素中获取列表名称的方法,但这能解决问题吗?
此外,如果有更有效的组织方式,请告诉我,如果问题需要进一步说明,请告诉我。
非常感谢!
对于足够少、足够小的列表,您可以使用暴力解决方案:
def find_location(location_name):
for region in regionList:
if location_name in region:
return [region[0], location_name]
# if we get there the location name was found nowhere
raise ValueError('Location {!r} unknown'.format(location_name))
如果出于您的目的,区域的数量或长度过度减慢了这种蛮力操作,您可以一次性通过构建字典用作 "index":
loc2reg = {}
def populate_loc2reg():
for region in regionList:
for location_name in region:
loc2reg[location_name] = [region[0], location_name]
这有点多余,因为它再次存储了位置名称,但它确实使事情变得非常快:
def find_location_fast(location_name):
try: return loc2reg[location_name]
except KeyError:
raise ValueError('Location {!r} unknown'.format(location_name))
这里有几种可能的变体,我只是为初学者提出最简单的代码。
我是 Python 的新手,我可以使用一些基于文本的小型游戏(实际上是 "Risk" 棋盘游戏的一个版本)的建议。我的位置系统有问题,因为我想将游戏划分为多个区域,而在这些区域中会有多个位置。我必须这样做,因为一开始有些地区不可用。
不管怎样,到目前为止我做了:
区域列表(名称是程序生成的):
regionList = [casia, lorus, mehin]
3 个区域列表,例如:
casia = ["casia", "town1", "town2", "town3"]
(为了代码其他部分的实际方便,我似乎不得不将区域名称留在列表的开头)
和 1 个包含玩家初始位置的列表,当用户输入新位置时更新:
playerPos = [(regionList[0])[0], (regionList[0])[1]]
有没有办法只输入位置名称(它们都是不同的)并自动更新位置列表中的区域?我还没有找到从列表的元素中获取列表名称的方法,但这能解决问题吗?
此外,如果有更有效的组织方式,请告诉我,如果问题需要进一步说明,请告诉我。
非常感谢!
对于足够少、足够小的列表,您可以使用暴力解决方案:
def find_location(location_name):
for region in regionList:
if location_name in region:
return [region[0], location_name]
# if we get there the location name was found nowhere
raise ValueError('Location {!r} unknown'.format(location_name))
如果出于您的目的,区域的数量或长度过度减慢了这种蛮力操作,您可以一次性通过构建字典用作 "index":
loc2reg = {}
def populate_loc2reg():
for region in regionList:
for location_name in region:
loc2reg[location_name] = [region[0], location_name]
这有点多余,因为它再次存储了位置名称,但它确实使事情变得非常快:
def find_location_fast(location_name):
try: return loc2reg[location_name]
except KeyError:
raise ValueError('Location {!r} unknown'.format(location_name))
这里有几种可能的变体,我只是为初学者提出最简单的代码。