admin管理员组

文章数量:1532440

2023年12月12日发(作者:)

打字游戏的代码

悬赏分:130 - 解决时间:2009-3-13 14:39

【问题描述】

本课题的主要目的是利用C/C++语言的知识,设计一个打字游戏,供给初学者进行打字练习,让他们可以在短时间内熟悉键盘上的各个字符键的位置。

该课题要求对内存中或文件中所存储的数据进行各种常规操作,如:查找、排序、统计、显示等功能。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些算法思想的应用。

【功能要求】

(1) 纪录管理。

a) 程序要求只记录每位玩家的三次最好成绩。纪录信息包括:排名、玩家姓名、输入正确的次数/样本长度三项。其中 “输入正确的次数/样本长度”越大成绩越好。

b) 纪录信息要求保存在硬盘上的文件中,玩家退出系统的时候,最新纪录要存到硬盘中去。

c) 纪录管理功能包括纪录的删除、查询功能。

d) 可以查所有玩家的成绩,并可以依据操作员的选择,或按玩家成绩的递减次序显示,或按玩家姓名的字典次序显示。

e) 当按玩家姓名查询时,按玩家成绩的递减次序显示。

(2) 打字练习过程。

1) 应用ASCII码及随机数生成打字界面内的字符。在生成的打字练习界面内,要求每次显示10行,每行10个字符(字母或数字)。

2) 开始打字练习:接受输入的字符、判断正误。

3) 打字结束后能够统计出打字练习时的数据:打字过程中的正确字符数、错误字符数、准确率,并记录到纪录文件中。

4) 询问玩家是否开始新的一轮练习,如果玩家选“否”,则系统退到外面的菜单。

(3) 游戏配置。可配置的参数包括:纪录文件名和路径、玩家姓名。

纪录文件名和路径在程序一开始运行的时候设定为默认值。玩的时候,可以在游戏配置界面中对其进行修改。

【扩展功能】

在实现上述功能的基础上,可以考虑实现下面一个或多个功能。

(1) 玩家纪录里面不仅记录排名、玩家姓名、输入正确的次数/样本长度三项,还记录玩家创造纪录的时间,时间可由系统时间取得。

(2) 对玩家打字的总时间进行限制。

【程序设计的具体说明】

(1) 为各项操作功能设计一个菜单,用户通过菜单项选择希望进行的操作项目。

(2) 变量、函数命名符合规范。 (3) 注释详细:每个变量都要求有注释,以说明用途;函数的注释说明功能,对函数的参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。

(4) 程序的层次清晰,可读性强。

【程序设计的开发环境】

VC++6.0,在内存中的各种操作可以采用一维数组方式或是指针方式。

汇编语言程序设计

悬赏分:25 - 解决时间:2010-1-13 20:17

请用汇编语言设计一段小游戏,或者汇编语言设计一段程序,这段程序会改变颜色,出声,或者做简单的计算,好了会另加分,谢谢大家,由于好久没玩,现在由于财富值太低,不能给出高分,一旦设计出来绝对另加分,再次感谢

提问者: 乐melone - 二级

最佳答案

这个是16位打字游戏的代码 可以运行的哦~

Init_game macro op1,op2,op3,op4,op5,op6

mov cx,00h

mov dh,op1

mov dl,op2

op6:

mov ah,02h

mov bh,00h

int 10h

push cx

mov ah,0ah

mov al,op3

mov bh,00h

mov cx,01h

int 10h

pop cx

inc cx

inc op4

cmp cx,op5

jne op6

endm clear_screen macro op1,op2,op3,op4

mov ah,06h

mov al,00h

mov bh,07h

mov ch,op1

mov cl,op2

mov dh,op3

mov dl,op4

int 10h

mov ah,02h

mov bh,00h

mov dh,00h

mov dl,00h

int 10h

endm

menu macro op1,op2,op3

mov ah,02h

mov bh,00h

mov dh,op1

mov dl,op2

int 10h

mov ah,09h

lea dx,op3

int 21h

endm

data segment

linjiang db "Made by lin jiang$"

no db "NO.:021411$"

meg db "Let us have a game!!Come on!!$"

meg1 db "**Select Menu**$"

meg2 db "Please select the game speed,ESC to quit.$"

meg3 db " slow Too easy,speed up!$"

meg4 db " Everybody can deal.$"

meg5 db " I think you can deal!$" meg6 db " A attention!$"

meg7 db " Fast Too hard,Have a try?$"

meg8 db "t Are you crazy??$"

meg9 db "*Select the number among 1-6 and press ENTER to start!*$"

meg10 db "Game Speed Select:$"

hotkey db "When you are playing games:$"

hotkey1 db "ESC to return to menu$"

hotkey2 db "SPACE to pause the game$"

hotkey3 db "Press any key to $"

hotkey4 db "Are you ready??$"

failmeg db "The letter is arrive the bottom, You are lost ! :($"

