- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
俄罗斯方块OPENGL大作业
俄罗斯方块 ---OPENGL大作业
杨博量
实验题目
俄罗斯方块
回忆起儿时火拼俄罗斯方块的情景,加上在多媒体接触了OPENGL这一绘图动画工具,所以萌生了自己用OPENGL写一个俄罗斯方块的想法。
实验编程步骤
⒈为OPENGL绘图做好各项准备工作,比如在项目设置里面添加对应的库文件,在对应的程序文件里面包含OPENGL库文件。在PreCreateWindow(), OnCreate(),OnDestroy(), OnSize(),
等函数里面做好相应的准备,还要设置逻辑调色板等。
⒉我的初始化openGL场景的代码在自定义的InitializeOpenGL(CDC* pDC)函数里面。里面大概做了设置像素格式,取得着色描述表,激活着色描述表,启用纹理映射,启用阴影平滑,置黑色背景,设置深度缓存,开启深度测试,还有将绘图所要用到的纹理装载到一个名为texture的数组里面。
3.我设置的游戏场景主要有四个。
1)第一个:游戏之前的难度选择场景。界面如下图所示
界面显示有9个难度,此时你可以通过上下左右方向键移动上面那个方框来选择难度,难度越大,俄罗斯方块下落的速度就越快。
实现的方法:先画一合适大小的矩形,再贴上上面那个纹理。而可以移动用来选择难度的框框是另外一个纹理,在启用黑白掩模混合屏幕颜色之后来实现的
glBlendFunc(GL_DST_COLOR,GL_ZERO); //使用黑白掩模混合屏幕颜色
glEnable(GL_BLEND); //启用混合
glBindTexture(GL_TEXTURE_2D, texture[6]); //启用表示选择难度的框框的纹理
2)第二个:游戏时的方块下落的场景
i)在上图中,右下角所显示的俄罗斯方块表示的是下一个将要出现的俄罗斯方块。
实现这个功能是这样的:在当前的方块到达底部之后,调用NewBlock();函数产生下一个将要随机出现的方块,保存在nextblockmap[4][5]的二维数组里面,而在显示这个将要出现的方块的小黑框里面,我根据合适的大小设定出一个个方块大小的空间,然后在这个空间内绘方块,nextblockmam[i][j]=1的就画上一个小方块,如果nextblockmam[i][j]=0
则什么也不做。从而就画出了方块。
关于NewBlock()这个随机产生下一个俄罗斯方块的函数。我作一点解释,由于要随机产生的方块只有7 种,所以type = rand()%7既可,再在下面中用switch语句根据type的值设置各种情况。
ii)实现方块的不断下落直至到达底端或者其它方块上面是用SetTimer和OnTimer来实现的,而在SetTimer(1, speed, NULL);里面的第二个参数speed就是用来控制方块的下落速度的,选择的level越高,speed的值就越小,从而使方块下落的速度就越快。
iii)实现按方向键上下左右时,方块作相应的移动是在函数MoveLeft();MoveRight();Rotate();MoveDown();里实现的,每按某一键则触发与之相应的函数,从而实现相应的左移右移旋转,以及加速下落的功能。
iv)判断是否得分并消掉吃掉的一行或几行方块是在CheckWin()函数里面实现的,每次方块下落到底部或其它方块上面时,方块下落的区域的状态就会置成1,没有方块的地方是0
(记录这些状态的是一个int map[10][20]数组,在上面的图的左侧大黑框,就是方块下落的区域,我将它割成了10列20行的空间,每一格的状态都记录在map数组里面)
这时,在CheckWin()里面就会扫描map数组,若某一行全为1 ,则将这一行消掉,消掉的方法是利用将一行的状态赋给该行,即循环执行map[l][k + 1] = map[l][k];语句。在消掉这些行的同时在分数栏增加相应的分数。
3)第三个游戏结束的场景
如上图当CheckWin()函数检测到最顶端一行在map数组里面的标志为1时,就结束游戏,就是将标志gamefinish = true;(当为游戏运行时gamerun = true;在选择难度画面时标志gameintro = true;游戏胜利时gamewin=true ;在任意时刻,这四个标志,只能有一个能为真。)
再调用DrawGameF
您可能关注的文档
- 余姚市高三生物练习卷三.doc
- 余杭区南苑街道中心幼儿园空调采购询价项目.doc
- 余杭区中医院冷水机组设备采购项目.doc
- 仪征市村党组织书记任期目标承诺书.doc
- 余杭区农技中学物流专业设施设备.doc
- 余杭区社区学院等笔记本电脑采购项目.doc
- 余杭区第三人民医院麻醉临床信息系统建设开发项目.doc
- 佛山一中图书馆三楼书库书架采购及安装.doc
- 佛山市三水乐平欣华医院.doc
- 佛山市公共资源交易中心高明分中心.doc
- 2023-2024学年山东省蒙阴市级名校中考一模化学试题含解析.doc
- 2023-2024学年河北省石家庄市第二十二中学中考考前最后一卷化学试卷含解析.doc
- 2024年湖南省永州市名校中考化学对点突破模拟试卷含解析.doc
- 2024年江苏省盐城市大丰区实验初级中学中考五模化学试题含解析.doc
- 2024届福建省厦门市瑞景外国语分校中考试题猜想化学试卷含解析.doc
- 2024届浙江省杭州市桐庐县中考二模化学试题含解析.doc
- 2023-2024学年湖北省孝感市八校联谊——中考化学适应性模拟试题含解析.doc
- 2024年四川省成都市简阳市重点中学中考化学五模试卷含解析.doc
- 2024年广东省惠来县达标名校中考三模化学试题含解析.doc
- 湖南张家界五道水镇中学2024年中考适应性考试化学试题含解析.doc
文档评论(0)