汇编语言俄罗斯方块课设.docx

上传人:b****7 文档编号:23541491 上传时间:2023-05-18 格式:DOCX 页数:35 大小:1.36MB
下载 相关 举报
汇编语言俄罗斯方块课设.docx_第1页
第1页 / 共35页
汇编语言俄罗斯方块课设.docx_第2页
第2页 / 共35页
汇编语言俄罗斯方块课设.docx_第3页
第3页 / 共35页
汇编语言俄罗斯方块课设.docx_第4页
第4页 / 共35页
汇编语言俄罗斯方块课设.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

汇编语言俄罗斯方块课设.docx

《汇编语言俄罗斯方块课设.docx》由会员分享,可在线阅读,更多相关《汇编语言俄罗斯方块课设.docx(35页珍藏版)》请在冰豆网上搜索。

汇编语言俄罗斯方块课设.docx

汇编语言俄罗斯方块课设

课程设计

课程名称汇编语言课程设计

题目俄罗斯方块

专业

班级

学号

姓名

指导教师

摘要

近年来,随着游戏产业的突飞猛进,游戏玩家的技术也是与日俱增,当你看见游戏高手完美的表演时,你是否想过我也能达到那种水平,本程序采用全世界最金典的游戏—俄罗斯方块作为背景,程序设置了鼠标和键盘两个选择方式,游戏运行时随着等级的提高而速度加快,这需要玩家快速操作。

因此,本程序主要意义是为高手玩家提训练平台。

其次也可为刚踏入游戏领域的新手们,提供一个很好的锻炼机会。

本次课程设计采用的是汇编语言。

汇编语言,是用英文缩写形式的助记符书写指令。

汇编语言是一种面向CPU指令系统的程序语言,它采用指令系统的助记符来表示操作码和操作数,用符号地址表示操作数地址。

用汇编语言编写程序在输入计算机后,需要将其翻译成目标程序,计算机才能执行相应指令,这个翻译过程成为汇编,完成汇编任务的程序称为汇编程序。

所以我在MASM汇编程序中进行汇编,通过相应的代码来调用相应的指令实现编密码。

本程序要在windows环境下写一个程序,能够提供简单的用户图形界面,启动程序后进入该界面,用户界面由一定数量的小方格组成的方块构成。

用户可以根据相应的提示进行一些功能上的选择,如修改音乐,方块颜色和游戏难度。

当游戏开始时,计算机将随机抽取方块的放到方格上。

此游戏允许玩家旋转方块,左右移动,加速向下。

程序要实现对满行的消除并记录得分以及对游戏的结束判断。

关键词:

俄罗斯方块小游戏;俄罗斯方块游戏的实现;汇编语言

 

Abstract

Inrecentyears,alongwiththegameindustrymakeaspurtofprogress,butalsogrowwitheachpassingdaygameplayer,whenyouseethegamemasterperfectperformance,doyouthinkIcanreachthatlevel,theprogramusestheworld'smostGoldengames-Tetrisasbackground,theprogramsetupthemouseandkeyboardtwoselection,runninggamewiththelevelofimprovementandthespeed,whichrequiresthegameplayerfastoperation.Therefore,thisprocedurethemainsignificanceistoprovidetrainingplatformforthemastergameplayer.Secondly,canalsobeenteredthegamedomainnovices,providesagoodopportunitytoexercise.

