鱼C论坛

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

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

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

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

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

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

如果您想使用汇编语言来实现这个打字游戏,可以考虑使用DOS下的汇编语言,例如8086汇编语言。下面是一个基于8086汇编语言的示例代码:
  1. .model small
  2. .stack 100h
  3. .data
  4.     message db '欢迎来到打字游戏!$'
  5.     prompt db '请键入字母: $'
  6.     correct db '正确!$'
  7.     wrong db '错误!$'
  8.     exitMsg db '退出游戏。$'
  9.     newline db 0Dh, 0Ah, '$'
  10. .code
  11. main proc
  12.     mov ax, @data
  13.     mov ds, ax
  14.    
  15.     mov ah, 9
  16.     lea dx, message
  17.     int 21h
  18.    
  19.     mov cx, 0  ; 正确字符计数
  20.     mov dx, 0  ; 错误字符计数
  21.    
  22. input_loop:
  23.     mov ah, 9
  24.     lea dx, prompt
  25.     int 21h
  26.    
  27.     mov ah, 1
  28.     int 21h  ; 从键盘读取输入的字符
  29.    
  30.     cmp al, 'q'
  31.     je exit_game  ; 如果输入的是 'q',则退出游戏
  32.    
  33.     cmp al, 'a'
  34.     jl input_loop  ; 如果输入的字符小于 'a',则重新输入
  35.    
  36.     cmp al, 'z'
  37.     jg input_loop  ; 如果输入的字符大于 'z',则重新输入
  38.    
  39.     cmp al, bl  ; 比较输入的字符和随机生成的字符
  40.    
  41.     je correct_input  ; 如果相等,则显示正确消息
  42.    
  43.     jmp wrong_input  ; 否则显示错误消息
  44.    
  45. correct_input:
  46.     inc cx  ; 正确字符计数加一
  47.    
  48.     mov ah, 2
  49.     mov dl, bl
  50.     int 21h  ; 显示正确的字符
  51.    
  52.     mov ah, 9
  53.     lea dx, correct
  54.     int 21h  ; 显示“正确!”消息
  55.    
  56.     jmp next_input
  57.    
  58. wrong_input:
  59.     inc dx  ; 错误字符计数加一
  60.    
  61.     mov ah, 2
  62.     mov dl, bl
  63.     int 21h  ; 显示正确的字符
  64.    
  65.     mov ah, 9
  66.     lea dx, wrong
  67.     int 21h  ; 显示“错误!”消息
  68.    
  69. next_input:
  70.     ; 统计结果并显示
  71.     mov ah, 9
  72.     lea dx, newline
  73.     int 21h
  74.    
  75.     mov ah, 2
  76.     mov dl, '正'
  77.     int 21h
  78.    
  79.     mov dl, '确'
  80.     int 21h
  81.    
  82.     mov dl, ' '
  83.     int 21h
  84.    
  85.     mov dl, '字'
  86.     int 21h
  87.    
  88.     mov dl, '符'
  89.     int 21h
  90.    
  91.     mov dl, ':'
  92.     int 21h
  93.    
  94.     mov ax, cx
  95.     call print_number  ; 显示正确字符个数
  96.    
  97.     mov dl, ' '
  98.     int 21h
  99.    
  100.     mov dl, '错'
  101.     int 21h
  102.    
  103.     mov dl, '误'
  104.     int 21h
  105.    
  106.     mov dl, ' '
  107.     int 21h
  108.    
  109.     mov dl, '字'
  110.     int 21h
  111.    
  112.     mov dl, '符'
  113.     int 21h
  114.    
  115.     mov dl, ':'
  116.     int 21h
  117.    
  118.     mov ax, dx
  119.     call print_number  ; 显示错误字符个数
  120.    
  121.     ; 计算正确率
  122.     mov ah, 9
  123.     lea dx, newline
  124.     int 21h
  125.    
  126.     mov ah, 2
  127.     mov dl, '正'
  128.     int 21h
  129.    
  130.     mov dl, '确'
  131.     int 21h
  132.    
  133.     mov dl, ' '
  134.     int 21h
  135.    
  136.     mov dl, '确'
  137.     int 21h
  138.    
  139.     mov dl, '率'
  140.     int 21h
  141.    
  142.     mov dl, ':'
  143.     int 21h
  144.    
  145.     xor ax, ax
  146.     mov bx, dx  ; 错误字符个数
  147.     cmp bx, ax
  148.     je skip_division  ; 如果错误字符个数为零,则不进行除法运算
  149.    
  150.     div bx  ; ax = cx / bx
  151.    
  152.     call print_number  ; 显示正确率
  153.    
  154. skip_division:
  155.     ; 等待用户按下任意键继续
  156.     mov ah, 9
  157.     lea dx, newline
  158.     int 21h
  159.    
  160.     mov ah, 9
  161.     lea dx, exitMsg
  162.     int 21h
  163.    
  164.     mov ah, 1
  165.     int 21h
  166.    
  167.     jmp input_loop  ; 继续下一次输入循环
  168.    
  169. exit_game:
  170.     mov ah, 4Ch
  171.     int 21h
  172. print_number proc
  173.     push bx
  174.    
  175.     mov bx, 10
  176.     xor cx, cx
  177.    
  178.     div bx
  179.     push ax
  180.    
  181.     cmp dl, 0
  182.     je end_printing
  183.    
  184.     call print_number
  185.    
  186.     pop ax
  187.    
  188.     add dl, '0'
  189.     mov ah, 2
  190.     int 21h
  191.    
  192. end_printing:
  193.     pop bx
  194.     add dl, '0'
  195.     mov ah, 2
  196.     int 21h
  197.    
  198.     ret
  199. print_number endp
  200. end main
