更新 有人可能会因为我以这种方式发帖而对我下手,但评论中没有足够的空间来涵盖这一点,他们特别告诉你不要通过后续回答来回答你自己的问题,所以这里......
我已经创建了你们所说的骰子类。
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 配对。根据受影响的部分,有三种可能的输出消息。我的问题是返回整个值列表而不是特定部分。我在这里做错了什么?
是的,我知道这是超级书呆子。是的,我知道输出很蹩脚,但它都是占位符。
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()