import random
def main():
vals=['ST','CON','LK','DEX','IQ','CHR','SPD','MON']
ch={}
for val in vals:
ch[val]=int(three_dices())
bonus=cal_bonus(ch)
print ch,bonus
def cal_bonus(ch) :
vals=['ST','LK','DEX']
bonus=0
for val in vals :
if ch[val]>12 :
bonus=bonus+ch[val]-12
elif ch[val]<9 :
bonus=bonus+ch[val]-9
return bonus
def dice():
random.seed()
return random.randint(1, 6)
def three_dices():
s=0
for num in [0,1,2]:
s=s+dice()
return s
main()
2015年1月8日木曜日
ついカッとして作った
今は反省しています...。...辞書の使い方の練習、とか(汗)。
2014年12月24日水曜日
ヘルスライスでバーサーク
「『カザンの闘技場』でもらえるヘルスライス(42D)でバーサークするとどの位ヒットが出るのか?」という子供の頃の疑問に答えるスクリプトを誘惑に負けて作成。関数を再帰的に使うことの練習ということで(汗)。
100万回トライして
平均 : 357
標準偏差 : 23
最大 : 501
最小 : 268
非バーサーク時(期待値 147)の2.4倍。
100万回トライして
平均 : 357
標準偏差 : 23
最大 : 501
最小 : 268
非バーサーク時(期待値 147)の2.4倍。
分布でなんか変なヒゲが生えているのは何なのだろう...?
...仕事します。
import random
import numpy
import matplotlib.pyplot as plt
def normal_dice(dice_num) :
vals = []
total_val = 0
random.seed()
for num in range(0,dice_num):
vals.append(random.randint(1, 6))
#print vals
total_val = sum(vals)
return total_val
def berserk_dice(dice_num) :
vals = []
total_val = 0
random.seed()
for num in range(0,dice_num):
vals.append(random.randint(1, 6))
#print vals
total_val = total_val + sum(vals)
for num in range(1,6):
num_of_same = vals.count(num)
if num_of_same > 1 :
#print "Bersrk by %d dices of %d marks" % (num_of_same,num)
total_val=total_val+berserk_dice(num_of_same)
return total_val
def hyper_berserk_dice(dice_num) :
vals = []
total_val = 0
random.seed()
for num in range(0,dice_num):
vals.append(random.randint(1, 6))
#print vals
total_val = total_val + sum(vals)
for num in range(1,6):
num_of_same = vals.count(num)
if num_of_same > 1 :
# print "Bersrk by %d dices of %d marks" % (num_of_same,num)
total_val=total_val+hyper_berserk_dice(num_of_same+1)
return total_val
def main():
dice_num = input("Input dice_num :")
trial = input("Input Num. of Trials :")
vals=[]
for num in range(0, trial) :
vals.append(berserk_dice(dice_num))
if num%10000==0:
print num
vals=numpy.array(vals)
print "Mean : ", numpy.mean(vals)
print "SD : ", numpy.std(vals)
print "Max : ", vals.max()
print "Min : ", vals.min()
plt.rc('font', **{'family': 'serif'})
fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(vals, bins=100)
ax.set_title('Berserk with %d dices! (%d trials)' % (dice_num, trial))
ax.set_xlabel('Hits!')
ax.set_ylabel('Frequency')
plt.show()
return None
main()
登録:
投稿 (Atom)
