如有错误请见谅,这是我的第一篇文章!最近我很无聊,正试图制作一个我曾经看过的街机游戏的批处理脚本克隆:http: //antikrish.com/2013/01/28/whittakers-ascot-gold-cup-horse-racing-arcade-game /
规则
我不记得规则并希望它是公平的,所以我自己做了。
- 每匹马都有一个介于 1 和 6 之间的数字
- 这个数字 (x) 是马每回合移动的机会 (1/x)
- 马 1 = 1/1 所以每回合移动
- 马 3 = 1/3 所以平均每三圈移动一次
- 马 6 = 1/6 所以平均每六圈移动一次
- 这个数字 (x) 也决定了马在棋盘上的移动方式
- 马 1 = 每次移动 1 格
- 马 3 = 每次移动 3 个空格
- 马 6 = 每次移动 6 格
- 棋盘长 60 格,第一个达到 60 格的马为获胜者(允许平局)。选择 60 作为目标,因为它是 1、2、3、4、5 和 6 的公倍数。
- 这样做的想法是每匹马需要大约 60 圈才能到达终点并获胜。
- 马 1 => 60 格 / 1 移动 = 60 转,60 转 / (1/1) = 60 转
- 马 3 => 60 格 / 3 移动 = 20 回合,20 回合 / (1/3) = 60 回合
- 马 6 => 60 格 / 6 移动 = 10 转,10 转 / (1/6) = 60 转
问题
我运行了游戏,一切似乎都很好!过了一会儿,我注意到马 1 几乎从来没有赢过。现在这可以用概率来解释,但我想检查一下,所以我修改了我的代码以跟踪结果,并看到编号越高的马越经常获胜!
我上传了一张图表(http://i.imgur.com/IZuXnye.png),显示了三组 1000 场比赛的获胜者的结果,其中允许平局(并且所有完成的比赛都算作胜利)。现在,这种行为不一定是坏事,这意味着每匹马都有几率,但我对为什么会发生这种情况感到困惑。
原因
在我看来,为什么会发生这种行为有三个原因:
- 我的程序中有一个错误。如果您有兴趣,我已经包含了下面的代码。
- 批次随机与时间有关,这会扭曲结果,使更高的数字更有可能。为了测试这一点,我收集了三组 1000 个介于 1 和 6 之间的随机数,结果看起来还不错。
- 注意我改变了生成数字之间的时间:
- REM – 一代之间没有时间间隔
- 0 秒 - 超时 0 秒(所以短暂的停顿)
- 1 秒 - 超时 1 秒
- 这是概率和收益的属性,我使用的逻辑对于公平游戏来说是有缺陷的。
那么,谁能告诉我为什么会发生这种情况?
提前致谢!
如果有帮助,这里是代码:
@ECHO OFF
COLOR 0B
setlocal EnableDelayedExpansion
set total = 0
set totalscore[0]=0
set totalscore[1]=0
set totalscore[2]=0
set totalscore[3]=0
set totalscore[4]=0
set totalscore[5]=0
set totalscore[6]=0
:START
set /a total = total + 1
set score[0]=0
set score[1]=0
set score[2]=0
set score[3]=0
set score[4]=0
set score[5]=0
set score[6]=0
set winner=0
:LOOP
cls
echo Race Number: %total%
for /l %%n in (1,1,6) do (
set /a num=!random! %%%%n + 1
IF !num! == %%n set /a score[%%n]=!score[%%n]! + !num!
<NUL set /p=%%n:
for /l %%x in (1, 1, !score[%%n]!) do <NUL set /p=^|
set /a sum=60 - !score[%%n]!
for /l %%x in (1, 1, !sum!) do <NUL set /p=_
echo F
)
for /l %%n in (1,1,6) do (
if !score[%%n]! == 60 (
echo winner: %%n
set /a totalscore[%%n]=!totalscore[%%n]! + 1
set winner=1
)
)
echo.
echo Previous Results
for /l %%n in (1,1,6) do (
echo %%n: !totalscore[%%n]!
)
if %winner%==1 GOTO END
timeout /t 0 /nobreak > NUL
GOTO LOOP
:END
echo.
pause
GOTO START
编辑我认为这是一个概率怪癖,因为马 6 有机会在 10 回合后完成,而所有其他马物理上都做不到。这为每匹马加起来,减少了低于它的马匹的机会(即,只有在另一匹马表现不佳时,马 1 才会获胜)。
感谢您的回复:)