failmeg0 db "Press ENTER to $"

failmeg1 db "Game is over!$"

failmeg2 db "Press ENTER to return menu and press ESC to exit!$"

failmeg3 db "Bye-Bye!Thank for your playing!!$"

failmeg4 db "Press any key $"

speed dw 00d,1200d,800d,600d,400d,200d,100d

letters db "jwmilzoeucgpravskntxhdyqfb"

db "iytpkwnxlsvxrmofzhgaebudjq"

db "nwimzoexrphysfqtvdcgljukda"

letters_bak db "jwmilzoeucgpravskntxhdyqfb"

db "iytpkwnxlsvxrmofzhgaebudjq"

db "nwimzoexrphysfqtvdcgljukda"

letter_counter db 0

life_flag db 78 dup(0)

position_flag db 78 dup(0)

present_position db 1

data ends

stack segment para stack 'stack'

db 64 dup(0) stack ends

code segment

main proc far

assume cs:code,ds:data,ss:stack

start:

mov ax,data

mov ds,ax

mov letter_counter,00h

mov present_position,1

lea si,position_flag

mov ah,00h

mov cx,00h

init_postion_flag:

mov [si],ah

inc si

inc cx

cmp cx,78d

jne init_postion_flag

lea di,letters

lea si,letters_bak

mov cx,00h

init_letters:

mov ah,[si]

mov [di],ah

inc si

inc di

inc cx

cmp cx,78d

jne init_letters

mov ah,00h

lea si,life_flag mov cx,00h

init_life_flag:

mov [si],ah

inc si

inc cx

cmp cx,78d

jne init_life_flag

mov cx,00h

mov ah,01h

or ch,00010000b

int 10h

clear_screen 00d,00d,24d,79d

Init_game 00d,00d,0ah,dl,80d,nextsign1

Init_game 24d,00d,0ah,dl,80d,nextsign2

Init_game 00d,00d,0ah,dh,25d,nextsign3

Init_game 00d,79d,0ah,dh,25d,nextsign4

menu 01d,15d,meg ;菜单信息的宏展开

menu 01h,61d,linjiang

menu 03d,20d,meg1

menu 03d,68d,no

menu 05d,15d,meg2

menu 07d,15d,meg3

menu 09d,15d,meg4

menu 11d,15d,meg5

menu 13d,15d,meg6

menu 15d,15d,meg7

menu 17d,15d,meg8

menu 19d,15d,meg9 menu 22d,15d,meg10

input: mov ah,02h

mov bh,00h

mov dh,22d

mov dl,33d

int 10h

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

int 10h

mov ah,01h

int 21h

retry: cmp al,"1"

je speed1

cmp al,"2"

je speed2

cmp al,"3"

je speed3

cmp al,"4"

je speed4

cmp al,"5"

je speed5

cmp al,"6"

je speed6

cmp al,1bh

je to_over0

jmp input

to_over0:jmp over

speed1: mov ah,01h

int 21h

cmp al,0dh jne otherkey

mov ax,speed+2

mov speed,ax

jmp begin

speed2: mov ah,01h

int 21h

cmp al,0dh

jne otherkey

mov ax,speed+4

mov speed,ax

jmp begin

speed3: mov ah,01h

int 21h

cmp al,0dh

jne otherkey

mov ax,speed+6

mov speed,ax

jmp begin

speed4: mov ah,01h

int 21h

cmp al,0dh

jne otherkey

mov ax,speed+8

mov speed,ax

jmp begin

speed5: mov ah,01h

int 21h

cmp al,0dh

jne otherkey

mov ax,speed+10

mov speed,ax

jmp begin

speed6: mov ah,01h

int 21h

cmp al,0dh

jne otherkey

mov ax,speed+12 mov speed,ax

jmp begin

otherkey: ; 处理重复输入的代码段

push ax

mov ah,02h

mov bh,00h

mov dh,22d

mov dl,34d

int 10h

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

int 10h

mov ah,02h

mov bh,00h

mov dh,22d

mov dl,33d

int 10h

pop ax

mov dx,ax

mov ah,02h

int 21h

jmp retry

begin:

clear_screen 01d,01d,23d,78d

menu 08d,20d,hotkey

menu 10d,20d,hotkey1

menu 12d,20d,hotkey2

menu 14d,20d,hotkey4

menu 16d,20d,hotkey3

mov ah,07h int 21h

clear_screen 01d,01d,23d,78d

Init_game 23d,01d,01h,dl,78d,nextsign5

mov ah,02h ;光标初始化

mov bh,00h

mov dh,01h

mov dl,01h

int 10h

mov cx,00h

lea si,letters

nextletter: ; 初始化屏幕上方的字母

mov ah,02h

mov dl,[si]

int 21h

inc si

inc cx

cmp cx,78d

je nextcycle

jmp nextletter

from_front: ; 相关循环的算法

sub present_position,78d