Thecoursedesignistheassemblylanguage.Assemblylanguageisused,Englishabbreviatedformofmnemonicwritinginstruction.AssemblylanguageisaprogramminglanguagefortheCPUinstructionsystem,itusestheinstructionmnemonicstorepresenttheopcodeandoperand,saidoperandaddresswithasymbolicaddress.Assemblylanguageprogrammingisenteredintothecomputer,needtobetranslatedintothetargetprogram,acomputercanperformthecorrespondinginstructions,thetranslationprocessintoassembly,completetheassemblytaskprogramscalledassembler.SoIwascompiledinMASMassembler,realizationofencryptionbythecorrespondingcodetocallthecorrespondinginstruction.ThisprocedureistowriteaprograminWindowsenvironment,canprovideasimplegraphicaluserinterface,afterstartingtheprogramintotheinterface,theuserinterfaceiscomposedofanumberofsmallsquarebox.Theusercanselectsomefunctionsaccordingtothecorrespondingprompts,suchasmusic,thecolorandthedifficultyofthegamebox.Whenthegamebegins,thecomputerwillrandomlyonthegridbox.ThisgameallowsthegameplayerKLAX,movearound,andacceleratedown.Theprogramtoachievethefulllineeliminationandrecordthescoreandthegameend.

Keywords:

Tetris,Tetrisgame,therealizationofassemblylanguage

 

前言

俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾造成的轰动与造成的经济价值可言说是游戏史上的一件大事。

这款游戏最初是由苏联的游戏制作人AlexPajitnov制作的,它看似简单但却变化无穷,令人上瘾。

相信大多数用户都还记得为它痴迷得茶饭不思不想的那个俄罗斯方块时代。

俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。

现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。

对于一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,俄罗斯方块游戏现在基本上是每个手机必备的游戏,种类千变万化,多种多样俄罗斯方块是个老幼皆宜的小游戏,是经久不衰的一款游戏,自从它诞生那天起就一直深受人们的喜爱。

几乎每个人都玩过这个游戏,也是人们接触最多的一款游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机时钟控制它在一定的时间不停得产生,用户根据键盘的四个方向翻转、向左、向右和向下操作,(控制键的实现是由键盘的方向键消息函数实现)。

然后程序根据这七种方块堆叠成各种不停得模型。

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

本程序是可以变换颜色的方块,在下落的过程中颜色变化,可以吸引更多的小玩家,让人觉得更加的有趣,使人的视觉得到冲击,更家的轻松。

 

游戏基本规则

游戏共有7种不同形状的方块组成,游戏开始后随机产生一个方块由屏幕顶端开始向下落下,降到底端则固定在桌面的底端,并且开始下一个方块。

在游戏窗口左边作为游戏桌面。

游戏桌面右边靠上是下一个要出现方块的形状,游戏桌面靠右下是显示得分。

如果固定到游戏桌面的方块超过了游戏桌面的顶端游戏结束。

方块固定以后如果桌面上固定的方块满一行,则消除一行并将消除一行之上的部分向下移动。

方块落下的过程中可以用左右方向键来控制方块的位置。

上下方向键用来旋转方块,即所谓的变形。

下方键用来加快下落速度。

一、程序需求分析

1.1游戏需求

28种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便玩家所需要的形态和位置落下。

游戏界面需求:

设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性。

游戏形状需求:

长条形、Z字形、反Z字形、田字形、7字形、反7字形、T字型显示需求:

当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。

当达到一定分数的时候,会增加相应的分数。

1.2功能需求

随机给出不同的形状下落填充给定的区域,若填满一条便消掉,记分,设计不同的游戏难度,即方块下落的速度不同,若在游戏中各形状填满了给定区域为输者。

1.3方块及各种变换需求

本游戏需要七种方块,而每种方块还可以进行旋转。

每种方块每行每列最多只有4个小方块。

可以将它们放在一个n*m的区域内,该区域可以看做是有许多个等面积小方块构成的区域,而这些区域的状态只有两种,被方块占据或空闲。

因此,对于整个游戏区域的空间是被占据或空闲,可以用一位数来标识。

对于七种方块和它们旋转后的形态我们可以用不同的标识进行标记。

对于旋转,游戏中所有方块都是按照逆时针旋转的规则进行的,而且在旋转过程中它们不会因为旋转而下降,总会保持在同一高度。

任何方块经过一个旋转周期还会变回原型。

 

1.4操作需求

1.41向上键

产生方块旋转操作,方块并非任何情况都能旋转,如果旋转后与小方块矩阵显示的方块有冲突或超出边界是,均不发生旋转。

