写一个程序,使用上述规则玩Craps游戏,使其模拟一个没有人类输入的游戏。 程序不应该要求玩家下注,而应该只计算玩家是否会赢或输。 创建一个模拟掷两个骰子并返回总和的函数。 添加一个循环,使程序播放10,000场游戏。 添加计数器,计算玩家赢了多少次,输了多少次。 在10000场游戏结束后,列出总的Wins和Losses进行输出。 从长远来看,谁会赢得最多的Craps游戏,你还是房子?
这是我的代码,我觉得它卡在了一个无尽的循环上,请指出我需要修正的地方。
include Irvine32.inc
.data
point dword ?
winCount dword 0
loseCount dword 0
dice1 dword ? ; 1 to 6
dice2 dword ? ; 1 to 6
.code
main PROC
call clrscr
mov ecx, 10
call play
mov eax, winCount
call writedec
call crlf
mov eax, loseCount
call writedec
main endp
random1 PROC ;generate first number
mov eax, 5
call randomrange
inc eax
mov dice1, eax
ret
random1 endp
random2 PROC ;generate second number
mov eax, 5
call randomrange
inc eax
mov dice2, eax
ret
random2 endp
reroll PROC
call random1
call random2
mov eax, dice1
mov ebx, dice2
add eax, ebx
cmp eax,7
je win
cmp eax, point
je lose
jmp reroll
ret
reroll endp
win PROC
mov eax, winCount
inc eax
mov winCount, eax
jmp play
ret
win endp
lose PROC
mov eax, loseCount
inc eax
mov loseCount, eax
jmp play
ret
lose endp
play PROC
playloop:
call random1
call random2
mov eax, dice1
mov ebx, dice2
add eax, ebx
mov point, eax
cmp eax, 7
je win
cmp eax, 11
je win
cmp eax, 2
je lose
cmp eax, 3
je lose
cmp eax, 12
je lose
cmp eax, 4
je reroll
cmp eax, 5
je reroll
cmp eax, 6
je reroll
cmp eax, 8
je reroll
cmp eax, 9
je reroll
cmp eax, 10
je reroll
loop playloop
ret
play endp
end main
我觉得它卡在了一个无尽的循环上。
我觉得它卡在了一个无休止的循环上。loop playloop
指令永远无法达成!当投掷2个骰子时,结果是在[2,12]范围内的数字。当投掷2个骰子时,结果是一个范围为[2,12]的数字。你的代码对每一个可能的值都有案例。
没有办法掉过头来,在 loop
否则会限制游戏时间的指令。这就是你的无尽循环。
请指出我需要修正的地方。
我不知道这个 骰子游戏 所以根本不可能开始建议果断的改正。我可以告诉你的是 赢得, 失去和 重投 应该是标签 之内 扮演 促使而不是procs本身。
IDEA
你的文字说:
...玩骰子游戏,用上面的规则... ...
也许最好在你的文章中加入这些规则。