经过几天努力,终于做好了我的俄罗斯方块,这是我用MFC做的第一个游戏,也是第一个像样的东西。下面都是个人感受,也不知道对不对,不对的话大家不要笑我哦,希望能帮我指出错误来。

感觉做这个游戏需要先理解MFC和win32的运行机制,windows运行是靠消息的传递。我的游戏运行效果图是这样的:

具体开始制作了,首先要准备一张背景图,在视类里读取,然后在OnDraw()里显示,这样,当程序最小化恢复的时候就可以保证画面不会丢失。

做完背景,就可以正式开始制作方块的主要部分。

在这里,方块类要包括:初始化,生成新方块,方块的下落过程,向左,右,下移动,方块变形,将方块画到屏幕上,记录消除行数和等级,消除一行这些方面。

Code:
  1. const int BLOCK_LINE = 20;//当前地图的行数
  2. const int BLOCK_ROW = 10;//当前地图的列数
  3. class CBlock
  4. {
  5. public:
  6. CBlock(void);
  7. ~CBlock(void);
  8. private:
  9. // 当前方块形状
  10. int m_BlockShape;
  11. //下一个方块形状
  12. int m_nextBlockShape;
  13. //当前方块状态
  14. int m_BlockState;
  15. //等级
  16. int m_BlockLevel;
  17. //当前可消行数
  18. int m_BlockCurDelLine;
  19. //游戏是否在执行
  20. bool m_blockRunning;
  21. //当前方块位置
  22. POINT m_BlockPos[4];
  23. //下个方块位置
  24. POINT m_nextBlockPos[4];
  25. //当前的屏幕状态
  26. //BLOCK_LINE是行数,BLOCK_ROW是列数
  27. int m_Blockmap[BLOCK_LINE][BLOCK_ROW];
  28. public:
  29. // 初始化游戏
  30. void BlockInit( void );
  31. private:
  32. // 记录方块图形
  33. CBitmap m_bmpBlock[7];
  34. public:
  35. //创建一个新的方块出来,这里只给方块形状赋值
  36. void CreateNewBlock(void);
  37. private:
  38. //这里给方块位置赋值,
  39. //shape是形状, pt[]是用来接收方块坐标的(方块形状的排列坐标)数组
  40. //xPos是偏移量,就是方块显示位置和方块显示的框的最左边的差
  41. void MakeNewBlock(int shape, POINT pt[], int xPos);
  42. public:
  43. //将方块画在对应的DC上
  44. void DrawBlock(CDC* pDC);
  45. //方块的下落过程,主要部分
  46. void BlockDropDown(CDC* pDC);
  47. private:
  48. // 隐藏方块
  49. void HideBlock(CDC* pDC);
  50. // 背景图片变量
  51. CBitmap m_bmpBKGND;
  52. public:
  53. // 画下个方块的框框
  54. void DrawNextBlock( CDC* pDC );
  55. //方块左移
  56. void BlockLeft(CDC* pDC);
  57. //方块右移
  58. void BlockRight(CDC* pDC);
  59. //方块下移
  60. void BlockFastDown(CDC* pDC);
  61. //方块变形
  62. void ChangeState(CDC* pDC);
  63. // 消除一行
  64. //pDC是传入的DC
  65. //LineNum是消除的行从第几行开始(我这里是最上面为0,最下面为19)
  66. //start是 游戏是否是要把消除行以上的都置0,我是用在OnDraw()里,用来重画屏幕的,
  67. void DeleteLine(CDC* pDC, int LineNum, bool start);
  68. // 游戏是否结束,true=结束了
  69. bool BlockGameOver(void);
  70. // 计分板
  71. //del是决定是否是已消一行的
  72. void BlockScore(int del, CDC* pDC);
  73. //返回是否升级了,true=升级了
  74. bool BlockLevelUp(void);
  75. //返回下落速度
  76. int BlockSpeed(void);
  77. };

