俄罗斯方块课程设计说明书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

俄罗斯方块课程设计说明书
1 需求分析
1.1 设计背景
几乎每个人都玩过这个游戏,也是人们接触最多的一款游戏,诺基亚手机的流行使它成为大家随手就能玩的经典游戏,它一直为大家所爱,以前的俄罗斯方块程序都是采用的是黑白色,颜色单调乏味,现如今彩屏技术的成熟运用,更使这款小游戏的种类变化到无法统计,画面更加炫丽,功能更加完善,玩法也是层出不穷。

在当今色彩斑斓的信息时代不能在在颜色方面吸引更多的玩家,特别是喜欢画面鲜艳的小朋友的注意,这就意味着将失去很多的市场,鉴于此编写一个变换颜色的方块就可以符合广大玩家对色彩的需求。

1.2 设计目的
尽管这是一项十分成熟的技术,但是对于汇编程序的初学者来说还是值得学习的,因为这款经典的小游戏包含了对计时、功能键、图像显示、背景音乐、逻辑跳转等众多的编程基础技术,具有代表性意义。

按照汇编语言程序设计的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型的俄罗斯方块。

通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,使学生能深入理解和灵活掌握教学内容。

1.3 设计内容
方块移动、旋转;显示分数;参数设置;菜单功能;文件操作。

1.4 设计要求
(1)方块左右移动、落下、旋转;
(2)显示分数、游戏进行时间和当前时间日期;
(3)参数设置:如修改功能键、音乐、改变颜色、速度、屏幕分辨率等;
(4)菜单功能:如开始、结束、暂停、设置环境参数等;
(5)文件操作:读文件、写文件等(如环境和参数设置等);
(6)预先显示下一个方块;
2 设计方案
2.1 设计思想
玩家在开始游戏前会选择游戏难度级别,难度通过方块下落的速度分为快、中、慢三
类。

以中为例,进入游戏之后方块开始掉落,每种方块的颜色都不同,但其在移动、变形等操作时只改变形状,不改变颜色,每个方块下落开始同时右上方会显示下一个要掉落的方块及其颜色;当方块不能再落下,即与已落下的方块堆在一起时颜色会变为和之前落下的方块一样的颜色,表明这个方块已不能操作,此时分数加1;若某一行堆满,则消去这一行,此时分数加10,;这期间方块下落一行,每消除一行都有声音提示。

当方块不能再掉下时,游戏结束,按任意键结束游戏。

2.2 设计模块
对俄罗斯方块游戏项目计划划分为四个模块,分别为初始化设置和窗口函数相关模块、绘制表格模块、方块左右移动旋转模块、方块下落模块。

其中绘制表格模块、方块左右移动旋转模块、方块下落模块是先决条件。

在该模块完成的基础上,初始化设置和窗口函数相关模块才能得以实现。

对初始化设置和窗口函数相关模块:该模块实现对全局变量的初始化,对窗口中菜单进行设置。

窗口函数则实现对窗口类的注册,生成窗口,以及对窗口事件的处理。

其具体功能的实现是要用的其他功能模块的子程序。

该模块还需要实现背景音乐、游戏等级、方块背景色更改等附加功能。

