通过游戏的地图介绍GDI+

C#炸弹人游戏与地图编辑器开发:个人二十天项目实践 htmltable {th, td {th {pre {简介:《炸弹人游戏(带地图编辑器,浏览器.C#版)》是由独立开发者使用C#语言编写的项目,共九千行代码,展现了作者在二十天内的努力和创造力。本项目不仅是一个娱乐产品,还适合作为学习面向对象设计和GDI+图形库的实践材料。游戏中,作者可能利用了面向对象的方法构建游戏元素,使用了碰撞检测和定时器实现游戏机制,并通过GDI+实现了地图编辑器。项目还包含了地图浏览器以及各种道具和地形,增加了游戏的策略性和趣味性。 阅读详情

        我现在正在为 GenreOnline.com制作一款基于Internet的旋转风格的科幻游戏,叫做Unbound。旋转冒险游戏最重要的部分之一是地图。地图将游戏者旋转时所发出的统计信息图形化,使其更容易被理解。在.NET里,你可以使用图形设备接口+(GDI+)来给图形元素编程­­——在这种情况下图形元素就是地图。但是熟悉 Visual Studio 6.0里的GDI的开发人员会发现.NET里的GDI+已经相当的不同了。

        既然这是个基于旋转的游戏,你就不用实时生成地图——这是很幸运的,因为还有一大堆的信息要表现出来。 图 A显示了我们要转化到像 图 B这样的地图中的信息。

图A

点击放大
数据模型的一个子集

图B


点击放大
完成的Unbound地图

从实质上讲,这一过程调用了四个步骤:

  1. 打开( Open)一个地图用的模板——基本上是六边形图。
  2. 将图标放置(Place)到地图上的正确位置。
  3. 在地图上写上(Write)标题。
  4. 将地图保存(Save)到Web服务器上供使用。
ASP.NET的Web矩阵

        许多IT的专家惊奇地发现微软已经开始允许.NET的一部分免费使用。ASP.NET的Web矩阵工具是设计用来简化编译简单程序的。点击这里了解如何在你的开发工作中好好利用这个免费的工具。

设计

        要处理好这四个过程,我们就要向Unbound.MapEngine这个命名空间加入一个叫做MapImage的类。在构造器里,我们将把图像加载到一个GDI+的图形对象里。然后我们加入三个方法:PlaceIcon,WriteTitle,和SaveMap。

       这个目标的一部分是简单。除了一些简单的错误处理,我们不会做很复杂的事情。既然这将作为Windows服务的一部分在后台运行,我们就不用太担心性能或者企业服务(Enterprise Services)。

代码

        一开始我们就要在Visual Studio .NET里创建一个新的类别库项目。在缺省状态下,这个项目包括了System空间命名;我们同时还要包括GDI+空间命名:

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;

        现在我们需要一些对象来表示图像。首先,我们要抓取一个位图对象,这会加载hex paper,并保存完成的地图。下一步,我们需要一个图形对象,这才是我们使用GDI+操控的真正对象。我们会在类构造器里加载这两个对象:

protected Graphics MapBase;
protected Bitmap newBitmap;
public MapImage()
{
    //Load the image up here
    newBitmap = new Bitmap("c://map//map.bmp");
    MapBase = Graphics.FromImage(newBitmap);
}

PlaceIcon()这个方法会从图标库里取出一个图标(实际上就是我们服务器上地图目录里的一个文件名),再按照指定的坐标把它放在位图对象上:

public void PlaceIcon(float xCoordinate, float yCoordinate,
string iconType)
{
    Bitmap iconImage = new Bitmap("c://map//" +
iconType + ".bmp");
    MapBase.DrawImage(iconImage,xCoordinate, yCoordinate);
}

要使用WriteTitle()方法,我们就要用到.NET结构紧凑的FontFamily集合中的一个,这给了VB程序员对前台库前所未有的访问权。然后,我们将建立一个新的Front对象,再使用Draw方法集合里的另一个对象来放置文本。

public void WriteTitle(string textToWrite)
{
    FontFamily serifFontFamily = new
FontFamily (GenericFontFamilies.Serif);
    Font textFont = new Font(serifFontFamily, 12);
    MapBase.DrawString(textToWrite,textFont,
new solidBrush(Color.Black),
new RectangleF(100, 100, 250, 350));
}

最后,我们要使用位图对象的实例把图像保存为文件。然后我们就可以释放内存里的位图和图形对象:

public void SaveMap(string fileName)
{
    newBitmap.Save("c://map//" + fileName +
".bmp", ImageFormat.Bmp);
    newBitmap.Dispose();
    MapBase.Dispose();
}

结论

        System.Drawing命名空间里的GDI+类为Windows程序员提供了以先前版本的VB,甚至是C++里所缺少的重要功能。虽然C++程序员可以用其绘图,但是会更加复杂。GDI+所提供的功能能让你创建复杂的效果,向你展示Windows世界类别库开发的新空间。

