2010-01-03 158 views
2

在RPG遊戲,假設有角色A和B.如何在遊戲中實施攻擊頻率?

A將進行每秒

乙x個攻擊將進行每秒

Ÿ攻擊如果我們假設A發起攻擊和最後的攻擊可能是:

aabab的...

如何計算ŧ他的一系列攻擊?

+0

這是一個併發的問題或者你只是想知道有多少攻擊? – 2010-01-03 10:28:05

+0

目標是獲得整個攻擊序列,直到其中一個死亡。 – user198729 2010-01-03 10:31:51

+0

在同一場戰鬥中可以有兩個以上的角色嗎? – 2010-01-03 10:46:02

回答

3

下面是使用一臺發電機和分數做在Python 3.0的一種方法:

def get_attack_sequence(a, b): 
    from fractions import Fraction 
    count_a = count_b = 0 
    rate_a = Fraction(1, a) 
    rate_b = Fraction(1, b) 
    while 1: 
     new_count_a = count_a + rate_a 
     new_count_b = count_b + rate_b 

     if new_count_a < new_count_b: 
      yield "A" 
      count_a = new_count_a 
     elif new_count_a > new_count_b: 
      yield "B" 
      count_b = new_count_b 
     else: 
      yield "A|B" 
      count_a = new_count_a 
      count_b = new_count_b 

attack_sequence = get_attack_sequence(3, 2) 
print(' '.join(next(attack_sequence) for _ in range(10))) 

輸出:

A B A A|B A B A A|B A B 

的0需求的攻擊頻率進行檢查。我並沒有在上面的代碼中做到這一點,但它很容易修復,並且可能在這個功能之外最好的處理(一個玩家無法攻擊的戰鬥無論如何都不會很有趣)。

這種想法的一個優點是,它可以很容易地擴展到超過2名同時球員。

另一個優點是,它也可以處理小於每秒一個攻擊的攻擊率沒有任何修改(例如乙攻擊僅每兩秒一次,即攻擊頻率= 0.5)。

+0

它應該是'A B A A | B ...' – user198729 2010-01-03 14:42:36

+0

第三個A之後的行是什麼意思?同時攻擊? – 2010-01-03 15:33:08

+0

是的,這就是它的意思。你的意見是什麼? – user198729 2010-01-03 16:31:01

3

伯爵誰擁有更多的攻擊。給他打電話。將MORE/LESS分爲底層,結果爲N.然後對於每N個MORE攻擊添加一個LESS,並在完成時添加MORE攻擊。這是每秒。

實施例:

MORE = 5 
LESS = 2 
MORE/LESS floor = 2 

Then: 
MORE MORE LESS MORE MORE LESS MORE 

又如:

MORE = 3 
LESS = 2 
MORE/LESS floor = 1 

Then: 
MORE LESS MORE LESS MORE 
+0

+1我真的很喜歡這個解決方案 - 簡單而有效。雖然澄清了這個問題多一點,但這並不完全符合所有要求。也許它可以適應工作。 – 2010-01-03 16:39:08