基于vc的俄罗斯方块游戏系统设计与开发内容摘要:
ument()来获取其所对应的 Document 文档数据。 (三)文挡操作 由于 MFC 机制设计出文档类对象专门负责数据的 I/O 存取和数据的运算和操作等。 一般来说 ,数据运算是通过 Document 类里面的扩展功能来实现的 ,这样做可以 形成一种密集数据处理 ,达到方便易用和管理的好处。 对于一个文件而言 ,如果文件内对象的排列顺序是固定的 ,那么对于文件读和写从形式上只有使用的运算符的不同。 在 MFC 的文档 视图 框架结构中 ,一个文档的内部对象的构成往往是固定的 ,在这种情况下 ,写到文件中的对 象在文件中的布局也是固定的。 因此 8 CDocument 是利用其基类 CObject 提供的 Serilize()虚函数实现自动文档的读写操作的。 当用户在界面上选择文件菜单或打开文件 (ID_FILE_OPEN)时 ,CWinApp 派生类的 OnFileOpenO 函数将被自动调用 ,它通过文档模板创建或重用框架、文档和视图对象 ,并最终调用 CDocument: :OnOpenDocument()来读文件。 当用户选择菜单文件或文件保存 (ID_FILE_SAVE) ,选择文件或另存 (ID_FILE_SAVEAS) 时 ,是通过呼叫函数调用 CDocument: :OnSaveDocument() 实现的。 (四)文档 视图的关联 视图与文档和窗口的关联和协调工作可以从视图类对象的 OnDraw() 函数开始 ,找出关联的物件与关系。 在 MFC 机制中 ,关于 DocumentNiew 架构的项目工程和 OnDrawO 函数的驱动绘图触发的流程 : CDocument::UpdateAIIViews()CView::OnUpdate() CWnd: :Invalidate()OnPaint()OnDraw() 从流程可知当用于装载重要数据的 Document 类对象中的数据发生变化时 ,为了能让与其关联的各个视图实时表现出数据的特征性质 ,需要通知所有这些关联的视图进行更新重绘 , 而Document 类对象就拥有通知所有视图重绘的这样的一个功能函数。 UpdateAIIViews() 函数实现对各个视图类对象对数据。 显示的更新是通过文档类内部 CPtrlist类型的成员变量 m_viewList来维护和管理所有相关联视图对象 实现 的。 而对于该文档关联视图的增添 ,与将 DocumentTemplte 文档模 板添加到模板类表一样 , 也是有相应的处理函数 ,对于文档模板在模板管理列表的添加是在 App类的 Initlnstance()里面使用 AddDocTemplate() 函数去实现 ,而对于视图在视图列表的添加 , 可以使用 Document 类对象的成员函数 AddView() 去实现。 当与文档类关联的视图类收到文档类通过 UpdateAIIViews() 函数发出的更新重绘通知后 , 会触发视图类的 OnUpdate() 函数的实现。 9 四、 需求与算法分析 (一) 需求分析 功 能性需求如下: 随机给出不同的形状(长条形、 Z字形、反 Z形、田字形、 7字形、反 7形、 T字型)下落填充给定的区域,填满一条便消掉,记分 , 游戏可以设置难度,难度主要由方块的下降速度决定,下降速度越大难度越大 ,若在游戏中各形状填满了给定区域,为输者。 如下表 为游戏功能性需求表。 表 功能 简介 顺时针旋转 顺时针旋转转块 逆时针旋转 逆时针旋转转块 绘制转块 指定画板上绘制转块 擦除矩形 指定画板上擦除矩形 右移动 右移动转块 左移动 左移动转块 下移动 下移动转块 丢下转块 在画板上丢下转 块 计分 根据用户消去的行数计分 作为玩家,玩家可以控制难度,查看帮助等,对于操作性的需求如下: 玩家可以自己来控制方块下落的速度。 玩家可以自己来控制游戏的难度。 玩家可以看到游戏的积分。 对本游戏有帮助说明和作者介绍等 良好的用户界面,有 提示 显示和分数显示。 将整体界面分为三部分:左侧半部分用来存放俄罗斯方块,是游戏的活动区,用户操作的图形变化在这个主界面区完成。 右上侧部分显示下一次要产生的俄罗斯方块形状,以便用户预先知道,增加游戏的可玩性。 右侧 下半部分用来显示用户的分数和当前等级,以便让用户有成就感增加可玩性。 10 如图为整体的界面设计需求效果,将整个界面分成了三部分,显得简易清爽,作为用户界面让玩家感觉比较舒服得体。 如 下 图 : 图 (方块)需求 良好的方块形状设计,绘制七种常见的基本图形(长条形、 Z字形、反 Z形、田字形、 7字形、反 7形、 T字型),各个方块要能实现它的变形,可设为顺时针或逆 时针变形,一般为逆时针。 为了使游戏更加美观更具可玩性,在绘制方块的过程中不采用默认的绘制方式,而是用经过处理的图片效果,这样让组成的方 块更加 美观,同时彩色的方块也让人赏心悦目,增加了游戏的可玩性。 下图 就是用来拼接方块颜色的样板色。 这种带有实体效果的方块比一般的二维方块更具立体效果,更美观,会更吸引玩家。 如 下 图 : 图 (二) 算法分析 对于方块在某一瞬间的位置标识,我们采用一个 42 的小数组标识出来 ,即用 4个存储单位空间存储当前下坠物的每一子块的位置,也就是说,用 4个存储单位空间存储当前下坠物的每一子块的位置来对整个下坠物件的位置进行标识,而每个存储空间的大小就是一个典的坐标值 (x,y),而每个方块按照 从左到右的方式进行编号,并且在编号过程中对于同一列的方块实行从上到下进行编号。 如图 : 11 图 方块表示方法,即四个小方块的坐标设定:其中一个方块是原点,坐标为 (0,0);右侧方块坐标 (1,0),下面的方块坐标 (0,1),以此类推。 如下为 程序中定义的各种方块的数据结构定义。 图 ,从开始判断是否到底底部,到达则做销行操作,然后生成下一个下坠物,将新的下坠物代替旧的下一个下坠物,将旧的下坠物当做当前的下坠物,下到底部判断是否做销行操作,然后判断游戏是否结束,未结束则继续新一轮的生产方块,若方块达到了顶部,占满了空间则游戏结束。 俄 罗斯方块流 程如下 : (x0,y0) (x1,y1) (x2,y2) (x3,y3) 2 3 0 1 (x0,y0) (x1,y1) (x2,y2) (x3,y3) 0 1 2 3 12 图 到达底部 游戏结束 到达底部 结束 销行操作 生成下一个下坠物 将新生的下坠物代替旧的 “下一 个下坠物 “ 将旧的 “下一个下坠物 ”用作当前 下坠物 销行操作 游戏结束处理 下降一个单位 开始 13 五 、 俄罗斯方块游戏的 实现 (一) 窗体 设计 窗体的 设计 , 包括 工具栏的实现,按钮长度、宽度、数目、图标的设置,文字的设置 等。 程 序 调用 OnCreate函数创建窗口,然后设置窗口。 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == 1) return 1。 //工具栏的实现 CImageList img。 CString str。 if (!(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) { return 1。 } //设置按钮的宽度和长度 ().SetButtonWidth(40, 100)。 //改变属性 (0, TBSTYLE_FLAT |CBRS_TOOLTIPS | TBSTYLE_TRANSPARENT|TBBS_CHECKBOX )。 //设置按钮数为 6 (NULL,4)。 // 添加图像 //设置 热 /hot状态的的位图 (28, 28, ILC_COLOR8|ILC_MASK,2,2)。 (RGB(0, 0, 102))。 //顺序增添按键 的图标 (AfxGetApp()LoadIcon(IDI_ICON_START))。 (AfxGetApp()LoadIcon(IDI_ICON_PAUSE))。 (AfxGetApp()LoadIcon(IDI_ICON_END))。 (AfxGetApp()LoadIcon(IDI_ICON_SET))。 ().SetHotImageList(amp。 img)。 ()。 //设置 冷 /cold状态的位图 (32, 32, ILC_COLOR8|ILC_MASK, 2,2)。 (::GetSysColor(COLOR_BTNFACE))。 //顺序增添按键的图标 (AfxGetApp()LoadIcon(IDI_ICON_START))。 (AfxGetApp()LoadIcon(IDI_ICON_PAUSE))。 (AfxGetApp()LoadIcon(IDI_ICON_END))。 14 (AfxGetApp()LoadIcon(IDI_ICON_SET))。 ().SetImageList(amp。 img)。 ()。 // 设置文字 (0, ID_GAME_START, TBSTYLE_BUTTON, 0)。 (0, 开始 )。 (1, ID_GAME_PAUSH, TBSTYLE_BUTTON, 1)。 (1, 暂停 )。 (2, ID_GAME_END, TBSTYLE_BUTTON,2)。 (2, 结束 )。 (3, ID_GAME_OPTION, TBSTYLE_BUTTON,3)。 (3, 设置 )。 CRect rectToolBar。 //设置按钮的大小 ((), CSize(32,32))。 (CBRS_ALIGN_ANY)。 EnableDocking(CBRS_ALIGN_ANY)。 DockControlBar(amp。 m_wndToolBar)。 return 0。 } (二) 定义俄罗斯方块数据结构 俄罗斯方块通过坐标来实现,其数据结构如下: //每四个点,表示一种方块 //(一维,二维都可以做 ) POINT gl_square[28]={ //方形 {0,0},{1,0},{0,1},{1,1}, //长条 {0,1},{0,0},{0,1},{0,2}, //Z {1,1},{0,1},{。基于vc的俄罗斯方块游戏系统设计与开发
相关推荐
略 学术刊物文献 序号 └─┘ 作者.文章名.学术刊物名.年,卷(期):引用部分起止页 学术会议文献 序号 └─┘ 作者.文章名.编者名.会议名称,会议地址,年份.出版地,出版者, 出版年 :引用部分起止页 学位论文类参考文献 序号 └─┘ 研究生名.学位论文 题目.出版地.学校(或研究单位)及学位论文级别.答 辩年份 :引用部分起止页 西文文献中第一个词和每个实词的第一个字母大写,余者小写
0]c lk _s c anSE G[ 7. .0]D IP[ 7. .0]BC D 7ins t18 12 2. 各个模块的作用 ( 1) BCD7 模块: 输入 licheng信号和 money 信号转换成相应的七段数码管数据信号和地址信号输出 ( 2) C47 模块: 输入 second 数据信号、 minute 数据信号和 hour 数据信号转换成相应的七段数码管数据信号和地址信号输出
参考文献;致谢;附录。 正文章、节题目(理工类要求编写到第 3级标题,即□ .□ .□。 文科、管理类可视论文需要进行,编写到 2~3级标题。 ) 论文正文 章节及各章标题 论文正文分章、节撰写, 每章应另起一页。 各章标题要突出重点、简明扼要。 字数一般在 15字以内,不得使用标点符号。 标题中尽量不用英文缩写词,对必须采用者,应使用本行业的通用缩写词。 层次 层次以少为宜,根据实际需要选择。
lay 的地址是一个 URL 字符串,由如下格式构成: xdirectplay:/[data string] 在不同的网络连接上,它包含发送消息方和接受方这样的元素。 DirectPlay 对象之间的通信 DirectPlay 是基于 COM 的,而各个组件管理不同的方面,例如, DirectPlay点 (peer)对象 (CLSID_DirectPlay8Peer)就是负责管理点对点游戏的。
要求来产生计费,本设计重点就在计费控制模式模块和计费模块这两大模块的设计,则 根据出租车计费器的工作过程, 其主要原理框图如图 13 所示。 本系统采用分层次、分模块的方式设计,其本系统组成框图如下所示。 其中行驶路程计数模块、等待时间计数模块和计费模块,用来统计路程、等待时间和总费用,控制模块是用来控制计费模块,数码管显示模块用来显示行驶的公里数、等待累计时间和总费用等信息。 . .
要,因此选择合适的语言进行算法的描述显得尤为重要。 本文选择 Visual C++,其主要优势在于以下三个方面: ( 1)执行效率高。 C++的执行代码经过编译后生成的是汇编语言,它可以直接在处理器上运行,因此它的执行效率较高。 ( 2)较高的灵活度。 指针是 C++的一种特殊的数据类型,能够获取和直接操纵地址,实现动态存储分配内存。 掌握指针就能更有效地使用内存空间, C++中指 8 针的使用