VC6+GDI横版游戏源码:可编译调试的马里奥式毕设工程 GDI(Graphics Device Interface)是Windows平台最基础的2D图形渲染API,其核心依赖BitBlt、CreateCompatibleDC等原生绘图函数,适用于轻量级Win32游戏开发。理解GDI渲染管线对掌握传统C++图形编程至关重要——它不依赖DirectX或OpenGL,却需手动管理双缓冲、帧定时、位图切割与消息驱动循环。该技术在毕业设计、嵌入式GUI、工业HMI等低依赖场景中仍具工程价值。本文以可运行、可调试、可扩展的VC6+GDI横版过关游戏为实例,深入解析地图文本驱 阅读详情

相关推荐

陨石飞动游戏场景设计:图形、动画与编程的结合

动态元素是游戏场景中赋予游戏生命力的关键因素。它们可以是移动的物体,如行走的角色,也可以是环境变化,如飞舞的雪花或者飘动的旗帜。动态元素的实现,可以增强游戏的真实感,提升玩家的游戏体验。图形设备接口(GDI)是Windows操作系统的一个核心组件,它允许应用程序在各种输出设备上绘制文本、图形和其他图像元素。GDI通过设备上下文(DC)提供了一个抽象层,使得图形操作能够独立于特定的显示设备,无论是屏幕还是打印机。在游戏开发中,GDI可用于设计用户界面元素,如菜单、按钮、得分板等。

weixin_30481539的博客 1008

【GDI+】2048游戏

【GDI+】2048游戏   2048游戏在今年年初的时候风靡天下,作为一个程序员,在玩别人写的游戏的同时也想着用自己的方式来实现一下。由于只是做一个简单Demo,所以选择了MFC配合GDI+的方式来实现。 [TOC] 1、游戏规则   2048游戏是前段时间很火的一款小游戏,席卷P端,安卓和IOS。实际上这款游戏的规则比较简单。主要规则如下: - 1 游戏区域内随机出现分值为2或4...

freehawkzk的专栏 1065

VC6 GDI横版过关游戏源码解析:整图加载与碰撞检测实现

2D 游戏开发中,地图加载与碰撞检测是横版过关游戏的两大核心问题。传统方案依赖地图拼接,将小图元按矩阵组合;而本文介绍一种基于 Visual C++ 6.0 与 GDI 的实现思路:整幅关卡位图一次性载入,碰撞数据由文本文件描述,运行时代码遍历碰撞体链表进行修正。GDI 虽无硬件加速,但通过双缓冲与 BitBlt 即可满足 640x480 分辨率的渲染需求。该方案让美术出图与逻辑调整分离,适合毕业设计、项目实训及老工具链下的 2D 游戏学习。文章基于一份开源风格的横版过关源码,详细拆解了地图加载、角色动画、

weixin_29011395的博客 275

游戏编程基础(二)GDI透明半透明效果

