[wizs] 賽馬
假設有 10 匹馬, 我一般會採行的做法是, clone 出十個
心跳物件, 然後循環計算.
馬匹會有一些數值資料, 例如馬種, 馬齡, 以及一些參考
用資料(實際不存在), 例如腳力, 爆發力, 穩定度, etc..
然後一開始會用一個 1+random(10) 為主的計算式, 跑十
匹馬的各自數值, 做為鳴槍後的各馬匹位置, 如下...
9
8
10
4
5
1
2
10
3
7
上面可以解釋為即使是弱的馬匹, 也不見得一開始就落後
, 以及強的馬匹, 也不見得一開始就領先.
然後因為起跑時的數值串為隨機, 之後的到終點前的一連
串計算結果就有了隨機依據, 這個意思就是即便同樣的十
匹馬再跑一次, 結果也不會相同.
那有一個重點, 就是「終點前」的結果也必須具有一定程
度的隨機性. 這是因為計算公式有時是很固定的, 當你給
玩家看到一些參考值時, 這些參考值必須具備一定程度的
意義─這樣玩家下注才有依據可循. 因此大部份的計算式
都是固定的, 它只會加入幾個隨機因素─但它們也是固定
存在的, 例如騎師落馬、違例、馬匹間碰撞、馬受傷、..
但無論如何, 終點前的隨機性是必須存在的, 例如到終點
時有三匹馬距離如下...
[----] <= 這裡還存在一個計算時間
|
馬1 |終
馬2 |點
馬3 |線
|
你不能說因為馬1 腳力啦,爆發力啦,... 等等的全都勝過
馬2、馬3, 所以「最後」一定是馬1 先抵達終點。
這是因為「這種事沒有絕對的」。
所以最後一定會跑一個隨機的東西出來。
現在重點是,由一個主程式去做複雜的循環管控,還不如
讓十個物件去分擔,這是我的想法,也是這程式的核心,
若是一般的程式語言大致就是如下...
repeat:
for(i=0;i<10;i++)
call_horse(i);
sleep n秒;
go repeat;
mud 可以做比較有趣的變化.
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.81.169.87
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
19