欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《打字练习程序》PPT课件.ppt

    • 资源ID:5514063       资源大小:225.50KB        全文页数:27页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《打字练习程序》PPT课件.ppt

    打字练习程序,电气0701尤烁、吴亚君、孟德才,实现效果从屏幕上方下落字母,从键盘输入字母,若输入正确,字母消失,效果如下。,任务分工,孟德才主要负责查找各种资料,并且搜集类似程序。吴亚军主要负责编写程序。尤烁主要负责调试及编写最后总结ppt。,设计思路,程序要求建立一个打字游戏,在运行程序时可以自行判断输入按键的真确性。从而加快使用者熟悉键盘的过程。一开始拿到题目时感觉无从着手,特别对于程序中随机部分不知道怎么处理。总认为随机就是要处理一个很复杂的程序,让计算机本身自动生成毫无规律的随机乱码。这让我思考了好长一段时间。后来了解到,就算是随机也是有规律可以追寻的。就26个字母乱序而言,可以自己编写一组乱序存储到计算机中,然后设置一个加数,从起始位置起每次与加数相加这样依次选取后一个字母,这样就可以达到随机生成字母乱序的目的。采用一些简单而巧妙的方法可以方便的完成许多看似困难的问题。考虑到设计程序的复杂性,可以将程序分为几个不同的部分加以设计和思考。比如分为游戏准备部分、随机显示字母部分、字母下落部分、字母消失和显示部分、检测按键正确与否部分、输入错误计数部分等。这样一个一个部分分别思考,最后再将所有部分有机的结合起来,这样可以让程序设计思路清晰化和简明化。对于程序中的输入与输出及光标设置等问题可以通过DOS功能调用及BIOS功能调用加以解决。程序中需要重复输入的成段的指令可以使用宏定义以减少工作量。,程序流程图,主程序,Init_game macro op1,op2,op3,op4,op5,op6;屏幕初始化 mov cx,00h mov dh,op1 mov dl,op2op6:mov ah,02h;int10h调用,功能号02h,设置光标位置 mov bh,00h;页号 int 10h push cx;将原操作数推入ss为段基址,sp为偏移地址的栈中 mov ah,0ah;int10h调用,功能号0ah,仅写字符 mov al,op3;字符 mov bh,00h;页号 mov cx,01h;字符数 int 10h pop cx;将以ss为段基址,sp为偏移地址的栈顶内容,传送到目的操作数 inc cx;自减运算 inc op4;自减运算 cmp cx,op5;做减,仅影响标志位 jne op6;跳转到op6 endm;宏定义结束,与macro对应clear_screen macro op1,op2,op3,op4;清屏宏定义 mov ah,06h;int10h调用,功能号06h,窗口上卷 mov al,00h;上卷行数 mov bh,07h;上卷行属性(颜色)mov ch,op1;左上角行号 mov cl,op2;左上角列号 mov dh,op3;右下角行号,mov dl,op4;右下角列号 int 10h mov ah,02h;int10h调用,功能号02h,设置光标位置 mov bh,00h;页号 mov dh,00h;行号 mov dl,00h;列号 int 10hendm;宏定义结束,与macro对应menu macro op1,op2,op3;菜单显示宏定义 mov ah,02h;int10h调用,功能号02h,设置光标位置 mov bh,00h;页号 mov dh,op1;行号 mov dl,op2;列号 int 10h mov ah,09h;int21h调用,功能号09h,输出字符串送显示器 lea dx,op3;输出字符串的偏移 int 21hendm;宏定义结束,与macro对应cursor macro op1,op2;置光标宏定义 mov ah,02h;int10h调用,功能号02h,设置光标位置 mov bh,00h;页号 mov dh,op1;行号 mov dl,op2;列号 int 10hendm;宏定义结束,与macro对应hidden macro;字母消隐宏定义。在当前光标位置写空格 mov ah,0ah;int10h调用,功能号0ah,仅写字符 mov al,;字符 mov bh,00h;页号,mov cx,01h;字符数 int 10hendm;宏定义结束,与macro对应display macro;显示字母宏定义mov ah,0ah;int10h调用,功能号0ah,仅写字符 mov bh,00h;页号 mov cx,01h;字符数 int 10hendm;宏定义结束,与macro对应data segment;数据段 字节型数据,学号 姓名,$结束 meg db press Enter key to continue.$;字节型数据,说明,$结束meg1 db when a letter is dropping,please hit it!$;字节型数据,说明,$结束meg2 db press ESC key to return main interface!$;字节型数据,说明,$结束meg3 db press letter shift+E to exit!$;字节型数据,说明,$结束speed dw 600d;字型数据,字母下落速度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);当字母数等于78的时候,清零position_flag db 78 dup(0);位置状态数组 present_position db 1;字母位置当前值 data ends;堆栈段stack segment para stack stack db 64 dup(0),stack endscode segment main proc far assume cs:code,ds:data,ss:stackstart:mov ax,data mov ds,ax 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 menu 05d,15d,ZK;菜单信息的宏调用 menu 09d,15d,meg menu 11d,15d,meg1 menu 13d,15d,meg2 menu 15d,15d,meg3 cursor 22,33;设置光标位置 mov ah,00h lea si,life_flag mov cx,00hinit_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,mov ah,01h;从键盘输入任意字符 int 21h cmp al,0dh;回车开始 je gamebeginexit:mov ah,4ch;其它键结束 int 21h gamebegin:mov ax,speed+12 mov speed,ax clear_screen 01d,01d,23d,78d;清屏宏调用 Init_game 23d,01d,01h,dl,78d,nextsign5;最下一行显示小花脸 cursor 1,1;设置光标位置 mov cx,00h lea si,lettersnextletter:mov ah,02h;逐个显示最上面一行字母 mov dl,si int 21h inc si inc cx cmp cx,78d je nextcycle jmp nextletternextcycle:;字母下落过程 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_zerogobackto_di:mov ah,01h mov si,ah add di,word ptr present_position dec di cursor 1,present_position;设置光标位置 mov cx,00hnextrow:push cx mov cx,00hout_cycle:;延迟 push cx mov cx,00hin_cycle:inc cx cmp cx,1000 jne in_cycle push dx mov ah,06h;从键盘输入字符 mov dl,0ffh int 21h pop dx jz pass cmp al,45H;如果键入ESC,则返回主菜单,je to_start1 cmp al,di;输入字母正确!则字母消失 je disappearpass:pop cx inc cx cmp cx,speed je print jmp out_cycleto_start1:;返回主菜单 jmp startdisappear:;击中字母后输出空格 pop cx pop cx hidden;消隐 jmp hit from_front:sub present_position,78d jmp gobackto_sifind_zero:cmp letter_counter,78d je recycle cmp present_position,78d je from_one mov ah,00hnextsi:add present_position,01h inc si cmp si,ah je equl cmp present_position,78d,je from_one jmp nextsi equl:jmp gobackto_difrom_one:mov present_position,01h jmp gobackto_sirecycle:mov letter_counter,00h mov present_position,01d lea si,position_flag mov cx,00h mov ah,00hclearsi:mov si,ah inc cx cmp cx,78d jne no_equl jmp nextcycleno_equl:inc si jmp clearsi print:hidden;消隐 inc dh cursor dh,present_position;改变光标位置 mov al,di;在当前光标位置显示字母 display;显示该字母 pop cx inc cx cmp cx,21d je print_next_letter jmp nextrow;下一行print_next_letter:;字母落到底部,lea si,life_flag add si,word ptr present_position dec si hidden;消隐 inc dh cursor dh,present_position;改变光标位置 hidden;消隐 mov ah,1 mov si,ah hit:cursor 1,present_position;光标位置回到第1行 mov al,di;出现下一个新字母 add al,7;刚敲的字母加7,生成新字母 cmp al,7ah;超过小写字母z?ja convey_letter display;显示该字母 mov di,al add letter_counter,01h jmp nextcycle convey_letter:sub al,7ah;使该字母a add al,61h display;显示该字母 mov di,al add letter_counter,01h jmp nextcycle main endpcode endsend start,部分程序说明,清屏宏定义:clear_screen macro op1,op2,op3,op4;清屏宏定义 mov ah,06h mov al,00h mov bh,0bh 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 10hendm清屏宏定义中采用了INT 10H的6号功能。令al为00h,bh为0bh,设置上卷行数为零,颜色为浅青色。对于文本框中各行各列的标号可以通过形式参量op1,op2,op3,op4设置。INT 10H的2号功能定义了光标的起始位置为0行0列。,置光标宏定义:cursor macro op1,op2;置光标宏定义 mov ah,02h mov bh,00h mov dh,op1 mov dl,op2 int 10hendm为了在程序中能快速的设置当前光标的所在位置,便于程序的书写。把INT 10H的2号功能设置为宏定义,光标的行号和列号用形式参量op1和op2代替。这样在写程序是酒可以通过宏调用快速设置光标位置。菜单显示宏定义: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 21hendm通过设置光标的位置和需要输入字符的首地址,可以快速地在想要的地方显示所需要的字符。,字母处理宏定义:hidden macro;字母消隐宏定义。mov ah,0ah mov al,mov bh,00h mov cx,01h int 10hendmdisplay macro;;显示字母宏定义 mov ah,0ah mov bh,00h mov cx,01h int 10hendm让字母消失就是通过INT 10H的0aH号功能在当前光标位置输出空格字符,这样字母就“消失”了。显示字母就是通过INT 10H的0aH号功能在当前光标位置输出字符。,显示随机字母序列:cursor 1,1;逐个显示最上面一行字母 mov cx,00h lea si,lettersnextletter:mov ah,02h mov dl,si int 21h inc si inc cx cmp cx,78d je nextcycle jmp nextletter首先设置光标起始位置,预计在第一行显示一排3组共78个字母乱序。通过INT 21H的02H号功能以cx为计数器采用je条件转移指令,将预先设置好的字母乱序表ASCII码通过寄存器间接寻址送入dl中一个一个的将字母显示出来。,字母下落过程:字母下落时限随机选择一个字母(设置光标列号,让光标列号依次加以个设定好的数值。再选取光标所指字母即可)然后依次在当前光标位置输出空格紧接着在下一行输出该字母就可以达到字母下落的目的。字母下落时要加入延时程序:out_cycle:;延迟 push cx mov cx,00hin_cycle:inc cx cmp cx,2000 jne in_cycle 这样可以让字母以一定的速度下落。在下落过程中不断地检测键盘的输入,如果键盘输入正确就跳转程序让字母消失并重新开始下一字母的下落过程,如果输入Q则终止程序的执行,输入不正确则继续检测。,push dx mov ah,06h;从键盘输入字符 mov dl,0ffh int 21h pop dx jz pass cmp al,51h;如果键入Q,则退出 je to_start1 cmp al,di;输入字母正确!则字母消失 je disappearpass:pop cx inc cx cmp cx,speed je print jmp out_cycleto_start1:;返回主菜单 jmp exitdisappear:;击中字母后输出空格 pop cx pop cx hidden;消隐 jmp hit 在程序执行中由于程序循环运行,许多加法运算可能超出预定数值,这时可以采用条件转移指令进行一次减法运算再继续执行程序。比如随机从78字母乱序中选择下一字母时没次加39,用cmp指令检测到超过78后跳转程序减去78再执行。,add present_position,39d;随机选择下一个字母 cmp present_position,78 ja from_frontgobackto_si:add si,word ptr present_position.from_front:sub present_position,78d jmp gobackto_si,输入错误计数:inc bl;输入错误计数 cmp bl,0ah jne C mov bl,gaowei inc bl mov gaowei,bl mov bl,00hC:menu 24d,1d,meg4 menu 24d,50d,meg3 cursor 24,18 mov cl,bl add cl,30h mov ch,gaowei add ch,30h mov ah,02h mov dl,ch int 21h当字母下落至最后一行时还没有输入正确的按键这时可运行程序,利用inc自加功能进行加计数统计输入错误的次数。同时将其转变成对应的ASCII码利用INT 21H的02H号功能在屏幕上同步显示出来。,运行结果,程序开始,字母下落,输入错误计数及按键提示,程序特色,吴亚君:设计了计数程序,可以统计错误个数尤烁:设计了速度切换程序,可以改变字母下落速度孟德才:设计了暂停程序。,谢谢观看,

    注意事项

    本文(《打字练习程序》PPT课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开