半透明在游戏中通常用于若隐若现的特殊效果,如雾,隐形单位。半透明的原理是通过前景图片与背景图片像素的混合来实现的。 用公式表示即为:半透明色 = 前景色X不透明度 + 背景色X(1-不透明度) 为了制作半透明效果,需要先了解一些基本的知识: windows 位图结构 typedef struct tagBITMAP{   LONG bmType; //位图类型,必须为0

Leo-软件开发 3547

完整MFC迷宫追寻小游戏开发教程

MFC(Microsoft Foundation Classes)是微软公司提供的一套用于Windows应用程序开发的C++类库,其基于Win32 API封装,以简化Windows API的复杂性,并提供面向对象的编程接口。MFC广泛应用于GUI开发,尤其在早期的Windows桌面应用程序中占据主导地位。MFC框架的设计符合文档-视图架构(Document-View Architecture),这种架构将应用程序的数据显示与数据处理分开,提高了程序的模块性和可重用性。

weixin_35578748的博客 894

GDI+ 坦克大战

用GDI+实现坦克大战游戏的代码和资源,适合于游戏编程的初学者

使用WINDOWS的GDI开发游戏(6)完结篇

第六篇不知不觉我们的游戏已经实现了SPLASH,菜单显示,游戏画面显示,基本的碰撞检测,基本逻辑控制。已经初具游戏的样子了,但它仍然不是游戏。因为它缺乏游戏的基本元素--竞技性。没有竞技性的游戏是不能称为游戏的。那么我们本篇就需要加入这些因素,并让游戏运行起来比较合理,因为大家也发现了,所做的游戏敌方坦克移动很不合理,快的有点离谱,这里也要进行参数调整。首先为了玩家能有成......

我的程序世界 3148

gdi+游戏框架这是一个用vc6.0写的Win32游戏框架

gdi+游戏框架这是一个用vc6.0写的Win32游戏框架.当然,这算不上引擎.该源码付带了一个简单的粒子系统,用来模拟雪花测试.因为用了png图片绘制雪花,所以得到平均每秒也只有32帧.对于2D游戏来讲够了.如果用透明渐变的话绘图很明显变慢.可能这是GDI+一个不完美的地方.所以讲只要不是特效,或一定要用到透明渐变不要用png图片.BitBlt是DrawImage的一百四十倍!源代码中用了双缓冲,所以1024*764画图也不会出现闪烁!

使用WINDOWS的GDI开发游戏(5)

第五篇前面的框架已经构建出了一个雏形了,只是没有加入游戏控制逻辑而已,所以不能说是有意义的游戏,但相信同学们已经有所收获了。这篇我们就来给游戏加上灵魂,赋予游戏生命,形形色色的游戏都是依靠这部分的精彩编写,这里面涉及的知识也是最多的,什么AI、粒子系统、碰撞检测、物理系统、行走系统等等。不同的游戏也主要体现在这部分的不同。当然我们这个游戏不需要应用这些了,我们只需要作简......

我的程序世界 4454

仿魔塔GDI游戏

仿魔塔的Win32小游戏,使用原生GDI作为图形绘制接口,代码经过重构可读性高,对于想要学习GDI的朋友来说是一份和好的参考资料。

用到GDI+画图,把图片放到地图上

开发平台vs2008,基于对话框,MFC 。将树型控件中的子节点放到地图上,右击可以对其操作

c++项目开发——吃豆子游戏

游戏介绍: 该游戏总共有3关,每一关里有一个玩家和四个敌人,控制玩家的前进方向躲避敌人以及吃掉所有豆子,每一关的地图是不一样的,有一个隐藏按键可以一键通关。 功能结构图: 流程图: 开发环境: win7、vs2015 创建项目: 1、新建一个win32项目叫做dou 2、在stdafx.h中加入所需库文件:memeory、vector、algorithm、functional(在d...

sinat_34946888的博客 2384

c# gdi+ 地图绘制

c# gdi+ 地图绘制 读取坐标点 缩放 漫游 查询。

【180619】VC++场景游戏,人物移动快一点源码

VC++场景游戏,人物移动,学VC、编游戏中的示例,它的实现,靠的是以下知识和技术:  1.建立DirectX环境和创建工作页面的方法。  2.各种页面内容的拷贝方法。  3.GDI与DirectX图形处理方法的简单比较。  游戏测试操作方法:  A、在场景内点任意点,指挥主角移动。  B、将鼠标移到场景外,可以移动地图。  C、在微缩地图上点一下,可以快速定位。  D、ESC键,退出游戏。  你...

资源小站 863

GDI+游戏GDI+游戏GDI+游戏GDI+游戏GDI+游戏GDI+游戏

C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战

KLayout教程(二)编辑不同的形状

首先画一个基础的矩形,然后双击他可以定义他的坐标

集成光电子 1万+

c++ GUI应用---吃豆人游戏(Visual Studio 2019)

一、GUI简介 1、概念:图形用户界面,是指采用图形方式显示的计算机操作用户界面 2、核心技术:Swing、AWT 3、优点 (1)可以写出我们心中想要的一些小工具 (2)工作时候,也许需要维护到 Swing 界面 (3)了解 MVC 架构,了解监听 使用GDI绘图 (1)画点 在pacman.cpp文件中找到: // 获取消息 if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if(ms...

m0_51152186的博客 5263

Wireshark教程:解密HTTPS流量

Wireshark教程:如何解密HTTPS流量

nuan444979的博客 1万+

vb.net打砖块游戏

一张截图

g12339645的专栏 2793

基于分位数回归的静态CoVaR计算 案例与代码

原文链接:https://bbs.pinggu.org/thread-7925441-1-1.html 一、静态CoVaR模型介绍 二、资料简介 实现对相关期刊论文进行论文重现,解决实证分析中的技术操作问题。里面包含了每一步详细的步骤,可以方便的利用这个手册解决大部分利用分位数回归计算静态CoVaR的论文的模型实现问题。即从数据下载到模型实现一整条操作步骤。 关键词:【分位数回归】【Co...

ChenQihome9的博客 7503

高性能网站设计之缓存更新的套路

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。 我不知道为什么这么多人用的都是这

代码技巧 1万+

实战开发:新手小白如何用C++制作经典网游DNF

十年前,那时候的网吧还不叫网咖,那时候没有王者荣耀也没有英雄联盟,那时候梦幻西游刚推出珍宝阁系统,那时候巫妖王的灵魂还封闭在冰封王座。寻仙、穿越火线、征途、天龙八部……同时在线人数超百万的游戏纷纷涌现,那个中国网游群芳斗艳的年代,地下城与勇士无疑是最耀眼的那个。DNF当年有多火?那年小编还在读初中,跟同学去网吧,一排排全是在玩DNF,当时有人爆了一把双龙魔影光剑,整个网吧都炸了,一个地主家的傻儿子...

stone15165的博客 3267

手把手教你设计低噪声前置放大电路:从光电二极管到X射线探测器的实战配置

本文实战指南详细解析了低噪声前置放大电路的设计,重点针对光电二极管和X射线探测器等微弱信号源。文章深入对比了跨阻放大器与电荷灵敏放大器的核心架构、噪声优化策略及PCB布局技巧,手把手指导从电路选型、仿真验证到调试测试的全流程,助力工程师构建精准可靠的信号链。

tech5的博客 511
上一篇: 用GDI+抓屏并存成.jpg文件
下一篇: GDI+介绍
xmlscript
博客等级 码龄25年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值