我在Twisted的帮助下用Python编写一个游戏服务器。我有一个为游戏生成地图的Map类。在我的游戏中,我有一个中心点,每向外一定距离都有一圈物品。我想随机化的项目,但也权重项目,使他们更常见的外部地图。目前,这是我构建映射的代码,更改了一些变量和函数名:
def generate():
centralItem = Item(ITEM_TYPE_GOLD, 0, 0, ITEM_SIZE_GIANT, None)
self.items.append(centralItem)
distance = 10000
numberOfRings = 100
for ring in range(numberOfRings):
itemsInRing = (ring + 1) * 100
distanceToRing = (ring + 1) * distance
for item in range(itemsInRing):
angle = math.radians(float(360) / itemsInRing) * item
xPos = math.cos(angle) * distanceToRing
yPos = math.sin(angle) * distanceToRing
# set variable itemSize using method described above (details below)
# set variable itemType using method described above (details below)
我还有这个类,它有一个用于创建项的初始值设定项。在
^{pr2}$这是我的定义。在
ITEM_TYPE_FIRE = 0
ITEM_TYPE_ICE = 1
ITEM_TYPE_WIND = 2
ITEM_TYPE_EARTH = 3
ITEM_TYPE_GOLD = 4
ITEM_SIZE_SMALL = 200
ITEM_SIZE_MEDIUM = 350
ITEM_SIZE_LARGE = 500
ITEM_SIZE_GIANT = 1000
基于generate方法中的distanceToRing,我想让ITEM_SIZE_SMALL在距离为1000000时最常见,在distanceToRing为10000时最不常见。我也希望它的大小与它的对立面相反,中间的介质更常见。至于物品类型,我需要的物品类型是1000000的最常见物品。项_型风和项_型土应更常见于10000。在
我知道有很多问题要问,但如果你能提出一种处理这种分配的方法并加以解释,我想我可以解决。另外,我提前为我缺乏Python技巧而道歉。我使用它的时间还不够长,不足以理解最佳实践甚至一些基础知识。在
谢谢你的时间, 布莱恩
显然,你需要确切地决定每种物品类型/尺寸的概率与距离的关系。最简单的答案是在你喜欢的地方画一个三角形,它的峰值在你喜欢的地方,范围是一致的(我要说10000到1000000),如下所示:
这将给你10000的大部分小物品,大部分是1000000的大物品,中间有大约25/50 / 25的分割物。也许你不喜欢这样做,但我没办法知道。当构建随机进程时,可能需要一些尝试和错误才能找到您喜欢的东西。(从技术上讲,由于505000不是一个有效的距离,中间权重将在990000处达到峰值,但我认为这并不重要,值得我花时间修正,尤其是因为您可能不喜欢这种分布。)为了选择一个给定权重的项目,我会做如下操作:
^{pr2}$相关问题 更多 >
编程相关推荐