记MFC俄罗斯方块制作过程
经过几天努力,终于做好了我的俄罗斯方块,这是我用MFC做的第一个游戏,也是第一个像样的东西。下面都是个人感受,也不知道对不对,不对的话大家不要笑我哦,希望能帮我指出错误来。
感觉做这个游戏需要先理解MFC和win32的运行机制,windows运行是靠消息的传递。我的游戏运行效果图是这样的:
具体开始制作了,首先要准备一张背景图,在视类里读取,然后在OnDraw()里显示,这样,当程序最小化恢复的时候就可以保证画面不会丢失。
做完背景,就可以正式开始制作方块的主要部分。
在这里,方块类要包括:初始化,生成新方块,方块的下落过程,向左,右,下移动,方块变形,将方块画到屏幕上,记录消除行数和等级,消除一行这些方面。
- const int BLOCK_LINE = 20;//当前地图的行数
- const int BLOCK_ROW = 10;//当前地图的列数
- class CBlock
- {
- public:
- CBlock(void);
- ~CBlock(void);
- private:
- // 当前方块形状
- int m_BlockShape;
- //下一个方块形状
- int m_nextBlockShape;
- //当前方块状态
- int m_BlockState;
- //等级
- int m_BlockLevel;
- //当前可消行数
- int m_BlockCurDelLine;
- //游戏是否在执行
- bool m_blockRunning;
- //当前方块位置
- POINT m_BlockPos[4];
- //下个方块位置
- POINT m_nextBlockPos[4];
- //当前的屏幕状态
- //BLOCK_LINE是行数,BLOCK_ROW是列数
- int m_Blockmap[BLOCK_LINE][BLOCK_ROW];
- public:
- // 初始化游戏
- void BlockInit( void );
- private:
- // 记录方块图形
- CBitmap m_bmpBlock[7];
- public:
- //创建一个新的方块出来,这里只给方块形状赋值
- void CreateNewBlock(void);
- private:
- //这里给方块位置赋值,
- //shape是形状, pt[]是用来接收方块坐标的(方块形状的排列坐标)数组
- //xPos是偏移量,就是方块显示位置和方块显示的框的最左边的差
- void MakeNewBlock(int shape, POINT pt[], int xPos);
- public:
- //将方块画在对应的DC上
- void DrawBlock(CDC* pDC);
- //方块的下落过程,主要部分
- void BlockDropDown(CDC* pDC);
- private:
- // 隐藏方块
- void HideBlock(CDC* pDC);
- // 背景图片变量
- CBitmap m_bmpBKGND;
- public:
- // 画下个方块的框框
- void DrawNextBlock( CDC* pDC );
- //方块左移
- void BlockLeft(CDC* pDC);
- //方块右移
- void BlockRight(CDC* pDC);
- //方块下移
- void BlockFastDown(CDC* pDC);
- //方块变形
- void ChangeState(CDC* pDC);
- // 消除一行
- //pDC是传入的DC
- //LineNum是消除的行从第几行开始(我这里是最上面为0,最下面为19)
- //start是 游戏是否是要把消除行以上的都置0,我是用在OnDraw()里,用来重画屏幕的,
- void DeleteLine(CDC* pDC, int LineNum, bool start);
- // 游戏是否结束,true=结束了
- bool BlockGameOver(void);
- // 计分板
- //del是决定是否是已消一行的
- void BlockScore(int del, CDC* pDC);
- //返回是否升级了,true=升级了
- bool BlockLevelUp(void);
- //返回下落速度
- int BlockSpeed(void);
- };
这里我采用了二维数组int m_Blockmap[20][10];记录游戏区。
在初始化后,就要生成新方块,采用随机数的方法。方块是通过坐标位置记录的,POINT m_BlockPos[4];
游戏是写在定时器里的,通过等级不同使下落时间也不同,游戏的主要过程是方块的下落过程。在这里首先判断是否已经结束,结束了则结束计时器,否则判断是否能下落,不能下落则判断是否能消除一行。这些都完成后则生成新方块,重新下落。
在KEY_DOWN事件中加入左移,右移,下移,变形的函数,就可以实现游戏了。
其他的功能就是自己随便添加的暂停,开始这样的了。那些就不写了。
游戏可执行程序下载地址:http://download.csdn.net/source/1595231
游戏源代码下载地址:http://download.csdn.net/source/1595110
点击这里加我为好友:http://student.csdn.net/invite.php?u=110891&c=3fdff026fca470b3
记MFC俄罗斯方块制作过程相关推荐
- Vs2010 MFC 简单制作过程中的问题
以前做过一段时间MFC,都忘得差不多了,最近又做了一个小界面.发现与vs2005中MFC有许多不同之处. vs2010的Dialog基类默认选择的是"CDialogEx". 1. ...
- 记一个简单Android图书阅读器的制作过程
记一个简单图书阅读器的制作过程 微澜 2018/9/27 qq:9611153 从有个想法,到到一个可用程序,断断续续几个月,花上不少的功夫,即便是简单的程序一个人写下来也是很难的.越写越是发现,想要 ...
- (转载)连连看游戏外挂详细制作过程
标 题: [原创]新人入手第一个游戏外挂,附上详细制作过程 作 者: caigui 时 间: 2013-01-09,00:56:16 链 接: http://bbs.pediy.com/showthr ...
- 简易数字时钟软件详细制作过程
这是我自己用VS2010制作的简易数字时钟小软件,在制作过程中收获知识不少,希望和初学MFC编程的朋友分享一下. 一.其功能有一下三点: 1.打开软件后,其程序自动获取当前电脑系统的日期.时间和周次, ...
- Js黑客帝国效果 文字下落 制作过程和思路
效果预览: http://jsfiddle.net/dtdxrk/m8R6b/embedded/result/ Js黑客帝国效果 文字向下落制作过程和思路 1.css控制文字竖显示 2.动态添加div ...
- Ireport制作过程
Ireport制作过程 1.首先要到Option下设置一下ClassPath添加文件夹 2.到预览->报表字段设置一下将要用到的字段 3.到编辑->查询报表->写sql语句,然后把语 ...
- MFC程序执行过程剖析
一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用 ...
- 通过WiFi控制智能小车机器人制作过程详解
之前发的作品都是基于蓝牙控制的智能小车机器人,由于蓝牙的传输范围比较小,所以控制距离的局限性比较大,并且通过蓝牙传输视频会明显出现卡屏的现象. 而通过WiFi方式控制智能小车机器人能达到100米左右的 ...
- rpt水晶报表制作过程
原文:rpt水晶报表制作过程 最近公司安排一个以前的项目,里面需要用到水晶报表,由于原来做这个项目的同事离职,所在公司的同事报表做成了rdlc类型的,而这类报表在加载的时候很难动态的从数据库加载数据, ...
最新文章
- 如何根据字典中值的大小,对字典中的项排序
- 为TIF、JPG图片添加地理坐标/平面直角坐标
- 通过sql-labs进行sql注入学习(一)
- jquery模拟可输入的下拉框
- 移动 Azure 资源后如何快速修复 Dashboard
- 第六十九期: 漫画说算法之什么是一致性哈希?
- 艾拉物联CEO :物联网时代的到来让安全问题显得尤为突出
- 流浪的python博客园_python学习心得第一章
- 网卡 远程唤醒问题故障排除
- spring cloud全家桶_吃透这份Github点赞120k的Spring全家桶笔记Offer拿到手软
- 【数学、dp】bigcoin 2013广东省赛E题
- Spring Boot整合Swagger3的分组问题
- Java21天打卡day19-异常
- 内部跳转(请求转发)和外部跳转(重定向)的区别?
- The Classic IQ Test
- 【DL小结2】CNN前向、反向传播及常用结构
- 高中数学联赛二试怎么准备
- 交换机的背板容量、交换容量和包转发能力
- 最终幻想X-2国际版+最终任务
- 大前端 - react- 服务端渲染 - Gatsby