俄罗斯方块-C语言_第1页
俄罗斯方块-C语言_第2页
俄罗斯方块-C语言_第3页
俄罗斯方块-C语言_第4页
俄罗斯方块-C语言_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章俄罗斯方块游戏俄罗斯方块游戏本章的内容介绍了如何使用c语言开发简单的tertris游戏,并详细说明了其具体实现过程。1.1第一个项目1.1.1作业2004年7月1日,晴天,我的作业离开学校前10分钟,我们最尊敬的节目教师TC给我们布置了夏季作业。标题简单,是c语言的tertris游戏(图形。使成h的提示),并提醒要做好电前分析工作。1.1.2准备2004年7月3日,刮了风老师的建议:在进行项目之前,一定要好好构思和计划项目,根据需要计划开发过程。所以在计算机上绘制了简单的项目开发流程图,如图1-1所示。图1-1开发流程图q功能分析:分析整个系统所需的功能。q模块结构计划:计划系统所需的功能模块。q总体设计:分析系统处理过程,探索系统核心模块的运行情况。q数据结构:设计系统所需的数据结构;q编程函数:预先计划系统需要的功能函数。q特定代码:编写系统的特定实现代码。1.2电源分析2004年7月4日,阳光明媚基本结构如图1-2所示。图1-2 Tetris游戏的基本结构以这种方式总结了tertris游戏的基本功能模块,制作了简单的项目计划书,整个计划书分为两部分:q系统需求分析;q结构计划。1.2.1分析系统要求1)游戏盒的预览功能运行游戏后,如果底部出现游戏框,预览界面中将显示以下框,以便玩家进行预览控制:此游戏共有19个长方体,因此随机生成的游戏长方体显示在长方体预览区域中。2)游戏盒的控制功能游戏玩家可以移动为左移、右移、快速下移、自由落体和自动删除行而显示的框。3)更新游戏显示器在游戏中移动长方体时,必须移除旧的游戏长方体,然后在新的坐标位置重画新的长方体。4)设定游戏速度和更新分数可以用游戏分数除以行数。例如,可以设置10点删除整行。达到一定的量后,游戏选手需要进行等级升级。随着玩家水平的提高,箱子的下落速度加快,游戏的难度相应提高。5)系统帮助游戏玩家进入游戏系统后,通过帮助了解游戏的操作提示。一个tertris游戏的基本功能也是以上5种,当然现实中的游戏产品更复杂,但其基本功能都大同小异。1.2.2结构计划从现在开始进入救援计划阶段。为了加深印象,我们创建了模块结构,如图1-3所示。图1-3游戏的模块结构1.2.3选择工具2004年7月5日,晴天,工具混乱建议选择Turbo C。因为在DEV-C中使用graphics.h更复杂!两天内,确定了整个项目的功能模块,制定了总体计划,选择了开发工具。接下来,我们将进入总体设计阶段。1.3总体计划分析完整的配置功能后,可以根据每个配置功能模块进行完整的设计处理。主要包括两个方面:运行q流程分析;q核心处理模块分析。1.3.1运行流程分析2004年7月6日早晨,阳光明媚整个游戏的特定操作流程图。如图1-4所示,向左移动VK_LEFT,向右移动VK_RIGHT,向下移动VK_DOWN,旋转VK_UP,然后退出VK_Esc键以查看关键点值。以上几个键移动处理的具体说明如下。调用Q VK_LEFT: MoveAble()函数以确定是否可以向左移动,如果可以,请调用EraseBox函数以清除当前游戏框。下一步将调用show_box()函数,在向左移动的位置显示当前游戏的框。Q VK_RIGHT:右移处理,类似于上述VK_LEFT处理。Q VK_DOWN:下移处理,如果不能再移动,则必须将flag_newbox标志设置为1。Q VK_UP:旋转处理,首先确定是否执行旋转动作,其中必须满足多个条件,如果不符合条件,则不执行。Q VK_Esc:按Esc键结束游戏。图1-4游戏运行过程1.3.2核心处理模块分析2004年7月6日下午,多云,还有很长的路要走1.预览方块新游戏的矩形可以在44个小矩形框中预览,可以使用rand()随机函数生成1到19之间的游戏长方体编号作为预览的长方体编号。其中,pinnik high square小矩形的大小由BSIZEBSIZE计算。2.游戏盒控制处理长方体的移动控制是整个游戏的重点和难点,具体内容如下:1)向左处理处理过程如下:(1)判断能否向左移动有两个条件。向左移动一个位置不能超出后板的左侧线,否则超出边界。而且,在游戏框中有值(值为1)的位置,游戏背板不能被占用(占用值为1)。(2)向左移动之前,先清除游戏盒。向左移动一个位置,重新显示这个游戏的方块。2)向右移动处理处理过程如下:(1)有两个条件判断能否向右移动。向右移动一格不能超过游戏底部的右侧线,否则超过边界。游戏盒有值位置,游戏背板不能占用。(2)向右移动之前,先清除游戏盒。向右移动一个位置,重新显示这个游戏的方块。3)下移处理处理过程如下:(1)有两个条件来判断能否向下移动。向下移动一格也不能越过游戏底部的底部,否则会超过限制。游戏框中有值位置,不能占用游戏底板。如果满足以上两个条件,则可以向下移动。否则,flag_newbox设置为1,此标志由主循环确定。(2)向下移动之前,先清除游戏盒。(3)向下移动一个位置,重新显示这个游戏的方块。4)旋转处理处理过程如下:(1)有两个条件来判断旋转是否可能。也就是说,旋转后的箱子不能超出游戏背板的底部、左侧和右侧线,否则超出边界。游戏盒有值位置,游戏背板不能占用。(2)旋转前清除游戏盒。(3)在游戏框显示区域(44)的位置,使用当前游戏框数据结构中的next值作为旋转后形成的新游戏框的编号,并重新显示此编号的游戏框。3.刷新显示在游戏中移动框的同时清除旧游戏框,并用新坐标重画游戏框。删除整行后,重新绘制游戏底板的当前状态。清除游戏盒的方法是画出轮廓,填充小方块,填充背景色,然后使用前景色绘制游戏背板上的小方块。重复此过程,更改当前坐标,填充并绘制19个小方块,从游戏基板中清除此游戏框。4.处理游戏速度和分数更新如果行已满,积分变量score将增加固定值,然后将等级变量level与速度变量speed相关联,那么等级越高,结果越快。2004年7月6日晚,整体设计的重要性设计数据结构1.4数字配置2004年7月7日早晨,阳光充足我设计了系统所需的数据结构。1.游戏地板结构这里的游戏基础结构是BOARD,具体代码如下:Struct BOARD/*游戏底板结构,表示每个点具有的属性*/Int var/*当前状态只有0和1,1表示此点已被占用*/Int color/*颜色,游戏底部的每个点可以有不同的颜色,提高美感*/ table _ boardvertical _ boxshorizontal _ boxs;其中,BOARD结构表示游戏底板中每个小矩形的属性,var表示当前状态,0表示未使用,1表示已占用。2.游戏盒结构这里的游戏盒结构是SHAPE,具体代码如下:Structshape/*一个字节是8位,表示游戏框中的每4位一行(例如, box 0=0x88 ,box 1=0xc0 表示:)1000100011000000*/char box2;Int color/*每个方块的颜色*/Int next/*下一个框中的编号*/SHAPE结构表示小框的属性,char box2表示块形状(2字节),每个4位表示一行框。Color表示每个框的颜色,可以根据需要设置颜色值。3.shape结构阵列这里的游戏盒结构是SHAPE,具体代码如下:/*初始化框内容。也就是说,定义MAX_BOX的SHAPE类型的结构数组和初始化*/Struct SHAPE shapesMAX_BOX=/*嘴,嘴,嘴,嘴*嘴,嘴,嘴*口*/0x88,0xc0,CYAN,1,0xe8,0x0,CYAN,2,0xc4,0x40,CYAN,3,0xfe,0x0,cyan,0,/*嘴,嘴,嘴*嘴*嘴,嘴,嘴*/0x44,0xc0,MAGENTA,5,0x8e,0x0,MAGENTA,6,0xc8,0x80,MAGENTA,7,0xe12,0x0,magenta,4,/*口*口*口*/0x8c,0x40,YELLOW,9,0x6c,0x0,YELLOW,8,/*口*口*口*/0x4c,0x80,BROWN,11,0x6,0x0,brown,10,/*口*嘴,嘴,嘴,嘴,嘴*口*/0x4e,0x0,WHITE,13,0x8c,0x80,WHITE,14,0xe4,0x0,WHITE,15,0x4c,0x40,WHITE,12,/*口*口*嘴,嘴,嘴*口*/0x88,0x88,RED,17,0x0,0x0,red,16,/*口*口*/0xcc,0x0,BLUE,18在上面的代码中,定义了类型为MAX_BOX SHAPE的结构数组,并执行了初始化过程。MAX_BOX为19,因为总共有19个不同的长方体类型。2004年7月7日晚,数据结构的重要性1.5神秘的箱子2004年7月8日晴朗的天空武侠小说,成人童话。从少年开始,我就迷上了武侠小说,和我一起上了大学。我还记得我特别执着于神秘盒子的时候。九龙武侠名作英雄无泪的对话中最强大的武器是一箱。在我读完完整的文章后,我意识到这不是一个简单的箱子,箱子里有很多零件,可以根据不同的对手迅速配置战胜对方的武器。现在我发现这个盒子和程序的函数太相似了!要以编程方式解决问题并实现功能,可以编写函数并实现它。如果存在多个问题,可以编写多个函数来实现。函数是我们编程的那个神秘盒子。书马上就传了,我预先安装并定义了整个项目需要的函数。1.函数NewTimer函数NewTimer用于实现具有以下结构的新时钟:Void中断网路时间(void)2.函数SetTimer函数SetTimer用于设置新时钟的处理过程,如下所示:Void settimer (void中断(* intproc) (void)。3.函数KillTimerKillTimer函数用于恢复原始时钟处理过程,如下所示:Void KillTimer()4.函数initializeInitialize函数用于初始化接口,如下所示:Void initialize (int x、int y、int m、int n)5.函数DelFullRowDelFullRow函数用于删除整行,y设置删除的行数,如下所示:Int DelFullRow(int y)6.函数setFullRowSetFullRow函数查询整个行,并使用以下结构调用DelFullRow函数进行处理:void setfull row(int _ boardy)7.函数MkNextBox函数MkNextBox用于生成以下游戏长方体,并根据以下结构返回长方体编号:Int MkNextBox

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论