课程与设计T.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课程设计(连连看) 姓名:唐力班级:网络一班学号: 38一·系统设计 (一)系统功能设计 1.连连看系统的设计流程图如图1.1所示。图 1.1设计流程图二·设计思路及游戏介绍 游戏操作:玩家用up down left right方向键来选择第一个图形,选中之后,用enter键确定,在确定一个图形后,再用up down left right方向键选择另一个图形,如果图形相同,俩个图就消失及选择其他图形,如不同,继续选择图形,直至游戏结束。如玩家不想再玩,可按ESC键退出。 设计思路: 游戏地图设计: 对于整个游戏区域,可以把它看作一个是由若干个小方块构成的地图,而且小方块放置着不同的图案,可将其称之为图案小方块。这些图案小方块零散地分布在地图的不同位置区域,并且每一个图案小方块都有与其对应的完全一样的另外一个小方块,如图4-1所示。其代码: typedef struct _tagCELL {char x;char y; } CELL; CELL selCell,curCell;/*缓存前一个被选中的位置以及当前所处位置!*/ /*Scan Codes Define*/ enum KEYCODES {K_ESC=0x011b,K_UP=0x4800,/* upward arrow */K_LEFT=0x4b00,K_DOWN=0x5000,K_RIGHT=0x4d00,K_SPACE=0x3920,K_P=0x1970,K_RETURN=0x1c0d,/* Enter */ }; 图案方块的连接判断: 对于选中的两个方块的销毁,他们必须符合下面3个条件: (1)选中的两个方块图案相同。 (2)选中的两个方块之间没有障碍物阻碍的情况下,可以用若干个垂直的直线线段连接起来。 (3)这些将它们连接起来的直线线段的折点不超过两个(连接线由x轴和轴的平行线组成)。 现在针对(2)和(3)进行分析 同种物件的连接方式大致可以分成以下3种: (1)直接方式。 (2)有一个折点的垂直线段连接。 (3)有两个折点的垂直线段连接.。 ①直接连接方式 在直接连接方式中,必须要求所选定的两个方块在同一水平直线上(可以为x方向或y方向),并且两个方块之间没有任何其他图案方块。 ②一个这点连接方式 所选定的两个方块如果通过折点的方式连接,那么对于折点来说,每个折点必定有且至少有一个坐标(x或y)是和其中一个目标点相同的,即折点必定在两个目标点所在的x方向或y方向的直线上。 此外,对于一个折点连接的情况,折点应该为第一个选中方块的横向线或纵向线与第二个选中方块的纵向线和横向线相交而得出。 ③两个折点的连接方式 这种方式的两个折点所连成的直线与两物件的直接连线可以构成平行线,因此可以根据这个规律,将这条水平线在游戏区域允许的条件上下移动,然后通过判断整条带垂直折线点的曲线之间有无障碍物方式来确定是否可以连同。这种情况可以分为两种情况: (1)选中的两图案方块在同一直线,两折点间的直连线可在其这两个方块之间的空间位置作移动,其约束是不超过游戏边界区域。 (2)选中的两图案方块不在同一直线,两折点间的直连线可在两个方块之间的空间位置作移动,其约束是两方块之间的区域。经过上面详细的分析后,可以对选定的两方块是否可以作抵消操作可以这样设计下去。 1.查找水平方向公共区域: 代码:min1=max1=c1-x;min2=max2=c2-x;while(min1-1=0 Board[min1-1][c1-y][0]==0) min1--;while(min2-1=0 Board[min2-1][c2-y][0]==0) min2--;left=max(min1,min2); /* 左边界 */while(max1+1BoardWidth Board[max1+1][c1-y][0]==0) max1++;while(max2+1BoardWidth Board[max2+1][c2-y][0]==0) max2++; right=min(max1,max2); /* 右边界 */ 2. 检查两条水平线之间是否有公垂线连通!可以在边缘连通/* 检查两条水平线之间是否有公垂线连通!*//* 可以在边缘连通 */if(left==0){/* 左边缘连通 */DrawPath(c1-x,c1-y, -1,c1-y, -1,c2-y, c2-x,c2-y, LineColor);delay(6000);DrawPath(c1-x,c1-y, -1,c1-y, -1,c2-y, c2-x,c2-y, BkGndColor);/*插除线条!*/return true;}if(right==(BoardWidth-1)){DrawPath(

文档评论(0)

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

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

1亿VIP精品文档

相关文档