话不多说,先上图——



下面开始盘逻辑
一、语言、库
32位汇编,仅使用win32标准库
二、运行逻辑
首先我们要知道win32里一个简单窗体运行的逻辑
- 对于WinMain:
- 获得当前窗口句柄(GetModuleHandle
- 注册窗口类(会指定消息循环函数ProcWinMain
- 建立并显示窗口(CreateWindowEx
- 消息循环(GetMessage、TranslateMessage、DispatchMessage
- 对于ProcWinMain:(参数 hWnd,uMsg,wParam,lParam)
- uMsg传递窗口消息,常见的有WM_PAINT、WM_CREATE、WM_TIMER,WM_KEYDOWN…表示各种窗口状态
- 对于类似有按键消息时,具体按键信息由wParam传递
- 在循环过程中,我们就可以在不同的情况下加入自己的操作,同时也在特定时刻给窗口发送特定消息
特别关注的是:当窗口消息为WM_PAINT时,就能够重画窗口界面,这是我们游戏实现的基础
然后,我们再来盘一盘游戏的逻辑
- 游戏里有哪些物体
- 游戏人物(位置)
- 平台(位置)
核心就这两样,其他的都是花里胡哨的
- 控制逻辑
- 左右按钮按下,人物左右移动
- 平台固定上升
- 人物在不接触平台是固定下降;在平台之上则随着平台上升
整合一下
由于消息循环的默认刷新率很快,然而我们的游戏刷新频率不用那么高,所以需要设置一个定时器( SetTimer),并且初始化游戏内的物体,定时器的作用就是每隔固定时间(自己定义)就给窗口发送一个WM_TIMER消息,所以,我们就可以在WM_CREATE时设置定时器,然后接收到WM_TIMER时,游戏状态就更新一帧,更新完后再调用 InvalidateRect,给窗体发送WM_PAINT消息,重绘窗体
其中游戏状态就更新的内容包括(按先后顺序):
- 平台均向上移一个单位
- 判断人物状态,如果在平台上,则跟随平台向上;否则向下移一个单位
重绘窗体时需要绘制:
3. 平台
4. 人物
以上说的是最基本的实现逻辑,最后再给游戏加亿点点细节
ps:为了方便,用贴图完成所有效果(包括按钮,包括记分牌等等等),其实就是懒

具体实现参考源码吧
ps:
- 为了避免闪烁问题,可以使用双缓冲绘图
- 记得释放句柄,清除缓冲区
- 位图冒充按钮时,就是根据鼠标点击位置触发事件(参数同样利用wParam传递
指路源码
项目
想起了再写
本文介绍了如何使用32位汇编语言和win32标准库创建一个简单的游戏窗口。通过WinMain和ProcWinMain处理窗口消息,重点讨论了游戏逻辑,包括人物和平台的控制,以及通过定时器更新游戏状态。游戏人物根据左右按键移动,平台固定上升,人物在平台之上跟随上升。使用WM_PAINT消息重绘游戏界面,并通过双缓冲解决闪烁问题。文章还提到了利用位图模拟按钮及事件触发,并给出了源码参考。
8211

被折叠的 条评论
为什么被折叠?



