当前位置: 首页 > news >正文

网站开发个人简历word下载陕西网站建设设计

网站开发个人简历word下载,陕西网站建设设计,解析网站制作,搭建安装wordpress教程 pdfMFC坦克大战游戏制作 前言 现在的游戏制作一般是easyx,有没有直接只用mfc框架的,笔者研究了一番,做出了一个雏形,下面把遇到的问题总结出来 一、MFC框架制作游戏 初步设想,MFC可以选用 对话框 或者 单文档 结构&…

MFC坦克大战游戏制作


前言

现在的游戏制作一般是easyx,有没有直接只用mfc框架的,笔者研究了一番,做出了一个雏形,下面把遇到的问题总结出来


一、MFC框架制作游戏

初步设想,MFC可以选用 对话框 或者 单文档 结构,我们在上面画图,可以使用png的图片,这样保证能透明,然后使用鼠标和键盘操作 人物移动和子弹飞出,加上背景音乐,积分规则等等,就能制作出一份游戏来。这是游戏界面

二、遇到的技术难点

1.内存画图解决闪烁问题

MFC画图最麻烦的就是,闪烁问题,所以要尽量内存画图,然后一次性的输出。所有需要重绘的地方,使用 Invalidate(FALSE); 能保证最小程度上的闪烁

核心代码

      CPaintDC dc(this);CDC memDC;memDC.CreateCompatibleDC(&dc);CBitmap bmp;GetClientRect(&m_client);bmp.CreateCompatibleBitmap(&dc, m_client.Width(), m_client.Height());CBitmap* pOldBitmap = memDC.SelectObject(&bmp);CDC* pDC = &memDC;// 绘制到内存 DC//m_bg.Draw(memDC, m_client);//m_hero.Draw(memDC, m_heroPos);// 绘制背景pDC->FillSolidRect(m_client, RGB(0, 120, 0));  // 或用背景刷填充

注意看pDC是一个内存画图的memDC指针 

2.设定timer保持界面更新

设置了三个timer,一个界面更新,二是判断是否碰撞(包括坦克、地方坦克、子弹之间的碰撞)

	int nTimerID1 = 1;int nTimerID2 = 2;int nTimerID3 = 3;SetTimer(nTimerID1, 4, NULL);//一号定时器,4ms,全体发送 增加SetTimer(nTimerID2, 2, NULL);SetTimer(nTimerID3, 2000, NULL);//自动开火

 第三个是 让地方坦克自己运动、开活

switch (nIDEvent)
{
case 1:Invalidate(FALSE);break;
case 2://碰撞测试
{m_mtxJudgy.try_lock();std::thread Overlay(Judgy, this);Overlay.detach();m_mtxJudgy.unlock();
}
break;
case 3://自动开火
{

3.设计合适母类解决互动问题

我方坦克、地方坦克、子弹、都从一个母类派生来,母类的一些方法如下:

class MyObject
{
public:MyObject() { m_nSize = 32; };~MyObject() {};void Draw(CDC* pDC);void Move(int nDirection) {};//设置运动方向or方向bool IsOverlap(MyObject& obj);//判断两个物体是否碰撞bool IsFriend(MyObject& OBJ);void SetSize(int nSize);//设置外形尺寸void SetDirection(int nDir);void SetFriend(bool bFriend);void SetArmor(int nArmor);void SetSpeed(int nSpeed);int GetDirection();//访问m_nDirectionint GetSize();//访问m_nSizebool GetFriend();int GetArmor();int GetSpeed();public:int m_nSpeed;//<=0 stopint m_nArmor;//==0 destroy 0< disableCPoint m_ptPos;//当前坐标
protected:bool m_bFriend;int m_nSize;//外形范围int m_nDirection;//1234 上下左右 方向
};

4.多线程解决 子弹、坦克相遇问题

把判断每个物体之间的相遇都写到进程里面,可以使得游戏流畅,因为子弹不停地在飞,不能为了两个物体的碰撞就卡住其他进程

		m_mtxJudgy.try_lock();std::thread Overlay(Judgy, this);Overlay.detach();m_mtxJudgy.unlock();

判断的种类很多,有: 

//敌方坦克与墙壁、我方坦克、敌方坦克的碰撞测试及自动追踪我方坦克
for (i = 0; i < vecEnemyTank.size(); i++)
{//自动追踪if (!vecEnemyTank[i].m_nArmor)continue;vecEnemyTank[i].pre_pt = vecEnemyTank[i].m_ptPos;if (end != false){vecEnemyTank[i].ChangeDirection(MyTank);if (vecEnemyTank[i].m_dDis <= 1000)vecEnemyTank[i].Move(vecEnemyTank[i].GetDirection());}//敌方坦克与墙碰撞//敌方坦克与我方坦克碰撞//敌方坦克与敌方坦克碰撞}

总结

游戏视频如下,简陋了点,但是能用

2025.05.29-20.58.48

MFC坦克大战源码没有用任何第三方库资源-CSDN文库

源码传到这里

http://www.dtcms.com/a/461870.html

相关文章:

  • P2P技术
  • 面试真实经历某节跳动大厂Java和算法问答以及答案总结(一)
  • Python全栈(基础篇)——Day08:后端内容(切片+迭代+实战演示+每日一题)
  • 各大网站头条凡科免费网站可以做推广吗
  • 技术速递|GitHub 如何保护开发者免受版权执法过度影响
  • LLAVA-MINI论文阅读
  • OpenAI Agents 并行化实现
  • CNN卷计计算
  • 腾讯云服务器做网站可以吗徐州网站建设
  • 上市公司协会网站建设汇报wordpress接入qq互联
  • 前端 = [...this.orderList] (深拷贝)和this.orderList (引用赋值)
  • 部门管理|“删除部门”功能实现(Django5零基础Web平台)
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 12--日志模块设计
  • 服务器网站源码在哪七牛云配置wordpress
  • SQL-多对多关系
  • PostgreSQL 18 异步 I/O(AIO)调优指南
  • 购物网站名字大全云虚拟主机 多个网站
  • 使用DuckDB SQL求三阶六角幻方
  • 电子商务网站建设一般流程无忧代理 在线
  • 一文了解Function Calling、MCP、Agent联系与区别
  • 存储芯片核心产业链主营产品:兆易创新、北京君正、澜起科技、江波龙、长电科技、佰维存储,6家龙头公司主营产品深度数据
  • Git 常用命令完整指南
  • 网站维护入口房子装修设计软件
  • MySQL 延时从库的作用与意义
  • h5网站价格wordpress footer.php添加qq悬浮
  • 【脚本升级】银河麒麟V10一键安装MySQL9.3.0
  • android pdf框架-15,mupdf工具与其它
  • 前端通用文件下载方案:从 Blob 流处理到实际业务落地
  • 箭头函数的this指向问题
  • 【Vue】——生命周期、ref属性、hooks