复制代码

请注意,上述代码是基于DOS的8086汇编语言,您需要使用适当的汇编器和链接器来运行该代码。此外,由于汇编语言更复杂和底层,所以代码要比使用高级语言编写的版本更长并且更复杂。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-12-26 20:52:00 | 显示全部楼层
这个打字游戏可以使用Python语言来实现,不需要使用汇编。下面是一个简单的示例代码:
  1. import random
  2. import time
  3. from colorama import Fore, Style
  4. def typing_game():
  5.     correct_count = 0
  6.     wrong_count = 0
  7.     print("欢迎来到打字游戏!输入'q'退出游戏。")
  8.     while True:
  9.         # 随机生成一个字母
  10.         letter = chr(random.randint(97, 122))
  11.         print("请键入字母:", end=' ')
  12.         print(Fore.GREEN + letter.upper() + Style.RESET_ALL)  # 使用绿色显示字母
  13.         start_time = time.time()  # 记录开始时间
  14.         user_input = input().lower()
  15.         if user_input == 'q':
  16.             break
  17.         elapsed_time = time.time() - start_time  # 计算输入所用时间
  18.         if user_input == letter:
  19.             correct_count += 1
  20.             print(Fore.GREEN + "正确!" + Style.RESET_ALL)
  21.         else:
  22.             wrong_count += 1
  23.             print(Fore.RED + "错误!" + Style.RESET_ALL)
  24.         # 统计结果
  25.         total_count = correct_count + wrong_count
  26.         accuracy = correct_count / total_count * 100 if total_count > 0 else 0
  27.         print("正确: {}, 错误: {}, 正确比例: {:.2f}%".format(correct_count, wrong_count, accuracy))
  28.         print("所用时间: {:.2f}秒".format(elapsed_time))
  29. typing_game()
复制代码

请注意,在上述代码中,我们使用了colorama库来实现彩色输出。您可以通过执行`pip install colorama`来安装该库。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-26 20:55:54 | 显示全部楼层
你不如用C写,汇编语言不适合干这种事
做事情要用合适的工具
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