这里我采用了二维数组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俄罗斯方块制作过程相关推荐

  1. Vs2010 MFC 简单制作过程中的问题

    以前做过一段时间MFC,都忘得差不多了,最近又做了一个小界面.发现与vs2005中MFC有许多不同之处. vs2010的Dialog基类默认选择的是"CDialogEx". 1. ...

  2. 记一个简单Android图书阅读器的制作过程

    记一个简单图书阅读器的制作过程 微澜 2018/9/27 qq:9611153 从有个想法,到到一个可用程序,断断续续几个月,花上不少的功夫,即便是简单的程序一个人写下来也是很难的.越写越是发现,想要 ...

  3. (转载)连连看游戏外挂详细制作过程

    标 题: [原创]新人入手第一个游戏外挂,附上详细制作过程 作 者: caigui 时 间: 2013-01-09,00:56:16 链 接: http://bbs.pediy.com/showthr ...

  4. 简易数字时钟软件详细制作过程

    这是我自己用VS2010制作的简易数字时钟小软件,在制作过程中收获知识不少,希望和初学MFC编程的朋友分享一下. 一.其功能有一下三点: 1.打开软件后,其程序自动获取当前电脑系统的日期.时间和周次, ...

  5. Js黑客帝国效果 文字下落 制作过程和思路

    效果预览: http://jsfiddle.net/dtdxrk/m8R6b/embedded/result/ Js黑客帝国效果 文字向下落制作过程和思路 1.css控制文字竖显示 2.动态添加div ...

  6. Ireport制作过程

    Ireport制作过程 1.首先要到Option下设置一下ClassPath添加文件夹 2.到预览->报表字段设置一下将要用到的字段 3.到编辑->查询报表->写sql语句,然后把语 ...

  7. MFC程序执行过程剖析

    一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用 ...

  8. 通过WiFi控制智能小车机器人制作过程详解

    之前发的作品都是基于蓝牙控制的智能小车机器人,由于蓝牙的传输范围比较小,所以控制距离的局限性比较大,并且通过蓝牙传输视频会明显出现卡屏的现象. 而通过WiFi方式控制智能小车机器人能达到100米左右的 ...

  9. rpt水晶报表制作过程

    原文:rpt水晶报表制作过程 最近公司安排一个以前的项目,里面需要用到水晶报表,由于原来做这个项目的同事离职,所在公司的同事报表做成了rdlc类型的,而这类报表在加载的时候很难动态的从数据库加载数据, ...

最新文章

  1. 如何根据字典中值的大小,对字典中的项排序
  2. 为TIF、JPG图片添加地理坐标/平面直角坐标
  3. 通过sql-labs进行sql注入学习(一)
  4. jquery模拟可输入的下拉框
  5. 移动 Azure 资源后如何快速修复 Dashboard
  6. 第六十九期: 漫画说算法之什么是一致性哈希?
  7. 艾拉物联CEO :物联网时代的到来让安全问题显得尤为突出
  8. 流浪的python博客园_python学习心得第一章
  9. 网卡 远程唤醒问题故障排除
  10. spring cloud全家桶_吃透这份Github点赞120k的Spring全家桶笔记Offer拿到手软
  11. 【数学、dp】bigcoin 2013广东省赛E题
  12. Spring Boot整合Swagger3的分组问题
  13. Java21天打卡day19-异常
  14. 内部跳转(请求转发)和外部跳转(重定向)的区别?
  15. The Classic IQ Test
  16. 【DL小结2】CNN前向、反向传播及常用结构
  17. 高中数学联赛二试怎么准备
  18. 交换机的背板容量、交换容量和包转发能力
  19. 最终幻想X-2国际版+最终任务
  20. 大前端 - react- 服务端渲染 - Gatsby

热门文章

  1. C#Treeview在拖拽时实现Image dragging效果
  2. 【PAT甲级】1099 Build A Binary Search Tree (30 分)
  3. 985高校的毕业生年薪大概有多少?看完你还会不努力读书吗
  4. 科技革命——智慧农业时代
  5. ZCC2480泛海微原厂80V,480KHz,1.5A 降压型电源芯片
  6. 【C语言练习题】动态分配内存
  7. java/php/net/python无人售货机管理系统设计
  8. 当当网Day2-Day3
  9. 码农Peter的悲惨故事,哈哈哈
  10. 【树】【动态规划】关于树上的一些问题