- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言实现俄罗斯方块-Read
C语言实现俄罗斯方块 邓友明 胡文峰 李乐 李博 具体内容 1俄罗斯方块简介. 2功能简介. 3所用知识 4模块分析. 5数据结构. 6算法设计. 一. 俄罗斯方块简介: 二.功能分析: 1具有基本的游戏背景/界面。 2能随机生成所有可能的方块。 3能根据难度确定方块下落速度。 4能用键盘控制方向,变形。 5方块判别停止条件及墙壁。 6能判别消行及游戏结束。 7电脑能自动玩,可以选择人机对抗玩.(难) 8能记录玩者姓名及最佳成绩。 三.所用知识: 基本的C语言知识。 数据结构。 图形交互技术。 算法分析和设计。 数据库知识. 人工智能 四.模块分析 根据七种功能可得到六个模块. 分别为:1.界面; 2.方块; 3.下落及控制; 4.碰壁停止; 5.消行及玩完; 6.电脑判别最优走法(难) 7.记录.(难) 具体见下: 模块1.界面设计 基本符合一般的俄罗斯方块游戏; 我们设计时考虑倒我们屏幕的大小,采用16X24的方格阵.背景用蓝色,墙用红色, 墙内用白色. 这部分已设计好,看演示! 模块2.定义所有方块 所有俄罗斯方块都是有四个方格,所有可能情况有二十种(由于方块所占比率太小,有两!颜色随机!) 具体如下:0. 1. 2. 3. 4 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 上述二十种方块中,0号1号可循环变形;2,3 号相同;4,5,6,7可循环变形;8,9,10,11可循 环变形;12,13,14,15可循环变形;16,17,18,19 可循环变形. 具体实现见数据结构部分. 此模块已实现,看演示! 模块3.下落及控制 下落比较简单. 即图形的插,写及步长的大小来实现. 插写速度及步长大小可控制难度. 已实现,有演示! 控制也容易. 控制包括控制方向和变形. 变形可由方块定义的号码循环变换. 已部分实现,演示! 但两个嵌套起来就出现了问题(请大家指教): 即控制的时候不要影响下落,但控制时如用到getch()函数,要等待输入字符,因此下落因等待停止!查到一个kbhit()函数虽能在输入字符时不影响下落,但不能返回所输字符!最后用kbhit()判断是否有控制输入,用getch()判断控制操作虽能实现,但反应滞后!!??不完美! 演示之. 模块4.墙和已有方块阻挡的实现 我们讨论得到的一个方案为: 定义界面的时候,墙设为红色(好看起见),空白格为白色.方块为除黑白的其他随机颜色. 定义一个数组m保存界面当前每个方格的坐标及颜色值. 方块下落过程中遇到非白色的就停止.自定义一个stopmove( m,…)判断是否停止. 控制遇到非白色阻挡就失效. 停止的方块替换掉所在位置以前界面数组m的对应颜色.用自定义的getbk()函数返回新的数组m. 这一部分我们正在努力之中!!! 模块5.消行操作及失败判断 消行操作是难点. 首先是判断哪几行已满,然后要将该行以上所有内容整体下移所消的行数.具体算法我们还在研究之中. 失败与否就是判断是否有方块超过界面上界.不难! 模块6.能实现电脑玩 这一部分比较难,我们正在查找相应的书,学习相应的知识. 模块7.玩者姓名及成绩排行榜 分数由所消行数及难度确定. 设计时定义好. 在指定时间之内,或失败后都有一个最终分数.可以选择记录之.这将会被录入对应文件.用到C语言的文件操作. 能够调出排行榜,及最高纪录.用到数据库方面知识,及排序. 这一部分不容易,我们还在思考之中! 五.数据结构 通过以上模块分析,我们已经设计出如下数据结构: 1.点坐标结构: typedef struct{ int x; int y; }Pos; 2.点及颜色数据结构: Typedef struct{ Pos pos; //点坐标 int color; //颜色值 }PosType1; //用于保存界面及其他 3.头节点及方块号码数据结构: typedef struct{ Pos node0; /*int x1;int y1;*/ //方块头节点左
文档评论(0)