作者laechan (小太保)
看板mud_sanc
标题[wizs] 赛马
时间Wed Mar 16 16:11:08 2011
假设有 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