3 详细设计
3.1 程序设计流程图
3.2 程序参数说明
表3.1 程序参数表
3.3 程序源代码
DA TA SEGMENT
SEGMENT1C DW 0
OFF1C DW 0
BOARD DW 24 DUP(?),0FFFFH
Y DB ?
TY DB ?
XR DB ?
XL DB ?
NOW DB ?
DIRE DB ?
NXT DB ?
TIM DB 0
SPEED DB 0
CON DB 0
DV DB 0
FLG DB 0
PAD DW 0H,3C0H,0H,0H ;第1个方块形状(长条) DW 100H,100H,100H,100H
DW 0H,3C0H,0H,0H
DW 100H,100H,100H,100H
DW 0H,180H,180H,0H ;第2个方块形状(“田”)DW 0H,180H,180H,0H
DW 0H,180H,180H,0H
DW 0H,180H,180H,0H
DW 0H,380H,200H,0H ;第3个方块形状(“7”)DW 200H,200H,300H,0H
DW 0H,80H,380H,0H
DW 0H,300H,100H,100H
DW 0H,380H,80H,0H ;第4个方块形状(反“7”)
DW 300H,200H,200H,0H
DW 0H,200H,380H,0H
DW 100H,100H,300H,0H
DW 0H,180H,300H,0H ;第5个方块形状(反“Z”)
DW 100H,180H,80H,0H
DW 0H,180H,300H,0H
DW 100H,180H,80H,0H
DW 0H,300H,180H,0H ;第6个方块形状(“Z”)
DW 80H,180H,100H,0H
DW 0H,300H,180H,0H
DW 80H,180H,100H,0H
DW 0H,380H,100H,0H ;第7个方块形状(“⊥”)
DW 100H,180H,100H,0H
DW 100H,380H,0H,0H
DW 100H,300H,100H,0H
P1 DW 4 DUP(?)
P2 DW 4 DUP(?)
COLOR DB 00001001b,00001010b,00001011b,00001100b,00001101b,00001110b,00000001b
;七种颜色NCOLOR DB ?
SCORE DB 5 DUP('0'),'$' ;界面图形数据构建PADMSG DB 25 DUP(219)
TMPMSG DB 25 DUP(?)
STARTMSG1 DB 0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,' *****************Wellcome*****************',0DH,0AH,'$'
STARTMSG2 DB ' Please select speed.',0DH,0AH,'$' STARTMSG3 DB 20H,20H,' 0. Exit',0DH,0AH,'$' STARTMSG4 DB 20H,20H,' 1. Fast',0DH,0AH,'$' STARTMSG5 DB 20H,20H,' 2. Middle',0DH,0AH,'$' STARTMSG6 DB 20H,20H,' 3. Slow',0DH,0AH,'$' STARTMSG7 DB 20H,20H,' ******************************************',0DH,0AH,'$'
ENDMSG DB 0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,' Thank you for your use!',0DH,0AH,'$'
SCOREMSG1 DB 201,19 dup(205),187
SCOREMSG2 DB 186,' Score: ',186
SCOREMSG3 DB 204,19 dup(205),185
SCOREMSG4 DB 186,19 dup(32),186
SCOREMSG5 DB 186,19 dup(32),186
SCOREMSG6 DB 186,19 dup(32),186
SCOREMSG7 DB 186,19 dup(32),186
SCOREMSG8 DB 204,19 dup(205),185
SCOREMSG9 DB 186,' Left : A ',186
SCOREMSG10 DB 186,' Right : D ',186
SCOREMSG11 DB 186,' Rotate: W ',186
SCOREMSG12 DB 186,' Pause : S ',186
SCOREMSG13 DB 186,'-------------------',186
SCOREMSG14 DB 186,' Exit : Esc ',186
SCOREMSG15 DB 200,19 dup(205),188
;186等数字表示的是形状DA TA ENDS
STACK SEGMENT STACK
DB 200 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DA TA,SS:STACK
START: MOV AX,DA TA
MOV DS,AX
PUSH DS ;保存原有1ch中断
MOV AL,1CH
MOV AH,35H
INT 21H
MOV SEGMENT1C,ES
MOV OFF1C,BX ;设置新的1ch中断
MOV DX,OFFSET INT1C
MOV AX,SEG INT1C
MOV DS,AX
MOV AL,1CH
MOV AH,25H
INT 21H
POP DS
GAMEOVER:
MOV AH,00H
MOV AL,03H
INT 10H ;游戏结束SELECTSPEED:
MOV AH,09H
MOV DX,OFFSET STARTMSG1
INT 21H
MOV DX,OFFSET STARTMSG2
INT 21H
MOV DX,OFFSET STARTMSG3
INT 21H
MOV DX,OFFSET STARTMSG4
INT 21H
MOV DX,OFFSET STARTMSG5
INT 21H
MOV DX,OFFSET STARTMSG6
INT 21H
MOV DX,OFFSET STARTMSG7
INT 21H ;显示首页
MOV AH,08H ;从键盘读入一个数(8号功能调用)
INT 21H
SUB AL,'0'
MOV CL,AL
AND AL,3
CMP AL,CL
JNE SELECTSPEED ;以上判断键盘输入值0到3 就是这句话才
;出现输入其他数值重复出现
INC AL
INC CL
MUL CL
CMP AL,1H
JE EXIT
MOV SPEED,AL
MOV AH,00H ;设置图形界面,定义成640*480 16色图形模式
MOV AL,12H
INT 10H
MOV AH,0BH ;设置调色板: BH 调色板ID, BL=和ID配套使用的颜色MOV BH,01
MOV BL,00H
INT 10H
CALL INITGAME ;开始游戏(屏幕的初始化)
CALL BEGIN ;开始
CALL DELAY ;延时
MOV TIM,0H
LOOP1: STI
MOV AL,TIM
CMP AL,SPEED
JG TIME ;大于跳转
MOV AH,1
INT 16H ;取键盘缓冲区状态
JZ LOOP1 ;结果为0则转移
MOV AH,0
INT 16H ;从键盘读字符AL=字符码(A、W、S、D) CMP AL,1BH
JZ EXIT
CMP AL,'a'
JZ KA
CMP AL,'w'
JZ KW
CMP AL,'d'
JZ KD
CMP AL,'s'
JZ KS
CMP AL,09H
JNZ TIME
KS: ;按下S后的操作CALL EXIT2
JMP LOOP1
KA:
CALL LEFT ;按下A后的操作JMP LOOP1
KW:
CALL ROTATE ;按下W后的操作JMP LOOP1
KD:
CALL RIGHT ;按下D后的操作JMP LOOP1
TIME:
MOV TIM,0H
CALL DOWN
CMP CON,0
JE LOOP1
CALL BEGIN
JMP LOOP1
EXIT: ;80*25的16色文本MOV AX,0003H
INT 10H
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET ENDMSG
MOV AH,09H
INT 21H
MOV DX,OFF1C ;设置新的1ch中断MOV AX,SEGMENT1C
MOV DS,AX
MOV AL,1CH
MOV AH,25H
INT 21H ;设置中断向量
MOV AX,4C00H
INT 21H ;带返回码终止AL=返回码INT1C PROC
STI
PUSH AX
PUSH DX
MOV AX,DATA
MOV DS,AX
INC TIM
POP DX
POP AX
IRET
INT1C ENDP
;*****************************暂停游戏程序************************** EXIT2 PROC NEAR
JMP SHORT EXIT2BEGIN
EXIT2BEGIN:
PUSH AX
PUSH DS
MOV AX,SEG EXIT2
MOV DS,AX
MOV AH,7
INT 21H
POP DS
POP AX
RET
EXIT2 ENDP
DELAY PROC NEAR ;延时子程序
PUSH CX
MOV CX,00FFH
LOOP20:
LOOP LOOP20
POP CX
RET
DELAY ENDP
ROTA TE PROC NEAR ;方块变形功能
MOV SI,OFFSET PAD
MOV AL,NOW
MOV AH,0H
MOV CL,32
MUL CL
ADD SI,AX
MOV AL,DIRE
INC AL
AND AL,03H
MOV AH,0H
MOV CL,8
MUL CL
ADD SI,AX
MOV DI,OFFSET P2
MOV CX,04H
CLD
LOOP12:
PUSH CX
LODSW
MOV CL,XR
SHR AX,CL
MOV CL,XL
SHL AX,CL
STOSW
POP CX
LOOP LOOP12
CALL CHECK
CMP AL,0H
JNE SKIP10
MOV BX,0000H
CALL DISPPAD
CALL COPY21
INC DIRE
AND DIRE,3H
MOV BH,00H
MOV BL,NCOLOR
CALL DISPPAD
SKIP10:
RET
ROTA TE ENDP
RIGHT PROC NEAR ;向右移动功能CALL COPY12
MOV SI,OFFSET P2
MOV CX,04H
LOOP7: MOV AX,[SI]
SHR AX,1
MOV [SI],AX
INC SI
INC SI
LOOP LOOP7
CALL CHECK
CMP AL,0H
JNE SKIP6
MOV BX,0000H
CALL DISPPAD
CALL COPY21
CMP XL,0
JE SKIP7
DEC XL
DEC XR
SKIP7: INC XR
MOV BH,00H
MOV BL,NCOLOR
CALL DISPPAD
SKIP6:
RET
RIGHT ENDP
LEFT PROC NEAR ;向左移动功能CALL COPY12
MOV SI,OFFSET P2
MOV CX,04H
LOOP10: MOV AX,[SI]
SHL AX,1
MOV [SI],AX
INC SI
INC SI
LOOP LOOP10
CALL CHECK
CMP AL,0H
JNE SKIP8
MOV BX,0000H
CALL DISPPAD
CALL COPY21
CMP XR,0
JE SKIP9
DEC XR
DEC XL
SKIP9:
INC XL
MOV BH,00H
MOV BL,NCOLOR
CALL DISPPAD
SKIP8:
LEFT ENDP
DOWN PROC NEAR ;下落功能
CALL COPY12
INC TY
CALL CHECK
CMP AL,0H ;判断是否还能下落
JNE SKIP5
MOV BX,0000H
CALL DISPPAD
CALL COPY21
MOV BH,00H
MOV BL,NCOLOR
CALL DISPPAD
MOV CON,00H
RET
SKIP5: ;不能下落
CALL PUT ;调用放置方块程序
MOV CON,01H
RET
DOWN ENDP
;***************************放置方块程序*********************************** PUT PROC NEAR
MOV BH,0H
MOV BL,0h
CALL DISPPAD
MOV BH,0H
MOV BL,01011001b
CALL DISPPAD
INC SCORE[4]
MOV DV,01H
MOV AH,0H
MOV AL,Y
ADD AL,Y
MOV SI,OFFSET BOARD
ADD SI,AX
MOV DI,00H
MOV CX,04H
CLD
LOOP15:
LODSW
OR AX,P1[DI]
MOV [SI-2],AX
INC DI
LOOP LOOP15
MOV SI,OFFSET BOARD ADD SI,23*2
MOV DI,SI
MOV CX,20
MOV BH,00H
MOV FLG,00H
STD
LOOP13:
LODSW
CMP AX,0FFFFH
JNE SKIP12
MOV FLG,0FFH
MOV AL,DV
SAL AL,1
MOV DV,AL
JMP LOOP13
SKIP12:
STOSW
;PUSH AX
CMP FLG,0H
JE SKIP70
PUSH CX
MOV DH,CL
ADD DH,03H
MOV DL,0AH
MOV BX,0000H
MOV BP,OFFSET PADMSG MOV CX,20
PUSH AX
MOV AX,1300H
INT 10H
POP AX
MOV CL,03H
SHL AX,CL
MOV CX,0AH
MOV DL,08H
LOOP14:
INC DL
INC DL
MOV BL,0H
SHL AX,1
JNC SKIP11
MOV BL,01011001b
SKIP11:
CALL DISPCELL
LOOP LOOP14
POP CX
SKIP70:
LOOP LOOP13
MOV AL,DV
SAR AL,1
ADD SCORE[3],AL
MOV CX,05H
MOV SI,04H
LOOP16:
CMP SCORE[SI],'9'
JNG SKIP13
INC SCORE[SI-1]
SUB SCORE[SI],0AH
SKIP13:
DEC SI
LOOP LOOP16
RET
PUT ENDP
;*******************************显示得分子程序******************************* DISPSCORE PROC NEAR
MOV AX,DATA
MOV ES,AX
MOV BP,OFFSET SCORE
MOV CX,05H ;字符串的长度
MOV DX,0635H ;DH/DL起始行/列
MOV BH,0H ;BH页号
MOV AL,0H ;BH页号
MOV BL,00110100B ;BL属性
MOV AH,13H
INT 10H ;显示字符串
RET
DISPSCORE ENDP
;***************************显示下一个要出现的方块形状************************ DISPNEXT PROC NEAR
MOV AX,DATA
MOV ES,AX
MOV BP,OFFSET TMPMSG
MOV DI,BP
MOV SI,OFFSET PAD
MOV AL,NXT
MOV AH,0
MOV BL,32
MUL BL
ADD SI,AX
CLD
MOV CX,04H
LOOP8: ;循环随机取下一个方块
PUSH CX
LODSW ;块装入指令
MOV CL,06H
SHL AX,CL
MOV CX,04H
LOOP9:
MOV BL,20H
SHL AX,1
JNC SKIP2
MOV BL,219 ;负责右边提示框中的下一个图形显示的像素SKIP2: MOV [DI],BL
INC DI
MOV [DI],BL
INC DI
LOOP LOOP9
MOV DX,0c30H
POP CX
SUB DH,CL
PUSH CX
MOV CX,08H
MOV BH,0H
PUSH SI
MOV AH,0H
MOV AL,NXT
MOV SI,AX
MOV BL,COLOR[SI]
POP SI
MOV AX,1300H
INT 10H
POP CX
MOV DI,BP
LOOP LOOP8
RET
DISPNEXT ENDP
;******************************************************************** COPY21 PROC NEAR
CLD
MOV SI,OFFSET P2
MOV DI,OFFSET P1
MOV CX,08
REP MOVSB ;移下一行
MOV CL,TY
MOV Y,CL
RET
COPY21 ENDP
;********************************************************************* COPY12 PROC NEAR
CLD
MOV SI,OFFSET P1
MOV DI,OFFSET P2
MOV CX,08
REP MOVSB ;移下一行
MOV CL,Y
MOV TY,CL
RET
COPY12 ENDP
;********************************************************************* BEGIN PROC NEAR
MOV AL,NXT
MOV NOW,AL
CALL RANDOM
CALL DISPSCORE
CALL DISPNEXT
;FORMA T V ALUE
MOV DIRE,0
MOV Y,4
MOV TY,4
MOV XR,0
MOV XL,0
MOV AH,0
MOV AL,NOW
MOV SI,AX
MOV CL,COLOR[SI]
MOV NCOLOR,CL
MOV DI,OFFSET P2
MOV SI,OFFSET PAD
MOV BL,32
MUL BL
ADD SI,AX
MOV CX,08
CLD
REP MOVSB ;移下一行
CALL COPY21
MOV BH,0H
MOV BL,NCOLOR
CALL DISPPAD
CALL CHECK
CMP AL,0
JE SKIP1
MOV DL,07H
MOV AH,02H
INT 21H
MOV AH,08H
INT 21H
JMP GAMEOVER
SKIP1:
CALL DELAY
MOV TIM,0H
RET
BEGIN ENDP
;**************************判断是否能放置方块*************************** CHECK PROC NEAR ;RETURN AL=0/F 0:能F:不能
MOV AH,0H
MOV AL,TY
ADD AL,TY
MOV SI,OFFSET BOARD
ADD SI,AX
MOV DI,00H
MOV CX,04H
CLD
LOOP6: LODSW
AND AX,P2[DI]
JNZ SKIP4
INC DI
INC DI
LOOP LOOP6
MOV AL,00H
RET
SKIP4:
MOV AL,0FH
RET
CHECK ENDP
;**************************显示下落的方块形状***************************** DISPPAD PROC NEAR ;BX BH=PAGE BL=COLOR
MOV SI,OFFSET P1
MOV CX,04H
MOV DL,08H
MOV DH,Y
ADD DH,04H
PUSH DX
CLD
LOOP2: LODSW
POP DX
PUSH DX
SUB DH,CL
PUSH CX
MOV CL,03H
SHL AX,CL
MOV CX,0AH
LOOP3: INC DL
INC DL
SHL AX,1
JNC SKIP3
CALL DISPCELL
SKIP3: LOOP LOOP3
POP CX
LOOP LOOP2
POP DX
RET
DISPPAD ENDP
;***************************方块在下降时界面的保护*********************** DISPCELL PROC NEAR ;DH=ROW DL=COL BH=PAGE BL=COLOR 保护现场PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
PUSH SI
MOV BP,OFFSET PADMSG
MOV CX,02H ;字符串长度
MOV AX,1300H ;AL写方式
INT 10H ;显示字符串,显示字符串
CMP BL,0H ;黑色区域
JE SKIP20
;在对应的颜色块里绘制出方块的组成(由小表格组成)
MOV AH,0H ;表格的列
MOV AL,DH
MOV CL,16
MUL CL
MOV SI,AX
MOV AH,0H ;表格的行
MOV AL,DL
MOV CL,8
MUL CL
MOV DI,AX
MOV AX,0C00H ;AL颜色值(游戏界面背景颜色)MOV DX,SI
ADD DX,15 ;DX/CX像素行/列
MOV CX,16
LOOP21: ;循环显示小表格下侧部分
ADD CX,DI
DEC CX
INT 10H ;写像素
INC CX
SUB CX,DI
LOOP LOOP21
MOV DX,SI
MOV CX,15
ADD DI,15
LOOP22: PUSH CX ;循环显示小表格左侧和下侧的部分MOV CX,DI
INT 10H
INC DX
POP CX
LOOP LOOP22
SUB DI,2
DEC DX
MOV CX,13
LOOP23: PUSH CX ;循环显示小表格左侧部分DEC DX
MOV CX,DI
INT 10H
SUB CX,12
MOV AL,07H
INT 10H
MOV AL,00H
POP CX
LOOP LOOP23
MOV AX,0C07H
MOV DX,SI
ADD DX,1
MOV CX,12
SUB DI,12
LOOP24: ADD CX,DI ;自动下落
INT 10H
SUB CX,DI
LOOP LOOP24
CALL SOUNDF
SKIP20:
POP SI ;恢复现场
POP DI
POP DX
POP CX
POP BX
POP AX
RET
DISPCELL ENDP
;***************************初始化屏幕:25*80***************************** CLS PROC NEAR
MOV CX,0 ;CH/CL=左上角行/列号
MOV DH,24 ;DH/DL=右上角行/列号
MOV DL,79
MOV BH,0 ;卷入行属性
MOV AX,600H ;AH=06H AL=00H初始化窗口
INT 10H
RET ;返回CALL调用下一句执行
CLS ENDP
;*************************下一个随机出现的方块************************** RANDOM PROC NEAR
LOOP5: IN AX,40H
INC AL
AND AL,07H
CMP AL,07H
JE LOOP5
MOV NXT,AL
RET
RANDOM ENDP
;*********************初始化屏幕:25*80(右上角的小方框)***************** INITGAME PROC NEAR
CALL CLS
MOV AX,DATA ;画边框
MOV ES,AX
MOV CX,15
MOV BP,OFFSET SCOREMSG1 ;字符串地址21个
MOV DX,052aH ;行=05; 列=2A 绘制了21列
LOOP72:
PUSH CX
MOV CX,21 ;字符串长度MOV AL,0H ;写方式
MOV BH,0H ;页号
MOV BL,01011010B ;属性
MOV AH,13H ;显示字符串INT 10H
ADD BP,21 ;字符串地址INC DH ;下一行
POP CX
LOOP LOOP72
MOV BP,OFFSET PADMSG ;面板框MOV BP,OFFSET PADMSG ; 25 DUP 219 MOV CX,0024 ;字符串长度MOV DX,0308H ;行=03; 列=8 MOV BH,0H ;页号
MOV AL,0H ;写方式
MOV BL,00110100B ;属性
MOV AH,13H ;显示字符串INT 10H
MOV DX,1808H ;行=18; 列=8 INT 10H
MOV CX,20 ;字符串长度MOV DX,0308H ;行=03; 列=8 LOOP4: MOV SI,CX
MOV CX,02
INC DH
INT 10H
MOV CX,SI
LOOP LOOP4
MOV CX,20
MOV DX,031EH
LOOP11: MOV SI,CX
MOV CX,02
INC DH
INT 10H
MOV CX,SI
LOOP LOOP11
CLD ;面板板式
MOV DI,OFFSET BOARD
MOV CX,24
MOV AX,0E007H
REP STOSW
MOV DI,OFFSET SCORE ;面板分数
MOV AL,'0'
MOV CX,05H ;分数最长为5位
REP STOSB
CALL RANDOM
MOV AL,NXT
MOV NOW,AL
RET
INITGAME ENDP
;***************************通用发声子程序***************************** SOUNDF PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AL,0B6H ;0B6H=10110101 计数器2为方式2先读写低字节后读写高字节OUT 43H,AL ;写入方式控制字
MOV DX,12H
MOV AX,348CH
DIV DI
OUT 42H,AL ;写入低字节计数器
MOV AL,AH
OUT 42H,AL ;写入高字节计数器
IN AL,61H ;PB的端口地址
MOV AH,AL
OR AL,3 ;D1D0=PB1PB0==11 其他为不变PB=1 表示打开扬声器
;只有PB0PB1同;时为高电平扬声器才能发声
OUT 61H,AL ;直接控制发声
WAIT1:
MOV CX,663
CALL WAITF
DEC BX
JNZ W AIT1
MOV AL,AH
OUT 61H,AL
POP DI
POP DX
POP CX
POP BX
POP AX
RET
SOUNDF ENDP
;*******************************扬声器延时****************************** WAITF PROC NEAR
PUSH AX
WAITF1:
IN AL,61H
AND AL,10H
CMP AL,AH
JE WAITF1
MOV AH,AL
LOOP W AITF1
POP AX
RET
WAITF ENDP
CODE ENDS
END START
3.4 任务划分
XXX 绘制组成方块的表格、显示下落方块、背景音调模块XXX 方块左右移动、下落和变形模块
XXX 界面、窗口设计模块
XXX 方块放置模块
3.5 运行结果
下面是开始游戏后的界面:
图 3.2 运行结果
4 设计总结
这次课程设计尽管时间短任务小,但是我们第一次用汇编编程,由于很多都是第一次尝试,起初代码运行并不能如我们所想,所以前期比较费力,但是我们经过多方查找资料以及参考类似的模块代码,在一次次不断尝试和修改错误后代码终于能运行了,在其基础之上还添加了其他的模块并调试成功,给了我们极大的鼓舞。