jmp gobackto_si

find_zero:cmp letter_counter,78d

je recycle

cmp present_position,78d

je from_one

mov ah,00h

nextsi: add present_position,01h

inc si

cmp [si],ah

je gobackto_di

cmp present_position,78d je from_one

jmp nextsi

from_one:mov present_position,01h

jmp gobackto_si

recycle:mov letter_counter,00h

mov present_position,01d

lea si,position_flag

mov cx,00h

mov ah,00h

clearsi: mov [si],ah

inc cx

cmp cx,78d

je nextcycle

inc si

jmp clearsi

nextcycle:

lea di,letters

lea si,position_flag

add present_position,31d

cmp present_position,78

ja from_front

gobackto_si:

add si,word ptr present_position

dec si

mov ah,[si]

cmp ah,01h

je find_zero

gobackto_di: mov ah,01h

mov [si],ah

add di,word ptr present_position

dec di

mov dl,present_position

mov ah,02h ; 字母下落的代码段部分

mov bh,00h

mov dh,01h

int 10h

mov cx,00h

nextrow:push cx ; 新的一行

mov cx,00h

out_cycle: ; 延迟

push cx

mov cx,00h

in_cycle:

add cx,01h

cmp cx,50000d

jne in_cycle

push dx

mov ah,06h

mov dl,0ffh

int 21h

pop dx

jz pass ; 如果键盘缓冲区部分为空,则跳转

cmp al,1bh ; 如果键入ESC,则返回主菜单

je to_start1

cmp al," " ;如果键入SPACE,则游戏暂停

je pause

cmp al,[di] ;输入字母正确!跳转! je disappear

pass:

pop cx

inc cx

cmp cx,speed

je print

jmp out_cycle

pause: push dx ;暂停处理

mov ah,06h

mov dl,0ffh

int 21h

pop dx

cmp al," "

jne pause

jmp pass

to_start1: ;返回主菜单

jmp start

print:

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

int 10h

inc dh

mov ah,02h

mov bh,00h

int 10h

mov ah,0ah

mov al,[di] mov bh,00h

mov cx,01h

int 10h

pop cx

inc cx

cmp cx,21d

je print_next_letter

jmp nextrow ; 下一行

disappear: ; 击中字母后的相关处理

pop cx

pop cx

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

int 10h

jmp hit

print_next_letter: ; 处理原位置的空缺

lea si,life_flag

add si,word ptr present_position

dec si

mov ah,[si]

cmp ah,1

je fail

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

int 10h

inc dh

mov ah,02h mov bh,00h

int 10h

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

int 10h

mov ah,1

mov [si],ah

hit: mov ah,02h

mov bh,00h

mov dh,01h

mov dl,present_position

int 10h

mov al,[di] ; 出现下一个新字母的数法

add al,7

cmp al,7ah

ja convey_letter

mov ah,0ah

mov bh,00h

mov cx,01h

int 10h

mov [di],al

add letter_counter,01h

jmp nextcycle

convey_letter:

sub al,7ah

add al,61h

mov ah,0ah

mov bh,00h

mov cx,01h

int 10h

mov [di],al add letter_counter,01h

jmp nextcycle

fail: mov ah,0ah ;游戏失败后的相关处理

mov al," "

mov cx,01h

int 10h

inc dh

mov ah,02h

mov bh,00h

int 10h

mov ah,0ah

mov al,[di]

mov bh,00h

mov cx,01h

int 10h

mov ah,02h

mov bh,00h

mov dh,12d

mov dl,17d

int 10h

push dx

mov ah,09h

lea dx,failmeg

int 21h

pop dx

add dh,2

mov ah,02h

mov bh,00h

int 10h

mov ah,09h

lea dx,failmeg0

int 21h

re: mov ah,07h

int 21h cmp al,0dh

jne re

clear_screen 01,01,23,78

mov ah,02h

mov bh,00h

mov dh,11d

mov dl,20d

int 10h

push dx

mov ah,09h

lea dx,failmeg1

int 21h

pop dx

inc dh

inc dh

mov ah,02h

mov bh,00h

int 10h

mov ah,09h

lea dx,failmeg2

int 21h

notkey:

mov ah,07h

int 21h

cmp al,0dh

je to_start

cmp al,1bh

je over

jmp notkey

to_start:

clear_screen 00,00,24,79

jmp start

over: clear_screen 01,01,23,78

mov ah,02h

mov bh,00h mov dh,11d

mov dl,15h

int 10h

mov ah,09h

lea dx,failmeg3

int 21h

mov ah,02h

mov bh,00h

mov dh,13d

mov dl,15h

int 10h

mov ah,09h

lea dx,failmeg4

int 21h

mov ah,07h

int 21h

mov ah,07h

int 21h

clear_screen 00,00,24,79

mov ax,4c00h

int 21h

main endp

code ends

end start

本文标签: 玩家打字纪录