You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Irvine32汇编打字游戏错误字符显示异常问题求助

下落式打字游戏错误字符显示问题修复

问题根源

  1. 错误字符被循环清除:continueLoop段中会用黑底黑字重绘整个单词,导致错误分支中刚打印的红色字符被立即覆盖消失。
  2. 错误输入错误推进索引:输入错误时Index被递增,导致后续正确输入的位置偏移,且错误缓冲区的内容无法被正确覆盖。
  3. 错误缓冲区残留数据:输入正确字符时,错误缓冲区对应位置的旧数据未被清空,导致错误字符持续显示。

修复步骤

  • 移除错误分支中对Index的递增操作,错误输入不推进当前字符位置,用户需重新输入正确字符才能继续。
  • 在错误分支添加延迟后,清空错误缓冲区的当前位置,避免残留错误字符。
  • 调整绘制逻辑:先清除旧内容,再依次绘制原单词、正确字符、错误字符,确保层级正确。
  • 正确输入时,同步清空错误缓冲区对应位置的内容,消除残留。

修改后的完整代码

include Irvine32.inc

BUFMAX EQU 128

.data
    Words BYTE "house", 0
          BYTE "water", 0 
          BYTE "foods", 0
          BYTE "apple", 0
          BYTE "cloud", 0 ; List of words to be typed

    msElapsed BYTE 0
    positionX BYTE 0   
    positionY BYTE 1 
    nextWord DWORD 0
    score DWORD 0      
    scoreMsg BYTE "Game Over", 0 
    char BYTE ?                                 ; Character input by user
    correctBuffer BYTE BUFMAX DUP (0)           ; Buffer to store correctly typed characters
    incorrectBuffer BYTE BUFMAX DUP (0)
    Index DWORD 0       

.code
main PROC
    call TypingGame   
    invoke ExitProcess, 0 

main ENDP

TypingGame PROC
gameLoop:
    ; 先清除当前位置的旧内容
    mov dl, positionX
    mov dh, positionY
    call Gotoxy
    mov eax, black + (black * 16)
    call SetTextColor
    mov edx, OFFSET Words
    add edx, [nextWord]
    call WriteString

    ; 打印原单词(白色)
    mov dl, positionX
    mov dh, positionY
    call Gotoxy
    mov eax, white + (black * 16)
    call SetTextColor
    mov edx, OFFSET Words
    add edx, [nextWord]
    call WriteString

    ; 打印正确输入的字符(绿色)
    mov dl, positionX
    mov dh, positionY
    call Gotoxy
    mov eax, green + (black * 16)
    call SetTextColor
    mov edx, OFFSET correctBuffer
    call WriteString

    ; 打印错误输入的字符(红色)
    mov dl, positionX
    movzx eax, Index
    add dl, al
    mov dh, positionY
    call Gotoxy
    mov eax, red + (black * 16)
    call SetTextColor
    mov edx, OFFSET incorrectBuffer
    call WriteChar

    ; 延迟与输入处理
    mov eax, 50
    add [msElapsed], 1
    call Delay

    call ReadKey
    jz continueLoop
    mov char, al

    mov esi, OFFSET Words
    add esi, [nextWord]
    add esi, [Index]
    movzx ebx, char
    cmp [esi], bl
    jne incorrect

correct:
    ; 清空当前位置的错误缓冲区
    mov esi, OFFSET incorrectBuffer
    add esi, [Index]
    mov BYTE PTR [esi], 0

    ; 保存正确字符到缓冲区
    mov esi, OFFSET correctBuffer
    add esi, [Index]
    mov [esi], bl
    inc esi
    mov BYTE PTR [esi], 0

    inc [Index]

    ; 检查是否完成当前单词
    mov esi, OFFSET Words
    add esi, [nextWord]
    add esi, [Index]
    cmp BYTE PTR [esi], 0
    jne continueLoop

    ; 完成单词后重置状态
    mov [Index], 0
    ; 计算下一个单词的偏移(跳过当前单词的长度+1)
    mov esi, OFFSET Words
    add esi, [nextWord]
findNextWord:
    inc esi
    cmp BYTE PTR [esi], 0
    jne findNextWord
    inc esi
    mov eax, esi
    sub eax, OFFSET Words
    mov [nextWord], eax
    mov [positionX], 0
    mov [positionY], 1

    jmp gameLoop

incorrect:
    ; 保存错误字符到缓冲区
    mov esi, OFFSET incorrectBuffer
    add esi, [Index]
    mov [esi], bl
    inc esi
    mov BYTE PTR [esi], 0

    ; 显示错误字符并延迟
    mov dl, positionX
    movzx eax, Index
    add dl, al
    mov dh, positionY
    call Gotoxy
    mov eax, red + (black * 16)
    call SetTextColor
    mov al, char
    call WriteChar

    ; 延迟让用户看到错误字符
    mov eax, 500
    call Delay

    ; 清空错误缓冲区当前位置
    mov esi, OFFSET incorrectBuffer
    add esi, [Index]
    mov BYTE PTR [esi], 0

    jmp continueLoop

continueLoop:
    ; 处理单词下落逻辑
    cmp [msElapsed], 20
    jl skipIncrement
    add [positionY], 1
    mov [msElapsed], 0
skipIncrement:

    cmp [positionY], 24
    jl gameLoop
    jmp endGame

endGame:
    call Clrscr
    mov edx, OFFSET scoreMsg
    call WriteString
    ret
TypingGame ENDP
END main

关键修改说明

  1. 调整绘制顺序:先清除旧内容,再绘制原单词、正确字符、错误字符,避免覆盖问题。
  2. 错误输入不递增索引:输入错误时不再增加Index,用户需要重新输入当前位置的正确字符。
  3. 错误字符显示后清空缓冲区:延迟后清空错误缓冲区对应位置,避免残留。
  4. 正确输入时同步清空错误缓冲区:确保错误字符被立即清除,不干扰后续显示。
  5. 修复下一个单词的偏移计算:原代码中add [nextWord], TYPE BYTE只会移动1字节,改为跳过整个当前单词到下一个单词的起始位置。

内容的提问来源于stack exchange,提问作者Keithan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:30:01