经过这次课程设计使我们对汇编有了更深的认识和理解,巩固本学期学习的相关汇编语言程序设计知识的同时也学到了其它一些诸如版本兼容、汇编环境等汇编语法之外的知识,使我们的知识和经验更加的全面,虽然任务相对容易,但理论和实践是完全同的两件事,尤其对于我们初学者有非常多值得学习的地方,这些经验对于我们今后从事该行业的工作都是一笔宝贵的财富。

编程工作中很重要的一点就是团队,这次课设中遇到的很多问题我们都参与了研究和讨论,也取得了很大的成效,锻炼了我们合作能力、沟通能力、吃苦耐劳。

我们相信,一个合格的编程人员不但具有完备的知识理论,还要有团队合作的能力。

——XXX 通过两周的课程设计,使我对汇编语言有了更深入的了解,进一步掌握了对汇编语言编程的运用。

这次的课程设计,我一边学习,一边总结,一边进步。

刚学习汇编语言对汇编语言只是一知半解,对汇编编程也很生疏,在做课程设计的同时,进一步学习汇编语言,不断的加深对汇编语言的理解和对汇编编程的运用。

其次,通过这次课程设计,我认识到了团队合作的重要性,团队合作是一种很必要的能力,每个人的能力都是有局限的,没有人能只凭借自己一个人的能力就把一件事情做好,只有通过团队中每个成员的努力,发挥自身的长处,取长补短,最后才能将其做到最好。

