-5

ユーザーがサイコロを振る方法を使用して統計を作成できるようにする短いプログラムを作成する必要があります。2 つの異なるステータス、Strength 属性、および Skill 属性を作成する必要があります。これらを作成するには、12 面のサイコロと 4 面のサイコロを振ります。次に、12 面ダイスの値を、Strength 属性の 4 面ダイスで割り、これを Skill 属性に対して繰り返します。これですべてです。これについてどこに行くべきかわかりません。助けていただければ幸いです。

4

2 に答える 2

2

私は間違いなくstdlib hereのランダムモジュールを見ていきます

次に、次のようなことができます。

import random

random.randint(1,12) 
# which produces random number between 1-12

それでうまくいくはずです。

于 2013-02-17T03:19:10.807 に答える
0

短い答えは(myusuf3が指摘したように):

stat = random.randint (1, 12) / random (1, 4)

また

stat = random.randint (1, 12) // random (1, 4)

分数が必要かどうか。

ここで、ゲームの後半で (攻撃ロール、スキルロールなどのために) 異なる数の面 (d4、d6、d8、d10) などでより多くのダイスを使用する場合は、独自のダイスクラスを作成できます (これは確かにあなたの例はやり過ぎですが、アイデアを提供するためだけにスケッチします):

class Die:
    def __init__ (self, sides):
        self.sides = sides

    def roll (self, times = 1):
        return sum (random.randint (1, self.sides) for _ in range (times) )

したがって、最初にサイコロをインスタンス化できます。

d4 = Die (4)
d6 = Die (6)
d10 = Die (10)

たとえば、5d10 でダメージ ロールを行う場合は、次のように入力するだけです。

damageRoll = d10.roll (5)

--

このアイデアをさらに発展させるために、ADnD ダメージ表記を使用して独自の武器クラスを作成できます (例: 2d4+1 の意味、4 つの面を持つ 2 つのサイコロを転がし、結果を合計して 1 を加算)。

import random
import re

class Weapon:
    def __init__ (self, name, dmg):
            self.name = name
            self.dmg = dmg
            self.dice, self.sides, mod, iMod = re.match ('(\\d*)d(\\d+)(?:([+-])(\\d+))?', dmg).groups ()
            self.dice = int (self.dice) if self.dice else 1
            self.sides = int (self.sides)
            self.mod = 0 if not iMod else int (iMod) * (-1 if mod == '-' else 1)

    @property
    def damage (self):
        return max (0, sum (random.randint (1, self.sides) for x in range (self.dice) ) + self.mod)

w = Weapon ('Bad ass katana', '4d10+8')
for i in range (10):
    print (w.damage)
于 2013-02-17T03:49:30.707 に答える