计算机方块游戏软件设计Word格式文档下载.docx

上传人:b****3 文档编号:7012400 上传时间:2023-05-07 格式:DOCX 页数:49 大小:180.33KB
下载 相关 举报
计算机方块游戏软件设计Word格式文档下载.docx_第1页
第1页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第2页
第2页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第3页
第3页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第4页
第4页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第5页
第5页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第6页
第6页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第7页
第7页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第8页
第8页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第9页
第9页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第10页
第10页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第11页
第11页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第12页
第12页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第13页
第13页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第14页
第14页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第15页
第15页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第16页
第16页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第17页
第17页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第18页
第18页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第19页
第19页 / 共49页
计算机方块游戏软件设计Word格式文档下载.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机方块游戏软件设计Word格式文档下载.docx

《计算机方块游戏软件设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机方块游戏软件设计Word格式文档下载.docx(49页珍藏版)》请在冰点文库上搜索。

计算机方块游戏软件设计Word格式文档下载.docx

 

1任务分析

根据题目要求

使用汇编语言设计一个运行于计算机的方块游戏软件,软件应实现将从屏幕上方下落的方块用键盘控制移动,按下某键停止。

可以附加将方块换为别的形状和堆砌效果,扩展为著名益智游戏俄罗斯方块。

由此得出以下需要解决的问题:

1)随机显示不同形状的方块

2)键盘控制其左右移动,旋转变换,向下快速移动

3)方块可以持续下落,到底后停止,并且能够进行叠加。

4)当有某一行填满时,进行消行处理。

2主界面及数据结构设计

屏幕设置为320x200四色图形显示模式;

屏幕左上角为原点X轴方向为320个点Y轴方向为200个点;

边框宽度为3个点阵宽度,颜色为青;

基本方块显示区域大小为200x160点阵;

每个方块占用10x10个点阵,方块颜色为洋红,四个方块组成一个大方块。

绘制边框如下图所示:

图2.1

二维表的建立:

当前方块的坐标信息在数据段中有定义,QUA_NOW即实时信息,如何能够让下落的方块在检测到下方有原先掉下来的方块或者已经到达游戏界面的底部从而停下来呢。

建立一个静态数据二维表与游戏界面映射。

映射表如下:

图2.2

;

定义静态数据

STATIC_DOTDB3DUP

(1)

DB20DUP(0)

DB6DUP

(1)

DB55DUP

(1)

栅格部分初始化为1,之后不对该静态数据位置操作。

栅格部分是不会显示在屏幕上,只是在静态数据表中存在,以此方便对方块的出界,叠加等的判断。

3各个关键算法的实现

3.1出界、叠加判断算法的实现

先将QUA_NOW传送给与其同类型,等长的一维数据表QUA_TEMP。

当再将QUA_TEMP进行一次操作,比如向下操作:

将QUA_TEMP中的Y轴坐标加1,X轴坐标不变,再调用NOT_DONE函数分别找到QUA_TEMP中四个方块位置在静态数据表中的映射,判断该位置数据是否为1,如若有一个1则,将NOT_DONE_CAN标志位置为1,即不可动作,否则将其置为0。

DOWN_GOON函数则通过判断NOT_DONE_CAN标志位来选择是否将QUA_TEMP的值传送给QUA_NOW,如若NOT_DONE_CAN为0,即可以动作,则传送数据,同时刷新显示。

否则不可动作,则将QUA_NOW当前位置在静态数据表中的映射数据置为1,即跟新静态数据二维表。

其他判断依此类推。

3.2旋转算法的实现

将各个方块的不同角度定义在一个方块基础二维数据表中。

定义了两个变量QUA_NUM和QUA_ANGLE即方块类型和方块角度,通过这两个变量进行转换,与STATIC_DOT偏移地址相加得到一个偏移地址,通过该偏移地址查表得该数据项,把这8个数据与位置偏移量相加得到一个新值赋给QUA_NOW,再刷新显示。

便可实现角度的变换。

3.3消行算法的实现

