MFC与坦克大战系列(奇迹冬瓜)---chapter2(photoshop与TransparentBlt---快速生成背景与透明位图处理)

坦克大战的网络对战实现C++(客户端+服务端) 坦克大战本为书本《C++项目开发实战入门》中的一个基于MFC实现的单机游戏。因学习《TCP IP网络编程》便萌发用C++写了个简单的游戏服务器将坦克大战中的双人游戏开发为网络对战以检验自己学习成果。 服务器是使用C++实现,实际上写了两个版本,主要为通信协议不同,一个为TCP协议另一个为UDP协议,客户端对应也改了两个版本,但因为UDP协议的版本最后完成的,所以客户端的UDP版更完善,后续会详细讲解。 数据库使用MySQL,主要用于登录时候账号密码的验证。储存信息并不多,主要为用户UID,用户账号以及用户密 阅读详情

今天继续MFC与坦克大战系列.做程序是要有团队合作。毕竟大多数程序员不可能做到美工和程序都精通。但是只有一个人的时候。就需要快捷的生成比较看的过去的图片供游戏所需。就拿坦克大战这个游戏程序来说。刚开始构思的时候就需要考虑到它的扩展性。所以在做坦克大战之前首先要做的就是地图编辑器。那么既然是个坦克大战。直白的说各种障碍该有吧、草坪、沙丘、海水、树木等。原来先用java写过一个地图编辑器先试验一下。之后用MFC重写。原图如下。

用MFC重写了一点之后因为时间的关系。所以就取消了地图编辑器。自己用ps做大地图背景

接下来就是详细的过程介绍

(一)首先需要用到的工具。

(二)需要用的图片

(三)把三幅选中的图片拖入ps里面进行修改

(四)当三幅图都修改完成之后。新建一个1366*768像素的窗口进行图像的拼接。

这里选择1366*768是为了全屏游戏适应的分辨率。但是有个弊端。就是如果用小的分辨率的话,画面有一部分会显示不了。当然弹性的分辨率可以写代码解决。这里姑且用一种分辨率。

(五)选择沙丘和草地块。粘贴在背景为白色的原始地图上。生成一个平面的2D地图

(六)最后的生成图。要保存为bmp格式。也就是位图格式。这是在程序中最好识别的格式。当然对于贴图来说最好是png。只有png支持透明化处理。这是后话。

(七)背景也就是地图做的差不多了。接下来我们需要把地图贴上去。那么先选择打开vc2010.打开MFC类库。之后在最简单的对话框中贴上地图。打开模式如下。

(八)原计划全屏使用游戏。因此先来写。使对话框全屏的代码和操作

(九)接下来是DLg文件中的几个部分

在TankGameDlg.cpp中可以找到这个部分。这个是消息区。对应着映射。红色部分是系统的绘图消息。发送这个消息之后。系统会重新开始在对话框上绘图。

现在我不想让系统自动绘图。我要进行控制。自己贴图。那么首先删除红色的消息。接着删除红色消息对应的系统函数OnPain()如下图

这部分。已经写好的是绘制图标设备的上下文。但是我不需要。我只是要绘制背景而已。所以接下来我们创建一个独立线程来进行贴图。采取双缓冲模式。

在使用双缓冲之前。我们在初始化对话框的时候。让对话框全屏。

在初始化对话框函数中添加红色框的部分

第一句API函数是获得屏幕的宽

第二句API函数是获得屏幕的高

第三句移动对话框到(0,0)的坐标位置。并且宽和高为屏幕的宽和高。通过这种方法。对话框全屏化了。

接下来为大家介绍双缓冲的概念,如下图:

现在我们导入做好的资源。首先把我们做好的资源放进res里面去

如果不知道res文件夹在哪。可以新建项目。粘贴地址

如上图。现在导入位图资源。并会在resources.h里面生成一个ID

右击资源文件。添加-〉资源-〉导入-〉res-〉Map 以同样方法导入坦克

在resources.h文件中会生成两个ID。一个是地图的。一个是坦克的

129是地图的代号。130是坦克的

接下来实现双缓冲贴图

在TankGame1Dlg.h中

接下来在TankGame1Dlg.cpp中

在初始化对话框函数中添加红色部分

然后再最后添加

最后运行结果如下图

这时候大家就会发现一个问题就是tank和背景很不和谐。白色部分没有被透明化。所以图片要进行处理。本来有两种方式

一种是制作成坦克黑色周围白色和周围黑色的两张图进行逻辑运算。在很多地方都可以找到代码。

这里我们用一个API函数来解决。应为tank周围是白色的。只有一种单一色调。因此的话

红色为修改部分

最后结果如图。还有点白线是因为ps的原因。和程序无关

最后这一节的资源和代码给大家个链接地址。大家可以去下来参考一下,我们下周二再见

点击打开链接

C++与MFC框架打造双人坦克大战游戏实战 本文还有配套的精品资源,点击获取 简介:《坦克大战双人版》是一款经典游戏,采用C++编程语言和Microsoft Foundation Classes (MFC)框架进行开发。游戏中C++的面向对象特性被充分利用,用于模拟坦克、子弹、障碍物等实体,并通过继承、封装和多态性设计游戏元素。MFC框架简化了Windows应用程序的开发,提供了用户界面构建和事件驱动编程的支持。双人... 阅读详情

