汇编垃圾游戏。我的代码无法完成退出,卡在了一个循环中

问题描述 投票:-2回答:1

写一个程序,使用上述规则玩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
assembly x86 masm irvine32
1个回答
0
投票

我觉得它卡在了一个无尽的循环上。

我觉得它卡在了一个无休止的循环上。loop playloop 指令永远无法达成!当投掷2个骰子时,结果是在[2,12]范围内的数字。当投掷2个骰子时,结果是一个范围为[2,12]的数字。你的代码对每一个可能的值都有案例。

  • 7和11的结果是... 赢得
  • 2、3、12去 失去
  • 4、5、6、8、9、10转到。重投

没有办法掉过头来,在 loop否则会限制游戏时间的指令。这就是你的无尽循环。

请指出我需要修正的地方。

我不知道这个 骰子游戏 所以根本不可能开始建议果断的改正。我可以告诉你的是 赢得, 失去重投 应该是标签 之内 扮演 促使而不是procs本身。

IDEA

你的文字说:

...玩骰子游戏,用上面的规则... ...

也许最好在你的文章中加入这些规则。

© www.soinside.com 2019 - 2024. All rights reserved.