俄罗斯方块设计.doc
软件编程实习课程报告俄罗斯方块专 业:电子信息科学与技术班 级: 学 号: 0307 姓 名: long 指导老师: wang 实验时间:2011 一、 需求分析功能 简介 顺时针旋转顺时针旋转转块逆时针旋转逆时针旋转转块绘制转块指定画板上绘制转块擦除矩形指定画板上擦除矩形右移动右移动转块左移动左移动转块下移动下移动转块丢下转块在画板上丢下转块自定义转块样式自已定义转块样式设置游戏按钮自定义设置游戏按钮保存游戏基本信息保存游戏基本信息到XML文档 等级 达到一定分数速度变快1、运行环境需求:WIN95WIN98WinMeWIN2000WINXPWINNT2、硬件需求:(1)处理器型号:奔腾III及同等型号以上处理器及内存容量:512MB以上内存(2)外存容量:5G以上硬盘空间(3)联机或脱机:脱机;(4)媒体及其存储格式:XML文档;(5)输入输出设备的型号和数量:鼠标、彩色显示器。二、主要算法思想俄罗斯方块游戏程序的界面设计图如下图所示: 图1俄罗斯方块的主要流程图如下:图2三、游戏的结构分析 俄罗斯方块游戏中,游戏界面区中不断有各种形状的方块从上向下落,在遇到下面已经 固定的方块或者界面区域的底部而不能再下落时,则被固定在所在位置,并且游戏将预览的 方块在游戏区域从上继续下落,而且产生一个新的预览方块;当方块堆积的超过游戏界面区 域时(或者游戏者积分超过一定值时),游戏结束。在固定方块时,需要判断是否有全都是方 块的行,如果有,则消去该行,并根据预定的规则增加游戏者获得的分数,并修改游戏的级 别(即游戏的速度)。 游戏的控制,也即当前正在下落的方块的左右移动和变形操作,由按键控制,根据相应 的按键调用相应的函数过程。当方块左右移动遇到游戏界面中已经固定的方块时,它就被阻 挡而不能移动,或者当方块已经到了游戏区域的两侧边界时,也不能移动。对于变形操作, 我们用下落方块的变形后的方块跟游戏区域中已经固定的方块比较,如果变形后没有覆盖已 经固定的方块,则下落方块可以变形,否则,它就受到了一定固定的方块的阻挡而不能变形。四、主要功能的实现1、_fastcall TForm1:TForm1(TComponent* Owner)功能:定义俄罗斯方块显示的区域。2、void _fastcall TForm1:SpeedButton1Click(TObject *Sender)功能:按开始按钮执行后面的程序。3、void _fastcall TForm1:Timer1Timer(TObject *Sender)功能:开启定时器,规定向下移动的时间,方块的下落就是要靠定时器事件来触发的。4、void _fastcall TForm1:SpeedButton2Click(TObject *Sender)功能:暂停5、void _fastcall TForm1:DrawBlock(int X,int Y,TColor mColor)功能:画预览区域和游戏区域的方块6、void _fastcall TForm1:DrawSmallBlock(int X, int Y,TColor mColor)功能:让预览区域显示小的图形7、void _fastcall TForm1:ClearSmallBlock(int X, int Y)功能:清除预览窗口子函数8、void _fastcall TForm1:WriteNext()功能:调用下一个图形子函数9、void _fastcall TForm1:ReadStyle()功能:从图形数组里面调用不同图形子函数10、void _fastcall TForm1:ScanLine()功能:扫描和检测,当方块左右移动遇到游戏界面中已经固定的方块时,它就被阻 挡而不能移动,或者当方块已经到了游戏区域的两侧边界时,也不能移动。11、void _fastcall TForm1:MoveDown()功能:游戏区的方块向下移动12、void _fastcall TForm1:WriteObject()功能:写方块13、void _fastcall TForm1:ClearBlock(int X,int Y)功能:清除方块14、void _fastcall TForm1:MoveLeft()功能:游戏区的方块向左移动15、void _fastcall TForm1:MoveUp()功能:游戏区的方块变形16、void _fastcall TForm1:MoveRight()功能:游戏区的方块向右移动17、void _fastcall TForm1:FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)功能:键盘控制五、详细设计与调试1. 界面设计俄罗斯方块游戏程序的界面设计图如图3 所示,关键的组件是四个 Panel,两个大的 Panel 为双人游戏时的两个游戏玩家的游戏区域,它们的 Name 分别为 Panel1 和 Panel2,两 个小的 Panel 为绘制预览方块的区域,其 Name 属性分别为 Panel3 和 Panel4。 窗体中加入一系列的 StaticText 组件,用于显示得分、消去的函数、游戏级别以及游戏的控制按键等。之所以使用 StaticText 而不用 Label 是因为对于 StaticText 可以设置更多的属 性,如边框、底色等,可以美化界面。需要注意的是,所有 StaticText 的 AutoSize 属性都应 该设为 false,以便其 Caption 属性改变时,不影响界面的格局。 添加两个定时器组件,Timer1 和 Timer2,它们分别用于两个游戏玩家的游戏控制。方块 的下落就是要靠定时器事件来触发的,而对定时器的 Interval 属性的设置可以更改游戏的速 度。添加主菜单,菜单项“游戏”用于游戏的开始、暂停和退出操作;菜单项“Multiplayers” 用于选择单人游戏模式还是双人对战模式;菜单项“设置”用于游戏的配置操作;“帮助”用 于打开程序的帮助文件。图32. 游戏的结构分析俄罗斯方块游戏中,游戏界面区中不断有各种形状的方块从上向下落,在遇到下面已经 固定的方块或者界面区域的底部而不能再下落时,则被固定在所在位置,并且游戏将预览的 方块在游戏区域从上继续下落,而且产生一个新的预览方块;当方块堆积的超过游戏界面区 域时(或者游戏者积分超过一定值时),游戏结束。在固定方块时,需要判断是否有全都是方 块的行,如果有,则消去该行,并根据预定的规则增加游戏者获得的分数,并修改游戏的级 别(即游戏的速度)。3. 键盘、定时器和菜单的控制在程序中,我们定义两个游戏,即两个 TetrisGame 的实例,然后根据用户选择的是单玩 家模式还是对战模式来调整窗口的显示,完成对游戏的控制。 在头文件中定义如下: public: / User declarations TetrisGameGame1,Game2; intMode; /游戏模式,1 表示 single,2 表示对战 键盘、菜单和定时器等对游戏的控制,也就是根据 Mode 对 Game1 和 Game2 的控制。五、设计心得 俄罗斯方块,一个很简单的游戏,平时只知道玩,却从来没思考过它的设计过程。通过本次的亲身设计,才体验到,一个简单程序的设计,包含的工作太多太多,而且遇到的问题也很多。再通过老师的指导和组内同学的合作讨论,最终将程序调试出来。 从整个设计过程中,我体验到做学问的仔细与严谨,以及通过C+builder平台,我掌握了许多设计软件的相关知识。此外,在与组员的合作交流中,体会到团队意识的重要性。相信在以后的学习中,不断地加强自己的动手能力,努力提高知识的运用能力。