当有出现方块不可动作,即NOT_DONE_CAN为1时,先将QUA_NOW当前位置在静态数据表中的映射数值置为1,之后判断静态数据表中是否有一整行为1,是则将该行以上数据整体下移一行,之后刷新显示,即通过判断静态数据表中的各个位置是否为1,为1则刷新为洋红色否则刷为黑色;

如若该行有0存在,则进行下一行的判断。

4基本函数介绍

4.1主程序设计

进入程序后先进行屏幕初始化,之后显示调用显示边框函数,再显示新方块。

检测按键状态,有按下则读取该按键ASCII码,通过判断该ASCII码,执行相应动作。

之后再度检测键盘状态。

图4.1

4.2矩形显示函数:

DISP_RECT

不同方块的显示方法,采用拼接法,由四个10x10的红色点阵组成。

通过四个方块相对位置的组合,形成不同样式的俄罗斯方块。

所以建立了不同俄罗斯方块相对位置表,采用查表法,找出想要显示的方块的数据信息。

函数DISP_RECT既是实现此功能的

入口参数:

RECT_A_XDW?

RECT_A_YDW?

RECT_B_XDW?

RECT_B_YDW?

RECT_COLORDB?

通过矩形方块的左上角的A点与右下角的B点确定一个矩形方块的大小和坐标位置,由这两个点确定该矩形,通过调用INT10H显示中断写像素点命令,对该区域内的全部点赋予颜色。

程序如下:

DISP_RECTPROCNEAR

PUSHAX

PUSHCX

PUSHDX

MOVAH,0CH;

指明写点调用

MOVAL,RECT_COLOR;

存入颜色与AL中

MOVDX,RECT_A_Y;

行起始坐标

MOVCX,RECT_A_X;

列起始坐标/循环次数

DISP_X:

MOVDX,RECT_A_Y

DISP_Y:

INT10H

INCDX

CMPDX,RECT_B_Y

JNZDISP_Y

INCCX

CMPCX,RECT_B_X

JNZDISP_X

POPDX

POPCX

POPAX

RET

DISP_RECTENDP

为了保证整个程序结构性能良好,不会出现与其他函数体同时用一个寄存器而使得程序跑飞。

在进入程序后先将几个主要寄存器推入堆栈,当程序退出时,又将寄存器值从堆栈中送回。

堆栈采用的是先进后出的算法,所以应当注意顺序。

调用该函数时,先得对RECT_COLOR等几个入口参数进行赋值。

这样接口,便于向后兼容,使用起来方便。

流程图如下:

图4.2

4.3向右处理函数:

RIGHT

先将通用寄存器AX,BX,CX,DX压入堆栈。

再将QUA_NOW中的数据传送到QUA_TEMP中,再对QUA_TEMP中X轴坐标值全部加1,之后调用NOT_DONE函数对能否动作进行判断,之后读取NOT_DONE_CAN标志位,根据此值选择是否将QUA_TEMP值赋给QUA_NOW。

其他处理程序如向左,下落,以及旋转判断程序也是这种模式。

右边按键按下后的处理程序

RIGHTPROCNEAR

PUSHBX

PUSHAX

CALLMOV_NOW_TEMP

MOVBX,OFFSETQUA_TEMP

MOVCX,4

L_RIGHT1:

MOVAL,[BX]

INCAL

MOV[BX],AL

ADDBX,2

LOOPL_RIGHT1

CALLNOT_DONE

MOVAL,NOT_DONE_CAN

CMPAL,1

JZL_RIGHT_OUT

MOVRECT_COLOR,COLOR_BLACK;

黑色/即清除该方块

CALLDISP_QUA

CALLMOV_TEMP_NOW

MOVRECT_COLOR,COLOR_RED;

再次显示该方块

CALLDISP_QUA

L_RIGHT_OUT:

POPBX

RIGHTENDP

图4.3

5演示效果

图5.1

6总结与体会