在程序的设计中,我们彼此之间在设计的选择中发生了很多的分歧,但是通过大家的讨论协商,都达到了一个共识,最后大家共同努力完成了这次设计实验,大家的共同努力是这课程设计事倍功半。

在这次课程设计实验中,我们不仅学到了书本上的东西,而且增强了我们的动手能力,而且还学到了许多书本上没有的东西。

我们学到的所有东西都将让我们获益良多,不管是对于以后的学习还是工作、生活。

——XXX 经过一个星期的不断努力,课程设计内容基本上完成了。

经过一个星期的不断努力,
课程设计内容基本上完成了。

首先,在这里要感谢我班上的同学,他们都在身边督促我,我们也互相鼓励,共同进步。

最重要的要感谢我的组长和组内其他成员,是他们对我的课题提出了许多富有启发性和建设性的意见和建议。

在做课程设计中碰到了许多的问题,从一开始的代码错误到实现课程设计报告的格式,特别是在代码中的错误,大大小小的问题很多,但是经过自已的反复查阅和同学的帮助,都一一克服了。

另外在程序设计说明书的编写时在格式的问题上也遭遇到了很大的挑战,但是在老师和同学的帮助下最终修改完善。

我相信以后再大的事,有自己的努力和朋友的帮助,没有什么事情是可以难倒我的。