相关推荐

MFC 实现的坦克大战

MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战MFC 实现的坦克大战

MFC中CImage类显示的半透明PNG存在的问题以及处理方法

在MFC中自己也做过很多关于如何

lixiang987654321的专栏 8725

VC6.0的MFC单文档实现坦克大战小游戏.rar

VC6.0的MFC单文档实现坦克大战小游戏。在顶部随机产生三种不同形状的敌机(用矩形、三角形、圆形表示),每秒产生一个,产生哪一个是随机的(大量用到随机数)。横坐标是随机的,纵坐标开始都是0。敌机大小、速度随机。 下面有一个坦克,坦克的移动通过上下左右键控制,通过按键盘空格键发射子弹。子弹运动靠OnTimer实现,坦克运动靠OnKeyDown实现。 首先我们要定义数组(敌机数组(矩形、三角形、圆形)、子弹数组),然后进行初始化。 大概需要的函数有:Draw(坦克、子弹);Create敌机是1秒产生一个,Create子弹是按空格键产生;Move(敌机、子弹)是0.1秒产生一个(设置两个时钟)。还

VC6.0 MFC 单文档 坦克大战游戏 基础入门

坦克大战游戏 一、游戏简述 在顶部随机产生三种不同形状的敌机(用矩形、三角形、圆形表示),每秒产生一个,产生哪一个是随机的(大量用到随机数)。横坐标是随机的,纵坐标开始都是0。敌机大小、速度随机。 下面有一个坦克,坦克的移动通过上下左右键控制,通过按键盘空格键发射子弹。子弹运动靠OnTimer实现,坦克运动靠OnKeyDown实现。 首先我们要定义数组(敌机数组(矩形、三角形、圆形)、子弹数组),然后进行初始化。 大概需要的函数有:Draw(坦克、子弹);Create敌机是1秒产生一个,Create子弹是按

青哥 2180

MFC与坦克大战代码

可能rc资源被不小心删了又恢复。所以可能在vc里面打不开。不过可以用记事本打开。因为太大了。执行程序和代码分开上传。如果试玩最后的程序。可以在博客里面的链接里面下载。

MFC坦克大战

学习课程资源,不是很好的资源,为学生们提供一点小参考

MFC小游戏之坦克大战

这是基于MFC下的坦克大战游戏,编程工具使用VC++6.0。 下面将详细介绍如何一步一步实现坦克大战小游戏。 1.新建MFC工程 新建一个MFC工程,应用程序类型选择单文档类型,点击完成即可。 2.新建坦克大战类 3.定义结构体及变量 根据分析可知,坦克大战游戏主要有三个部分,即坦克,敌机,子弹。故在类的头文件中定义相应的结构体和变量。 由于坦克只有一个,敌机和子弹有多个,因此敌机和子弹使用结构体定义,坦克使用变量定义。在TanKeWar.h添加代码具体如下 typedef s

Zgh12138的博客 4511

坦克大战 mfc版

坦克大战 mfc版 带详细注释 一共二十关 有五种道具

基于MFC/WIN32写的坦克游戏

基于MFC/WIN32写的坦克游戏

憧憬,思考,奋斗,飞翔 1565

C++程序坦克大战MFC

我大学时候设计的一个最最简单的mfc坦克大战,适合最最最最最基础的人群,C++实现一个小demo,适合初级玩家试试水

mfc与坦克大战

用mfc框架写的坦克大战的一个小游戏.写出来分享给大家.

MFC学习之用ChatGPT生成一个坦克大战的代码框架

MFC实现坦克大战游戏框架

分享型博主 409

MFC与坦克大战第三节

MFC与坦克大战第三节 坦克的平滑移动 接着坦克大战博客的第二节内容

关于TransparentBlt 透明显示问题

包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有透明区域位图的方法。一、TransparentBlt 函数的使用TransparentBlt 函数在Windows98/Win

zhoubl668的专栏:远帆,梦之帆! 1万+

坦克大战:(MFC])

用mfc编写的坦克大战源码,程序压缩包,比较完整的坦克大战版本

量子通信:初识量子城域网

对量子城域网的概念、作用、拓扑、建设内容等进行了较为全面的初步介绍。

量子领域相关话题 3349

MFC与坦克大战系列(奇迹冬瓜)---chapter3(坦克属性定义与坦克的平滑移动)

今天我们继续坦克大战系列。我将沿用chapter2的代码继续为大家讲解。由于计划的修订第三节先完成我方坦克的移动。主要的操作流程如下: (一)首先打开上一节的代码,然后在资源解决方案中头文件和主文件的地方添加程序要自己定义的坦克的类和方法。 主要操作位右键头文件->头文件->新建项->.h文件 命名为Thing 在Thing.h里面添加的代码如下 附图。 #include "stdafx.

runner2012的专栏 7389

Python实现飞书机器人定时发送文本、图片等群消息

python实现飞书群自动发送告警消息

tyh_keephunger的博客 2万+
上一篇: c语言版数据结构(奇迹冬瓜)-数组和广义表(稀疏矩阵的乘法)
下一篇: c语言版数据结构(奇迹冬瓜)-数组和广义表(十字链表存贮稀疏矩阵的行列值)
utral董东东
博客等级 码龄16年 158粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值