因此首先要判断是否有足够的空间进行旋转。

然后是旋转是否旋转。

1.42向下键

产生方块加速下落操作,如果方块已经达到游戏区域底部或者有其他方块遮挡,则方块停止下降。

1.43向右键

产生下落方块右移操作。

首先要判断此方块是否能够发生右移,当越界或被其他显示方块阻挡时,则不能右移。

 

二、系统分析

1、问题描述

启动程序后进入该界面,用户界面由一定数量的小方格组成的方块构成。

用户可以根据相应的提示进行一些功能上的选择,如修改音乐,方块颜色和游戏难度。

当游戏开始时,计算机将随机抽取方块的放到方格上。

此游戏允许玩家旋转方块,左右移动,加速向下。

程序要实现对满行的消除并记录得分以及对游戏的结束判断。

2、任务目标

(1)在windows环境下建立一个简单的用户界面,用户可以进行功能性的菜单选择,如开始、暂停、结束等。

(2)游戏开始后,通过指定的功能键控制方块,方块可以左右移动、落下、旋转。

(3)界面上要显示分数和游戏已经开始的时间和游戏的难度,还要预先显示下一个方块。

(4)能进行简单的参数设置:

修改音乐,改变方块颜色和难度等。

(5)可以进行一些文件操作:

读文件、写文件等。

 

3、需求规定

表1用户界面需求表

功能

1.随机产生经典俄罗斯方块图形

2.设置难度级别,不同级别速度不同

3.方向键实现下落图形的左移、右移、加速下落、变形等基本操作

4.正确判断游戏结束

5.对游戏成绩进行记分

 

表2用户界面需求表

需求名称

详细要求

窗体界面友好

人机交互,玩家可以很方便进行操作

支持声音

改变背景音乐

界面颜色

能改变颜色

表3软硬件环境需求表

需求名称

详细要求

硬件要求

IntelPentiumIII800/AMDK7以上处理器、128M以上内存

支持标准网络协议的网卡

系统平台

Windows2000/WinXP/Win2003

运行环境

Windows系列

 

三、系统总体设计

对此次汇编语言与微机原理课程设计,通过在图书馆、网络上收集资料,小组成员得到一致结论用Windows平台下32位汇编为最佳选择。

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

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

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

各模块分配如下:

初始化设置和窗口函数相关模块:

陈东起

绘制表格模块:

龚彤艳

方块左右移动旋转模块:

马萧

方块下落模块:

唐银科

对初始化设置和窗口函数相关模块:

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

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

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

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

四、详细设计

由于我负责的模块是初始化以及窗口的搭建。

对初始化是进行一些简单的赋值操作,序列比较简单,不再进行流程图的复制。

又,窗口函数层次清晰,也不再进行流程图的绘制。

详细设计代码实现:

;*************俄罗斯方块(模块一:

初始化设置和窗口函数相关模块)********

;窗口生成子程序

WinMainprochInst:

HINSTANCE,hPreInst:

HINSTANCE,CmdLine:

LPSTR,CmdShow:

DWORD

LOCALwc:

WNDCLASSEX;定义一个窗口类实例变量

LOCALmsg:

MSG;定义一个消息结构

LOCALhwnd:

HWND;用于存放窗口代号

movwc.cbSize,SIZEOFWNDCLASSEX

movwc.style,CS_HREDRAWorCS_VREDRAW

movwc.lpfnWndProc,OFFSETWndProc

movwc.cbClsExtra,NULL

movwc.cbWndExtra,NULL

pushhInstance

popwc.hInstance

movwc.hbrBackground,NULL

movwc.lpszMenuName,0

movwc.lpszClassName,OFFSETClassName

InvokeLoadIcon,NULL,ICO_MAIN

movwc.hIcon,eax

movwc.hIconSm,eax

invokeLoadCursor,NULL,IDC_ARROW

invokeRegisterClassEx,addrwc;注册窗口类

