1、微机课程方案打字游戏。窗口初始化宏定义00000000000000000000000000000000000000000000000000lnit_w macro w_op1,w_op2,w_op3,w_op4,w_op5,w_op6,w_op7movcx,00hmovdh,w_op1movdl,w_op2w_op6:movah,02hmovbh,00hint 10hpush cxmovah,09hmoval,w_op3movbh,00hmovbl,w_op7movcx,01hint 10hpop cxinc cxinc w_op4cmpcx,w_op5jne w_op6endm0000000
2、00000000000000000000000000000000000000000000 0菜单初始化宏定义00000000000000000000000000000000000000000000000000menu macro m_op1,m_op2,m_op3movah,02hmovbh,00hmovdh,m_op1movdl,m_op2int 10hmovah,09hlea dx,m_op3int 21hendm00000000000000000000000000000000000000000000000000draw_text macro t_op1,t_op2,t_op3 movax
3、,datamoves,axmovbp, offset t_op3movdh,t_op1movdl,t_op2movah,02hint 10hmovcx,18moval,00hmovbh,00hmovbl,04h 。框架颜色movah,13hint 10hendm000000000000000000000000000000000000000000000000000000time_ch macro c_op1,c_op2lea di,c_op1lea si,c_op2cldmovcx,8rep movsbendm0000000000show_time macro s_op1,s_op2,s_op3
4、,s_op4MOVdh,s_op1 movdl,s_op2MOBP, 0FFSET_op3M0VCX,s_op4MOBX,004EHMOVAX,1301HINT 10H endm data segmentwel1 dbThis is a simple asm word game!$wel2 dbEdited by wuhanligongdaxuewhut.dq0604$wel3 dbWhen a letter is dropping,please hit it!$wel4 dbPress space to pause$wel5 dbPress ESC to return back main i
5、nterface$wel6 dbPress letter E to exit!$wel7 dbEnter your name and press enter to start this game!$ wel8 dbYour name here:$player dbPlayer:player_na db 6 dup( , $failure db 0letter_co un ter db 0letter_co unt dw 0score dbscore : score_show db $ score_number db 0 score_ nu mber1 db 30h score_ nu mber
6、2 db 30hchar_pt dbchar_?speed dwOafffhletters dbqpwoeirutylaksjdhfgzmx ncbvpslwpdlemdkgwletters_bak dbqpwoeirutylaksjdhfgzmx ncbvpslwpdlemdkgw letters_c oun ter db 0letters_c ount dw0life_flag db 39 dup(0 prese nt_positi on db 1start_strdbstart: $start_timedb 8 dup(:no w_timedb 8 dup(:en d_strdbe nd
7、: $en d_timedb 8 dup(:t_timedb 8 dup(:word_strdbtotal word:$text_framedb 0c9h,16dup(0cdh,0bbhtext_frame10 text_frame11 text_frame12 text_frame13 text_frame14 text_frame15db 0cch,16 dup(0cdh,0b9h db 0bah,16 dup(20h,0bah db 0bah,16 dup(20h,0bah db 0bah,16 dup(20h,0bah db 0bah,16 dup(20h,0bah db 0c8h,1
8、6 dup(0cdh,0bch data ends stack segment stack db 200 dup(? stack ends code segme ntmai n proc farassumecs:code,ds:data,ss:stackstart :movax,datamovds,axmoves,axmovax,0003hint 10hmovah,01hor ch,00010000bint 10h000000000。利用宏初始化窗口边框00000000000000000000000000000000000000000000000000lnit_w 00d,00d,02d,dl
9、,80d,win_x1,04hlnit_w 24d,00d,02d,dl,80d,win_x2,04hlnit_w 00d,00d,02d,dh,25d,win_y1,04hlnit_w 00d,79d,02d,dh,25d,wi n_y2,04h menu 08h,14h,wel1 menu 09h,14h,wel2 menu 0ah,14h,wel3 menu 0bh,14h,wel4 menu 0ch,14h,wel5 menu 0dh,14h,wel6 menu 0fh,14h,wel7 menu 10h,14h,wel800000000000000000000000000000000
10、000000000 0000000000 0输入玩家名字00000000000000000000000000000000000000000 000000000in put_ name: movcx,16 lea si,player_ na n ext_i nput: movah,01h int 21h cmpal,08h jz erase_ name cmpal,0dh jz beg in _game cmpal,45h jz exit movsi,al inc si loop n ext_i nput jmp beg in _game movah,1h int 21h exit: movah
11、,4ch int 21h erase_ name: push cx push ax movah,Oah moval, movbl,00h movbh,00h movcx,1 int 10h pop ax pop ex jmp n ext_i nput00000000000000000000000000000000000000000000000000beg in _game:call elear_seree ncall get_timetime_eh start_time,t_timemovletter_e oun ter,00hmovprese nt_positi on,10000000000
12、0000000000000000000000000000000 0000000000000000lea si,letterslea di,letters_bakmovex,00hinit_letters: 。 LETTER赋值 LETTERS BAKmovah,dimovsi,ahine siine diine exempex,39jne ini t_lettersmovah,00hlea si,life_flagmovex,00hinit_life_flag: 。 LIFE_FLAG武值0movsi,ahine siine exempex,39jne in it_life_flag00000
13、0000000000000000000000000000000000000000000000000000000 0 0 0 0初始化菜单00000000000000000000000000000000000000000movah,0bhmovbx,0100hint 10h。call clear_screendraw_text 04h,38h,text_frame draw_text 05h,38h,text_frame1 draw_text 06h,38h,text_frame2 draw_text 07h,38h,text_frame3 draw_text 08h,38h,text_fram
14、e4 draw_text 09h,38h,text_frame5 draw_text 0ah,38h,text_frame6 draw_text 0bh,38h,text_frame7 draw_text 0ch,38h,text_frame8 draw_text 0dh,38h,text_frame9 draw_text 0eh,38h,text_frame10 draw_text 0fh,38h,text_frame11 draw_text 10h,38h,text_frame12 draw_text 11h,38h,text_frame13 draw_text 12h,38h,text_
15、frame14 draw_text 13h,38h,text_frame15 lnit_w 02d,05d,0dbh,dl,40d,rect_x1,04hlnit_w 21d,05d,0dbh,dl,40d,rect_x2,04hInit_w 02d,05d,0dbh,dh,20d,rect_y1,04hInit_w 02d,45d,0dbh,dh,20d,rect_y2,04h call show_i nfoInit_w 20d,06d,0eh,dl,39d,yi nfu,0fh me nu 06d,58d,start_strshow_time 06d,64d,start_time,08 m
16、enu 08d,58d,e nd_str00000000000000000000000000show time00000000000000 0 0 0初始化字母menu 10d,58d,word_str000000000000000movah,02hmovbh,00hmovdh,04dmovdl,06dint 10h000000000000000000000000000000movax,data moves,axmovbp, offset letters movdh,03dmovdl,06dmovah,02hint 10hmovcx,39moval,00hmovbh,00hmovbl,0fh
17、。框架颜色 个人资料整翌_仅限学习使用_movah,13hint 10hjmp n extcycle00000000000000000000000000000000000000000000000000000000000from_front:sub prese nt_positi on, 39djmp backto_sifin d_zero:cmpprese nt_positi on, 39dje from _onemovah,00hn extsi:add prese nt_positi on, 01hinc sicmpsi,ahje backto_dicmpprese nt_positi on
18、,39je from _onejmp n extsifrom_one:movprese nt_positi on, 01hjmp backto_sin extcycle:lea di,letterslea si,life_flagadd prese nt_positi on ,16dcmpprese nt_positi on,39ja fromrontbackto_si:add si,word ptr prese nt_positi ondec simovah,sicmpah,01hje fin d_zerobackto_di:0 mov ah,01h0 mov si,ahpush cxxor
19、 ch,chmovcl,prese nt_positi onin c_di:inc diloop inc_dipop cx0 add di,word ptr prese nt_positi on 个人资料整翌_仅限学习使用dec di 。 DI为字母位置指针,开始指向LETTER首地址movdl,prese nt_positi onadd dl,05movah,02hmovbh,00hmovdh,03hint 10h 。找相对应都字母位置movcx,00hn extrow: push cxmovcx,00hout_cycle: 。延迟push cxmovcx,00hin_cycle:add c
20、x,01hcmpcx,1000jne in_cycle0000000000000000000000000000000push dxmovah,06h 。从键盘输入字符movdl,0ffhint 21hpop dxjz pass 。此行已经注释掉cmpal,1bh 。如果键入ESC则返回主菜单je to_start1cmpal,。如果键入SPACE则游戏暂停je pausecmpal,di 。输入字母正确!则字母消失je disappearpass: pop cxinc cxcmpcx,speedje printjmp out_cyclepause: push dx 。暂停处理movah,06h
21、movdl,0ffhint 21hpop dxcmpal,jne pausejmp passto_start1: 。返回主菜单jmp game_loseprint:movah,0ah 。在当前光标位置写空格moval,movbh,00h movcx,01h int 10h inc dhmovah,02h 。改变光标位置movbh,00hint 10hmovah,09h 。在当前光标位置写字母moval,dimovbh,00h movbl,0fh movcx,01h int 10hpop cxinc cx cmpcx,17dje print_n ext_letterjmp n extrow 。下
22、一行disappear: 。击中字母后输出空格pop cx pop cxmovah,0ah moval, movbh,00h movcx,01hint 10hadd score_ nu mber,1dadd score_ nu mber1,1dpush axpush sipush dxmoval,score_ nu mber1lea si,score_showcmpal, 9ja score_ nextinc si movsi,aljmp score_overscore_ next:inc score_ nu mber2moval,score_ nu mber2 movsi,almoval,3
23、0h movscore_ nu mber1,al inc simovsi,alscore_over:pop sipop axcall show infojmp hitprint_n ext_letter:add failurecmpfailure,39jz game_loselea si,life_flag 。击中下面的符号,符号消失add si,word ptr prese nt_positi on dec si movah,1 movsi,ah movah,0ah moval,20H movbh,00h movcx,01hint 10hinc dhhit:movah,02h 。上面字母消失
24、movbh,00hmovdh,03hint 10hmoval,di 。出现下一个新字母数值都算法add al,7dcmpal, zja convey_letter 。ja 变jgmovah,0ahmovbh,00h movcx,01h int 10hmovdi,aladd letters_co un ter,1push dxpush axpush bxpush cxcall show_co un terpop cxpop bxpop axpop dxshow_time 12d,63d,letters_cou nt,02jmp n extcyclegame_lose:call get_timetime_ch en d_time,t_timemenu 08d,58d,e nd_strshow_time 08d,64d,e nd_time,08game_aga in: movah,06h movdl,Offhint 21hjz game_aga in jmp startcon vey_letter: sub al, z add al, a movah,0ah movbh,00h movcx,01h int 10h movdi,al
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1