用汇编怎么实现?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果您想使用汇编语言来实现这个打字游戏,可以考虑使用DOS下的汇编语言,例如8086汇编语言。下面是一个基于8086汇编语言的示例代码:
  1. .model small
  2. .stack 100h
  3. .data
  4.     message db '欢迎来到打字游戏!$'
  5.     prompt db '请键入字母: $'
  6.     correct db '正确!$'
  7.     wrong db '错误!$'
  8.     exitMsg db '退出游戏。$'
  9.     newline db 0Dh, 0Ah, '$'
  10. .code
  11. main proc
  12.     mov ax, @data
  13.     mov ds, ax
  14.    
  15.     mov ah, 9
  16.     lea dx, message
  17.     int 21h
  18.    
  19.     mov cx, 0  ; 正确字符计数
  20.     mov dx, 0  ; 错误字符计数
  21.    
  22. input_loop:
  23.     mov ah, 9
  24.     lea dx, prompt
  25.     int 21h
  26.    
  27.     mov ah, 1
  28.     int 21h  ; 从键盘读取输入的字符
  29.    
  30.     cmp al, 'q'
  31.     je exit_game  ; 如果输入的是 'q',则退出游戏
  32.    
  33.     cmp al, 'a'
  34.     jl input_loop  ; 如果输入的字符小于 'a',则重新输入
  35.    
  36.     cmp al, 'z'
  37.     jg input_loop  ; 如果输入的字符大于 'z',则重新输入
  38.    
  39.     cmp al, bl  ; 比较输入的字符和随机生成的字符
  40.    
  41.     je correct_input  ; 如果相等,则显示正确消息
  42.    
  43.     jmp wrong_input  ; 否则显示错误消息
  44.    
  45. correct_input:
  46.     inc cx  ; 正确字符计数加一
  47.    
  48.     mov ah, 2
  49.     mov dl, bl
  50.     int 21h  ; 显示正确的字符
  51.    
  52.     mov ah, 9
  53.     lea dx, correct
  54.     int 21h  ; 显示“正确!”消息
  55.    
  56.     jmp next_input
  57.    
  58. wrong_input:
  59.     inc dx  ; 错误字符计数加一
  60.    
  61.     mov ah, 2
  62.     mov dl, bl
  63.     int 21h  ; 显示正确的字符
  64.    
  65.     mov ah, 9
  66.     lea dx, wrong
  67.     int 21h  ; 显示“错误!”消息
  68.    
  69. next_input:
  70.     ; 统计结果并显示
  71.     mov ah, 9
  72.     lea dx, newline
  73.     int 21h
  74.    
  75.     mov ah, 2
  76.     mov dl, '正'
  77.     int 21h
  78.    
  79.     mov dl, '确'
  80.     int 21h
  81.    
  82.     mov dl, ' '
  83.     int 21h
  84.    
  85.     mov dl, '字'
  86.     int 21h
  87.    
  88.     mov dl, '符'
  89.     int 21h
  90.    
  91.     mov dl, ':'
  92.     int 21h
  93.    
  94.     mov ax, cx
  95.     call print_number  ; 显示正确字符个数
  96.    
  97.     mov dl, ' '
  98.     int 21h
  99.    
  100.     mov dl, '错'
  101.     int 21h
  102.    
  103.     mov dl, '误'
  104.     int 21h
  105.    
  106.     mov dl, ' '
  107.     int 21h
  108.    
  109.     mov dl, '字'
  110.     int 21h
  111.    
  112.     mov dl, '符'
  113.     int 21h
  114.    
  115.     mov dl, ':'
  116.     int 21h
  117.    
  118.     mov ax, dx
  119.     call print_number  ; 显示错误字符个数
  120.    
  121.     ; 计算正确率
  122.     mov ah, 9
  123.     lea dx, newline
  124.     int 21h
  125.    
  126.     mov ah, 2
  127.     mov dl, '正'
  128.     int 21h
  129.    
  130.     mov dl, '确'
  131.     int 21h
  132.    
  133.     mov dl, ' '
  134.     int 21h
  135.    
  136.     mov dl, '确'
  137.     int 21h
  138.    
  139.     mov dl, '率'
  140.     int 21h
  141.    
  142.     mov dl, ':'
  143.     int 21h
  144.    
  145.     xor ax, ax
  146.     mov bx, dx  ; 错误字符个数
  147.     cmp bx, ax
  148.     je skip_division  ; 如果错误字符个数为零,则不进行除法运算
  149.    
  150.     div bx  ; ax = cx / bx
  151.    
  152.     call print_number  ; 显示正确率
  153.    
  154. skip_division:
  155.     ; 等待用户按下任意键继续
  156.     mov ah, 9
  157.     lea dx, newline
  158.     int 21h
  159.    
  160.     mov ah, 9
  161.     lea dx, exitMsg
  162.     int 21h
  163.    
  164.     mov ah, 1
  165.     int 21h
  166.    
  167.     jmp input_loop  ; 继续下一次输入循环
  168.    
  169. exit_game:
  170.     mov ah, 4Ch
  171.     int 21h
  172. print_number proc
  173.     push bx
  174.    
  175.     mov bx, 10
  176.     xor cx, cx
  177.    
  178.     div bx
  179.     push ax
  180.    
  181.     cmp dl, 0
  182.     je end_printing
  183.    
  184.     call print_number
  185.    
  186.     pop ax
  187.    
  188.     add dl, '0'
  189.     mov ah, 2
  190.     int 21h
  191.    
  192. end_printing:
  193.     pop bx
  194.     add dl, '0'
  195.     mov ah, 2
  196.     int 21h
  197.    
  198.     ret
  199. print_number endp
  200. end main
复制代码

请注意,上述代码是基于DOS的8086汇编语言,您需要使用适当的汇编器和链接器来运行该代码。此外,由于汇编语言更复杂和底层,所以代码要比使用高级语言编写的版本更长并且更复杂。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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