鱼C论坛

 找回密码
 立即注册
查看: 597|回复: 4

[已解决]汇编:设计一个打字游戏

[复制链接]
发表于 2023-12-26 20:51:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
设计一个打字游戏,在键盘上面输入字符, 然后屏幕上面显示一行,正确了就用绿色的字表示输入的是正确的,错误了就用红色的字表示是错误的,
并且在下面统计正确和错误的字符个数还有统计正确的比例是多少。
最佳答案
2023-12-26 21:22:55
哈哈哈0 发表于 2023-12-26 21:22
用汇编怎么实现?

如果您想使用汇编语言来实现这个打字游戏,可以考虑使用DOS下的汇编语言,例如8086汇编语言。下面是一个基于8086汇编语言的示例代码:
.model small.stack 100h.data    message db '欢迎来到打字游戏!$'    prompt db '请键入字母: $'    correct db '正确!$'    wrong db '错误!$'    exitMsg db '退出游戏。$'    newline db 0Dh, 0Ah, '$'.codemain proc    mov ax, @data    mov ds, ax        mov ah, 9    lea dx, message    int 21h        mov cx, 0  ; 正确字符计数    mov dx, 0  ; 错误字符计数    input_loop:    mov ah, 9    lea dx, prompt    int 21h        mov ah, 1    int 21h  ; 从键盘读取输入的字符        cmp al, 'q'    je exit_game  ; 如果输入的是 'q',则退出游戏        cmp al, 'a'    jl input_loop  ; 如果输入的字符小于 'a',则重新输入        cmp al, 'z'    jg input_loop  ; 如果输入的字符大于 'z',则重新输入        cmp al, bl  ; 比较输入的字符和随机生成的字符        je correct_input  ; 如果相等,则显示正确消息        jmp wrong_input  ; 否则显示错误消息    correct_input:    inc cx  ; 正确字符计数加一        mov ah, 2    mov dl, bl    int 21h  ; 显示正确的字符        mov ah, 9    lea dx, correct    int 21h  ; 显示“正确!”消息        jmp next_input    wrong_input:    inc dx  ; 错误字符计数加一        mov ah, 2    mov dl, bl    int 21h  ; 显示正确的字符        mov ah, 9    lea dx, wrong    int 21h  ; 显示“错误!”消息    next_input:    ; 统计结果并显示    mov ah, 9    lea dx, newline    int 21h        mov ah, 2    mov dl, '正'    int 21h        mov dl, '确'    int 21h        mov dl, ' '    int 21h        mov dl, '字'    int 21h        mov dl, '符'    int 21h        mov dl, ':'    int 21h        mov ax, cx    call print_number  ; 显示正确字符个数        mov dl, ' '    int 21h        mov dl, '错'    int 21h        mov dl, '误'    int 21h        mov dl, ' '    int 21h        mov dl, '字'    int 21h        mov dl, '符'    int 21h        mov dl, ':'    int 21h        mov ax, dx    call print_number  ; 显示错误字符个数        ; 计算正确率    mov ah, 9    lea dx, newline    int 21h        mov ah, 2    mov dl, '正'    int 21h        mov dl, '确'    int 21h        mov dl, ' '    int 21h        mov dl, '确'    int 21h        mov dl, '率'    int 21h        mov dl, ':'    int 21h        xor ax, ax    mov bx, dx  ; 错误字符个数    cmp bx, ax    je skip_division  ; 如果错误字符个数为零,则不进行除法运算        div bx  ; ax = cx / bx        call print_number  ; 显示正确率    skip_division:    ; 等待用户按下任意键继续    mov ah, 9    lea dx, newline    int 21h        mov ah, 9    lea dx, exitMsg    int 21h        mov ah, 1    int 21h        jmp input_loop  ; 继续下一次输入循环    exit_game:    mov ah, 4Ch    int 21hprint_number proc    push bx        mov bx, 10    xor cx, cx        div bx    push ax        cmp dl, 0    je end_printing        call print_number        pop ax        add dl, '0'    mov ah, 2    int 21h    end_printing:    pop bx    add dl, '0'    mov ah, 2    int 21h        retprint_number endpend main
请注意,上述代码是基于DOS的8086汇编语言,您需要使用适当的汇编器和链接器来运行该代码。此外,由于汇编语言更复杂和底层,所以代码要比使用高级语言编写的版本更长并且更复杂。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-26 20:52:00 | 显示全部楼层
这个打字游戏可以使用Python语言来实现,不需要使用汇编。下面是一个简单的示例代码:
import randomimport timefrom colorama import Fore, Styledef typing_game():    correct_count = 0    wrong_count = 0    print("欢迎来到打字游戏!输入'q'退出游戏。")    while True:        # 随机生成一个字母        letter = chr(random.randint(97, 122))        print("请键入字母:", end=' ')        print(Fore.GREEN + letter.upper() + Style.RESET_ALL)  # 使用绿色显示字母        start_time = time.time()  # 记录开始时间        user_input = input().lower()        if user_input == 'q':            break        elapsed_time = time.time() - start_time  # 计算输入所用时间        if user_input == letter:            correct_count += 1            print(Fore.GREEN + "正确!" + Style.RESET_ALL)        else:            wrong_count += 1            print(Fore.RED + "错误!" + Style.RESET_ALL)        # 统计结果        total_count = correct_count + wrong_count        accuracy = correct_count / total_count * 100 if total_count > 0 else 0        print("正确: {}, 错误: {}, 正确比例: {:.2f}%".format(correct_count, wrong_count, accuracy))        print("所用时间: {:.2f}秒".format(elapsed_time))typing_game()
请注意,在上述代码中,我们使用了colorama库来实现彩色输出。您可以通过执行`pip install colorama`来安装该库。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-26 20:55:54 | 显示全部楼层
你不如用C写,汇编语言不适合干这种事
做事情要用合适的工具
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-26 21:22:32 | 显示全部楼层
FishC 发表于 2023-12-26 20:52
这个打字游戏可以使用Python语言来实现,不需要使用汇编。下面是一个简单的示例代码:

