基于C语言俄罗斯方块设计与实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于C语言俄罗斯方块设计与实现

基于C语言俄罗斯方块设计与实现   摘 要 介绍利用C语言开发俄罗斯方块游戏的设计和实现方法,对于编写类似的游戏程序具有指导和借鉴作用。   关键词 C;俄罗斯方块   中图分类号:TP311 文献标识码:A 文章编号:1671-7597(2014)23-0019-02   俄罗斯方块游戏是一款家喻户晓、风靡世界、经久不衰的游戏,本文将采用C语言设计开发俄罗斯方块游戏,设计工具采用VC++6.0。   1 设计思想   1)图形的设计。   俄罗斯方块中有7种形状的方块,由于方块有旋转变化的需求,所以需要用到三维数组解决,第一维表示旋转变化形状的个数。   在俄罗斯方块设计中,需要定义游戏的边界,定义一个地图二维数组map[y][x],在数组中值的变化会有相对应结果。从这个二维数组中可以看出左边边界是map[0][x]―map[max(y)][x],右边边界是map[0][x]―map[max(y)][x]。   2)控制函数的设计。   首先需要考虑控制的功能有移动功能、加速功能、形状变化功能、暂停功能、退出功能。如图1用例图所示。   3)关键技术。   在功能确定之后,就要把其转化为算法,例如:方块如何下落,如何判断方块是否出界,方块下落到何时为止,下落中不可以和之前方块重叠,如何让方块落到之前下落的方块上停下,方块平移如何实现,方块旋转如何实现,旋转中空间问题,这些都构成了俄罗斯方块的关键技术。   ①方块下落。   方块下落是很容易做到的,但是在变化及下落过程中其他特性,例如在移动过程中不能超过边界、不能和已经存在的方块重叠、缝隙填补这些都是要考虑的,不能把图形看成一个个孤立的方块构成,而应看成一个整体,所以图形的组要使用结构体实现。结构体定义如下:   结构体中有三个成员,其中x,y代表坐标,shape代表图形的基本信息。所谓图形基本信息就是在图形库里提取出来的图形信息,同时也就明确了所提取出来信息的形状、位置。图形的位置信息需要找一个参考点也就是基准点,所有的图形参考点是相同的,由于图形库中的图形采用的3*3矩阵存储,所以选择中间点为参考点。假设结构体变量为firstShape[n][i][j],则参考点确定为firstShape[n][1][1],其中这个点的二维坐标x=firstShape[n][1][1].x,y=firstShape[n][1][1].y则其他位置的信息如表1所示。   当firstShape[n][1][1].x以及firstShape[n][1][1].y的值确定了,即参考点的坐标位置确定了,其他点的位置坐标也就确定了。在改变一个形状的位置只需要把参考点的坐标确定了,用循环把四周的点位置信息记录赋值到对应的结构体数组中。   用循环判断,判断出相应的形状。如果判断firstShape[n][i][j].shape的值为1,则gotoxy(firstShape[n][i][j].x,firstShape[n][i][j].y),并打印出相应的形状,在移动过程中,位置是时刻发生变化的,而形状是不变的。当需要左右移动时,参考点的位置信息作出相应更改,但是当旋转图形时,参考点的位置信息以及形状都会作出改变,当方块移动过程中,在相应位置信息打印出图形,这就实现了方块的移动。   ②方块出界判断。   解决方块边界问题,就需要搞清两个问题。第一,左右边界的x值必须和初始方块位置的x保持一致;第二,防止过界及方块不能和之前落下来的方块重合,也就是说当你向左边移动方块,可是左边是边界或者是上一个落下的形状,这时方块就不能向左移动。   由于在水平方向上设置一个单位的长度为2个像素,所以方块在初始位置的x坐标为单数,则方块只能在单身上移动,反之只能在双数上移动。当方块落下后相应位置把map[i][j]的值赋予2,这样一个下落完毕的方块左右边也相当于一个小边界,当位置信息确认时,判断四周的位置信息,地图的相应位置是否为2,如果是,则说明该点已经在边界上了,需要做出相应的操作了,如果此时是在左边界上,玩家继续按向左移动说明方块左边过边界了,需要重新调整位置信息,即x=x+L,firstShape[n][1][1].x=x;当参考点的位置信息改变后,则四周的位置信息也要做出相应修改,这样就解决了边界问题,同时也解决了方块重叠问题。   ③消除重影。   俄罗斯方块在移动过程中会发生重影现象,重影现象生成是由于显示屏余辉效应,消除重影技术就是先把原来的形状擦除,然后再打印出新的图形或者延长图形显示间隔时间,本次俄罗斯方块采用前者进行重影消除技术。   ④下落终点判断。   俄罗斯方块还存在填补凹槽问题,在存储图形信息是以数组的形式保存的,以利于对每一个数组元素进

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档