invokeLoadMenu,NULL,offsetMenuName;加载Menu

movhmenu,eax

invokeCreateWindowEx,NULL,\

ADDRClassName,\

ADDRAppName,\

WS_CAPTIONORWS_SYSMENUorWS_MINIMIZEBOXorWS_DLGFRAME,\;

400,\

75,\

;CW_USEDEFAULT,\

500,\

550,\

NULL,\

hmenu,\

hInst,\

NULL

movhwnd,eax

movhwnd1,eax

invokeShowWindow,hwnd,CmdShow

invokeUpdateWindow,hwnd

.WHILETRUE

invokeGetMessage,ADDRmsg,NULL,0,0

.BREAK.IF(!

eax)

invokeTranslateMessage,ADDRmsg

invokeDispatchMessage,ADDRmsg

.endw

moveax,msg.wParam

ret

WinMainendp

;*************俄罗斯方块(模块一:

初始化设置和窗口函数相关模块)********

;窗口回调子程序

WndProcprochWnd:

HWND,uMsg:

UINT,wParam:

WPARAM,lParam:

LPARAM;窗口处理函数

LOCALhdc:

HDC;定义设备描述表代号

LOCALps:

PAINTSTRUCT;定义PAINTSTRUCT结构

LOCALpoint:

POINT

LOCALhMemDC:

HDC;内存位图代号

LOCALrect:

RECT;定义矩形区域

;定义菜单项信息结构

LOCALmenuiteminfo:

MENUITEMINFO

.IFuMsg==WM_DESTROY

invokeDeleteObject,hBitmap

invokePostQuitMessage,NULL

.ELSEIFuMsg==WM_CREATE

invokeLoadBitmap,hInstance,IDB_MAIN

movhBitmap,eax

.ELSEIFuMsg==WM_COMMAND

moveax,wParam

;对菜单项点击进行处理逻辑

.IFax==IDM_NEW

;调用初始化子程序

invokeInit

invokeEnableMenuItem,hmenu,IDM_DIJI,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_ZHONGJI,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_GAOJI,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_KAISHI,MF_ENABLED

invokeEnableMenuItem,hmenu,IDM_NEW,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_BAI,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_HEI,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_HONG,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_HUANG,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_LV,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_LAN,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_ZI,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_ZONG,MF_GRAYED

.ELSEIFax==IDM_KAISHI

movgamestate,1;设置游戏状态为1:

运行状态

;设置游戏开始时间

invokeGetTickCount

subeax,gamezantingtime

addgamestarttime,eax

;判断是否开启音乐**************************************

.ifyinyuepanduan==1

invokePlaySound,addryinyue,hInstance,SND_ASYNCorSND_LOOP;开始播放

.endif

;*****************************************************

invokeEnableMenuItem,hmenu,IDM_KAISHI,MF_GRAYED

invokeEnableMenuItem,hmenu,IDM_ZANTING,MF_ENABLED

;自动下落计时器开始计时,根据等级确定时间

.ifjibie==1

invokeSetTimer,NULL,NULL,500,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==2

invokeSetTimer,NULL,NULL,450,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==3

invokeSetTimer,NULL,NULL,400,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==4

invokeSetTimer,NULL,NULL,350,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==5

invokeSetTimer,NULL,NULL,300,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==6

invokeSetTimer,NULL,NULL,250,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==7

invokeSetTimer,NULL,NULL,200,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==8

invokeSetTimer,NULL,NULL,150,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==9

invokeSetTimer,NULL,NULL,100,addrDownTimerFunction

movdownTimer,eax

.elseifjibie==10

invokeSetTimer,NULL,NULL,50,addrDownTimerFunction

movdownTimer,eax

.endif

.ELSEIFax==IDM_ZANTING

movgamestate,2;将游戏状态设为暂停

;关闭自动下落计时器

invokeKillTimer,NULL,downTimer

;设置游戏暂停时间

invokeGetTickCount

movgamezantingtime,eax

;

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

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1