本次微机原理与接口技术课程设计历时两个礼拜,由于考试原因,与自动控制课程设计同时进行,所以时间上比较紧,拿到这个题目时,感觉有点难度,因为从未用汇编语言在PC机上编过程序,心里没有任何把握,经过上网查资料后感觉可行性还是蛮高的,就想着挑战以下自己的能力,提出更高难度的要求,编写一个俄罗斯方块游戏,上网上找资料后发现,这个已经有很多同学做过,而且做得蛮漂亮,但是汇编的程序可读性非常差,而俄罗斯方块游戏的代码又非常长,所以可借鉴性很少,很难分析出对方的算法是什么,由此,必须自己设计一个比较合适的算法才行,根据该想法,我一步一地进行设计,慢慢的从头开始写,从最底层的方块显示函数,到高一点的旋转算法的实现,都是一点一滴积累起来的。

初步设计一个数据结构之后能够实现一定的功能,当想增加更多功能时,发现原先的数据结构与接口以及算法等不适宜了,于是从底层修改结构,以求能够满足接下来要实现的功能,如此反复,经过一个礼拜的编写后,思路渐渐清晰,基本结构也确定,最后一天完善了程序。

为了能够很好的往后兼容,在设计程序架构的时候,我进行了仔细的研究,充分考虑其接口的开放性与方便性,对接口的设计做到了非常合适,并且留下很大的发展空间。

虽然由于时间的缘故,未能实现俄罗斯方块额全部功能,如统计分数、设置难度等级,但是可增加性的优点,便于今后有时间对其改善。

本次微机原理课程设计的过程中让我充分感受到了汇编语言的魅力与缺陷,同时感受到了8086兼容机的限制,尤其是寄存的限制,让程序非常难写。

总得来说,在这次微机原理课程设计过程中,我学到了很多东西。

7参考文献

[1]周佩玲,彭虎.微机原理与接口技术.北京:

电子工业出版社,2007[2]宋杰.微机原理与接口技术课程设计.北京:

机械工业出版社,2005[3]戴梅萼,史嘉权.微型计算机技术及应用(第3版).北京:

清华大学出版社,2008[4]于海生.微型计算机控制技术.北京:

清华大学出版社,2008[5]范会敏.微型计算机原理及接口技术应用.北京:

科学出版社,2005

附录:

部分程序清单:

本代码由丘八(陈兵的网名)写于微机原理与接口技术课程设计之际。

时间:

2011.01.12,地点:

武汉理工大学自动化学院本科生创新基地

实现的功能非常简单,未能实现俄罗斯方块游戏的全部功能,并且其中具有一些bug还未解决。

只是粗略得设计了一下界面,比较不美观,还待改善

锥栈段定义

STACK1SEGMENTSTACK

