更新 誰かがおそらくこの方法で投稿したことで私にハンマーを落とすでしょうが、コメントにはこれをカバーするのに十分なスペースがなく、フォローアップであなた自身の質問に答えないように具体的に言っているので、ここに行きます...
皆さんが話していたように、サイコロクラスを作成しました。
class dice():
def __init__(self, sides, number):
self.sides = sides
self.number = number
def roll(self):
return random.randint(1, self.sides)
しかし、number
議論は何もしていません。
def att():
d = dice(20, 2)
base = d.roll()
if base == 1:
print 'Miss!'
elif base == 20:
crit = d.roll()
if crit < 10:
print 'Hit!'
else:
print 'Critical hit!\n'
effect = super_crit()
else:
print base
複数のサイコロを取得する唯一の方法は、次のようにすることです。
def initiative():
d = dice(10, 1)
ini = d.roll(), d.roll()
print ini
私も試しました:
def initiative():
d = dice(10, 2)
d.sides = 10
d.number = 2
ini = d.roll()
print ini
それは私には冗長に見えますが、Type Error:
なしで引数が少なすぎるために を取得しますdice(10, 2)
。どの方法を使用しても、結果は同じです。何か不足していますか?
元の投稿
私は Python 2.7 でクラスを使用する方法を学んでおり、演習としてテキストベースの RPG の戦闘モジュールを作成しています。結果と効果を決定するために、古い学校のサイコロを振る方法を使用します。ロールは、ヒットまたはミスを決定します。ナチュラル 20 がロールされた場合、別のロールでそれがクリティカル ヒットであったかどうかが判断されます。クリティカル ヒット = TRUE の場合、別のサイコロを振って、影響を受ける体の部分を決定します。体の各部位は、辞書で 1 ~ 12 の数字と対になっています。影響を受ける部分に応じて、3 つの出力メッセージが考えられます。私の問題は、特定の部分ではなく、値のリスト全体が返されることです。ここで何が間違っていますか?
はい、私はこれが超オタクであることを知っています。はい、出力が不十分なのはわかっていますが、それはすべてプレースホルダーです。
import sys, random
#dice generator
class dice():
def d4(self):
number = random.randint(1, 4)
return number
def d6(self):
number = random.randint(1, 6)
return number
def d10(self):
number = random.randint(0, 9)
return number
def d12(self):
number = random.randint(1, 12)
return number
def d20(self):
number = random.randint(1, 20)
return number
def d100(self):
number = random.randint(0, 99)
return number
#critical hit effect generator
class super_crit(dice):
def __init__(self):
roll = dice()
loc = roll.d12()
hit_loc = {1 : 'Head',
2 : 'Left Arm',
3 : 'Right Arm',
4 : 'Left Leg',
5 : 'Right Leg',
6 : 'Left Hand',
7 : 'Right Hand',
8 : 'Left Foot',
9 : 'Right Foot',
10 : 'Chest',
11 : 'Stomach',
12 : 'Body'}
part = hit_loc.values()
for w in part:
if loc <= 9:
print w, "has been severed!"
elif loc == 10:
print "You sink your blade into his", w, "and pierce the heart!"
elif loc == 11:
print "You slash him across the", w, "and eviscerate him!"
elif loc == 12:
print "You shred the enemy's", w, "to ribbons!"
class attackRoll(dice):
pass
#Attack function
def att():
roll = attackRoll()
base = roll.d20()
if base == 1:
print 'Miss!'
elif base == 20:
crit = roll.d20()
if crit < 10:
print 'Hit!'
else:
effect = super_crit()
else:
print base
def main():
att()
if __name__ == '__main__':
main()