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)
また、アイテムを作成するための初期化子を備えたこのクラスもあります。
class Item:
def __init__(self, type, posX, posY, size, owner):
self.type = type
self.posX = float(posX)
self.posY = float(posY)
self.size = size
self.owner = owner
これらは私の定義です。
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 は、distanceToRing が 1,000,000 の場合に最も多く、distanceToRing が 10,000 の場合に最も少なくなるようにしたいと考えています。また、ITEM_SIZE_LARGE はその反対であり、ITEM_SIZE_MEDIUM は中間でより一般的であることも望んでいます。アイテムの種類については、ITEM_TYPE_FIRE と ITEM_TYPE_ICE が 1,000,000 に向かって最も一般的である必要があります。ITEM_TYPE_WIND と ITEM_TYPE_EARTH は 10,000 に向かってより一般的なはずです。
質問が多いのは承知していますが、このような配布の処理方法を提示して説明していただければ、理解できると思います。また、Python のスキルが不足していることをあらかじめお詫び申し上げます。ベストプラクティスやいくつかの基本を理解するのに十分なほど長く使用していません。
お時間をいただきありがとうございます、ブライアン