用汇编怎么实现?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-26 21:22:55 | 显示全部楼层    本楼为最佳答案   
哈哈哈0 发表于 2023-12-26 21:22
用汇编怎么实现?

如果您想使用汇编语言来实现这个打字游戏,可以考虑使用DOS下的汇编语言,例如8086汇编语言。下面是一个基于8086汇编语言的示例代码:
.model small.stack 100h.data    message db '欢迎来到打字游戏!$'    prompt db '请键入字母: $'    correct db '正确!$'    wrong db '错误!$'    exitMsg db '退出游戏。$'    newline db 0Dh, 0Ah, '$'.codemain proc    mov ax, @data    mov ds, ax        mov ah, 9    lea dx, message    int 21h        mov cx, 0  ; 正确字符计数    mov dx, 0  ; 错误字符计数    input_loop:    mov ah, 9    lea dx, prompt    int 21h        mov ah, 1    int 21h  ; 从键盘读取输入的字符        cmp al, 'q'    je exit_game  ; 如果输入的是 'q',则退出游戏        cmp al, 'a'    jl input_loop  ; 如果输入的字符小于 'a',则重新输入        cmp al, 'z'    jg input_loop  ; 如果输入的字符大于 'z',则重新输入        cmp al, bl  ; 比较输入的字符和随机生成的字符        je correct_input  ; 如果相等,则显示正确消息        jmp wrong_input  ; 否则显示错误消息    correct_input:    inc cx  ; 正确字符计数加一        mov ah, 2    mov dl, bl    int 21h  ; 显示正确的字符        mov ah, 9    lea dx, correct    int 21h  ; 显示“正确!”消息        jmp next_input    wrong_input:    inc dx  ; 错误字符计数加一        mov ah, 2    mov dl, bl    int 21h  ; 显示正确的字符        mov ah, 9    lea dx, wrong    int 21h  ; 显示“错误!”消息    next_input:    ; 统计结果并显示    mov ah, 9    lea dx, newline    int 21h        mov ah, 2    mov dl, '正'    int 21h        mov dl, '确'    int 21h        mov dl, ' '    int 21h        mov dl, '字'    int 21h        mov dl, '符'    int 21h        mov dl, ':'    int 21h        mov ax, cx    call print_number  ; 显示正确字符个数        mov dl, ' '    int 21h        mov dl, '错'    int 21h        mov dl, '误'    int 21h        mov dl, ' '    int 21h        mov dl, '字'    int 21h        mov dl, '符'    int 21h        mov dl, ':'    int 21h        mov ax, dx    call print_number  ; 显示错误字符个数        ; 计算正确率    mov ah, 9    lea dx, newline    int 21h        mov ah, 2    mov dl, '正'    int 21h        mov dl, '确'    int 21h        mov dl, ' '    int 21h        mov dl, '确'    int 21h        mov dl, '率'    int 21h        mov dl, ':'    int 21h        xor ax, ax    mov bx, dx  ; 错误字符个数    cmp bx, ax    je skip_division  ; 如果错误字符个数为零,则不进行除法运算        div bx  ; ax = cx / bx        call print_number  ; 显示正确率    skip_division:    ; 等待用户按下任意键继续    mov ah, 9    lea dx, newline    int 21h        mov ah, 9    lea dx, exitMsg    int 21h        mov ah, 1    int 21h        jmp input_loop  ; 继续下一次输入循环    exit_game:    mov ah, 4Ch    int 21hprint_number proc    push bx        mov bx, 10    xor cx, cx        div bx    push ax        cmp dl, 0    je end_printing        call print_number        pop ax        add dl, '0'    mov ah, 2    int 21h    end_printing:    pop bx    add dl, '0'    mov ah, 2    int 21h        retprint_number endpend main
请注意,上述代码是基于DOS的8086汇编语言,您需要使用适当的汇编器和链接器来运行该代码。此外,由于汇编语言更复杂和底层,所以代码要比使用高级语言编写的版本更长并且更复杂。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表