——XXX 这次的课设设计起来有一点困难,在开始的几天的时间里,几乎都是在网上找资料和学习一些新的功能,平时在书本学习的都是一条一条的指令,没有很清楚地理解指令的真正含义。

在这次课程设计中我们在老师的指导下学习了很多课堂上没有学习到的知识也体会到同学之间合作的重要性,体会到只有平时多练习,多看程序才能自己编写程序,自己调试程序。

通过这次的课程设计使我对汇编语言有了更加深入的学习,通过几天的设计,我掌握了汇编语言的重要性,它的强大型的一方面,平时学习的一些指令根本看不出来有什么用处,结果在做的时候就突然要用到,然后绞尽脑汁也想不到,只有翻开书在字里行间来来回回的找,才能看见这些平时不注意的东西。

我也意识到了汇编语言的一些特点,执行的高效率和机器相关性,但是缺点是可移植性低,还有就是编写复杂,调试也比较复杂,大概是汇编语言中用了大部分的转移指令的缘故。

参考文献
[1]李大友.微型计算机原理[M].北京:清华大学出版社,1998.
[2]陈够喜.微机原理应用实验教程[M].北京:人民邮电出版社,2006.
[3]戴梅萼.微型计算机技术及应用[M].北京:清华大学出版社,1997.
[4]沈美明,温冬婵.IBM PC汇编语言程序设计[M].北京:清华大学出版社,2005.
[5]周明德.微型计算机系统原理及应用[M].北京:清华大学出版社,1997.
[6]周细,黄文兰.微型计算机及其应用(第二版)[M].武汉:华中理工大学出版社,1997.。

相关文档
最新文档