DB400DUP(?

STACK1ENDS

颜色变量

COLOR_GREENEQU01

COLOR_BLUEEQU03

COLOR_REDEQU02

COLOR_BLACKEQU00

数据段定义

DATASEGMENT

WORD_LAST_DISPDB'

ThisisaeasyTetriswritenbyqiuba'

DB'

inWuhanUniversityofTechnologyon2011.01.12Pressanykeytogobacktowindows$'

NOT_DONE_CANDB0;

能否动作标志位

数据刷新零时数

TEMP_DEL_ROWDB0

RAND_TEMPDB0

RAND_NUMDB0

基础矩形方块显示坐标数据/A点到B点的矩形

前景颜色/即将要显示的方块的颜色/边框颜色/每次调用颜色前应先给它赋值

RECT_COLORDB01

中文字符输出数据

CH_XDW0

CH_YDW0

CH_COLORDB3

CH_ADDRDW0

CH_Y_TEMPDW0

CH_X_TEMPDW0

时间定时器

TIME_COUNT1DW1000

TIME_COUNT2DW5000

TIME_SETDW1300

当前方块位置变量/该处为动态数据

QUA_NOWDB0;

1_X

DB0;

1_Y

2_X

DB1;

2_Y

3_X

3_Y

4_X

DB2;

4_Y

QUA_TEMPDB8DUP(0)

STATIC_DOTDB400DUP

(1)

STA_DOT_XDB0;

静态数据坐标

STA_DOT_YDB0

STA_DOT_CANDB0;

静态数据标志位

定义各个形状的方块结构

QUA_ALLDB0,0,0,1,1,1,1,2;

方块基础数据表

DB1,0,2,0,0,1,1,1

DB0,0,0,1,1,1,1,2

DB1,0,1,1,0,1,0,2

DB1,0,0,0,1,1,2,1

DB1,1,1,0,0,1,2,1

DB0,1,0,0,1,1,0,2

DB1,0,0,0,1,1,2,0

DB1,1,1,0,0,1,1,2

DB1,1,0,0,0,1,2,1

DB0,1,0,0,1,0,0,2

DB1,0,0,0,2,0,2,1

DB1,1,1,0,1,2,0,2

DB1,1,0,1,2,0,2,1

DB0,1,0,0,0,2,1,2

DB1,0,0,0,2,0,0,1

DB1,1,0,0,1,0,1,2

DB0,0,0,1,1,0,1,1

DB1,0,0,0,2,0,3,0

DB0,1,0,0,0,2,0,3

QUA_NUMDB0;

方块类型变量/共有七种选择

QUA_ANGLEDB0;

方块角度变量/有四种选择

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK1

START:

;

主程序开始

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAH,0

MOVAL,04

INT10H;

设置320×

200彩色图形方式

MOVAH,0BH

MOVBH,01H

MOVBL,00H

设置彩色组

MOVBH,00H

MOVBL,0BH

设置背景颜色

MOVAH,03H

MOVAL,05H

MOVBH,03H

MOVBL,0CH

INT16H

MOVRECT_COLOR,COLOR_GREEN;

前景颜色/即将要显示的方块的颜色/边框颜色/

CALLDISP_BORDER;

边框的显示

CALLNEW_QUA

GOON:

STI;

主循环开始

CALLDOWN_GOON

MOVAH,1

JZGOON

CMPAL,'

Q'

JZGET_OUT

A'

JZKEY_A

D'

JZKEY_D

W'

JZKEY_W

S'

JZKEY_S

JMPGOON;

主循环结束

KEY_A:

CALLLEFT

JMPGOON

KEY_D:

CALLRIGHT

KEY_W:

CALLROTATE

KEY_S:

CALLFAST_DOWN

GET_OUT:

退出点

MOVAH,00H

MOVAL,03H

设置显示模式

MOVDX,OFFSETWORD_LAST_DISP

MOVAH,09H

INT21H;

输出字符串

MOVAH,08H

等待按键

MOVAX,4C00H

返回DOS

向下键按下后处理程序

FAST_DOWNPROCNEAR

MOVAX,100

MOVTIME_SET,AX

FAST_DOWNENDP

左边按键按下后的处理程序

LEFTPROCNEAR

L_LEFT1:

DECAL

LOOPL_LEFT1

JZL_LEFT_OUT

CALLMOV_TEMP_NOW

MOVRECT_COLOR,COLOR_RED;

再次显示该方块/颜色不变/此处为红色

L_LEFT_OUT:

LEFTENDP

LOOPL_RIGHT1

JZL_RIGHT_OUT

旋转处理程序

ROTATEPROCNEAR

MOVAL,QUA_ANGLE

CMPAL,3

JNAL_ROTATE1

XORAL,AL

L_ROTATE1:

MOVQUA_ANGLE,AL

MOVDI,OFFSETQUA_ALL;

对地址变量进行变换/在存入DI中

MOVDL,QUA_NUM

MOVAL,4

MULDL;

相乘结果放在AX中/并且AH应该是0

MOVDH,QUA_ANGLE

ADDDH,AL

MOVAL,8

MULDH

ADDDI,AX;

变换后存入DI中

MOVDL,[DI]

INCDI

MOVDH,[DI]

INCBX

MOVAH,[BX]

SUBAL,DL

SUBAH,DH

MOVCX,3

L_ROTATE2:

ADDDL,AL

MOV[BX],DL

ADDDH,AH

MOV[BX],DH

LOOPL_ROTATE2

JZL_ROTATE_OUT;

等于1即不可动作/则退出

再次显示该方块/颜色不变/此处为红色

L_ROTATE_OUT:

P

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2