【译】一个游戏开发框架
发表于2016-03-09
版权:作者版权声明为http://www.codeproject.com/info/cpol10.aspx,可以翻译
简介
游戏开发框架(GameFX)只是一组简单的库,可以用作任何简单的2D游戏的基础。可以用来开发诸如吃豆子、贪吃蛇、俄罗斯方块甚至国际象棋。
如果你想看一个完整的教程请看https://sites.google.com/site/captainseesharpscode/gamefx---the-game-development-framework,在这个网站我们提供了一个一步步来的开发项目。我们首先有一个想法,然后我们开始设计程序,考虑各种开发的时候必须考虑的重点。最后,我们将把填上所有必要的代码来让它可以工作
背景
使用框架极大简化了游戏开发。你不需要考虑地图、图形和AI,因为它已经被分离和封装的。
就好比我们构建了一个有按钮、旋钮和开关的对话框。我们会建立一个有地图逻辑、绘制地图功能、寻路的对话框。对话框外面,我们将有按钮、开关、旋钮来操作地图、寻路和绘制图像。这样做将使得它更简单也更易于使用。如果我们不这样,我们将会做每一个游戏的时候修改一切。
使用代码
GameFX会处理瓦片地图,图形展示以及寻路,所以我们可以吧GameFX分成三个主要领域。让我们从瓦片地图开始。地图的最高层次的单位就是TileMap。TileMap的基本单位是Tile,我们可以把第一个领域(瓦片地图)分成三个功能组件,共同完成地图的功能。
· Tile(瓦片地图的基本单位)
· TileMap(可以操作的2D瓦片地图)
· Coordinate(用于瓦片地图的简单数据)
图形引擎只有一块
· GraphicsEngine(用于绘制TileMap)
我们可以把寻路分成三个组件
· Node(用于寻找一个路径的有趣机制)
· NodeHeap(Node的容器)
· SimplePathFinder(实现寻路算法)
下面是一个GameFX的简单例子。代码创建了一个10*10的地图。0代表地面,1代表路径,2代表墙。图形引擎会把地图绘制到Form1,所有对地图的变化都会实时展现出来。在地图的中间有一道墙。寻路器慧聪左上角找一条到右下角的路径。
using HenizeSoftware.GameFX.PathFinding;
using HenizeSoftware.GameFX.TileMap;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
TileMap myMap;
GraphicsEngine gfx;
SimplePathFinderpath;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
myMap = new TileMap(10, 10);
gfx = new GraphicsEngine(myMap, this.CreateGraphics(),
10, 10, RenderMode.OnChanged);
path = new SimplePathFinder(myMap);
path.ResistanceDictionary.Add(2, 255);
path.Start = new Coordinate(0, 0);
path.End = new Coordinate(9, 9);
gfx.ColorDictionary.Add(0, Color.Black);
gfx.ColorDictionary.Add(1, Color.Pink);
gfx.ColorDictionary.Add(2, Color.White);
gfx.DrawAllTiles();
for (ushort i = 8; i > 0; i--) //draw wall down the middle
myMap[4, i].Value = 2;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if(gfx != null)
gfx.DrawAllTiles();
}
private void button2_Click(object sender, EventArgs e)
{
foreach (Coordinate c in path.GetFullPath())
myMap[c].Value = 1;
}
}
}
感兴趣的点
代码里面可能会有一些我还没发现的bug。但是我已经开发了一个测试程序,允许你创建任意大小的地图,并且尽可能的在地图上创建蛇。蛇会在地图上爬而争夺食物。如果你选择绘制他们,它会允许你使用二进制地图,你也可以调整速度、首先你要点击创建新地图。你也不能把最后一条蛇移除掉。代码比较容易理解,但是我会检查示例代码的核心部分。
using HenizeSoftware.GameFX.PathFinding;
using HenizeSoftware.GameFX.TileMap;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
TileMap myMap;
GraphicsEngine gfx;
SimplePathFinderpath;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
myMap = new TileMap(10, 10);
gfx = new GraphicsEngine(myMap, this.CreateGraphics(),
10, 10, RenderMode.OnChanged);
path = new SimplePathFinder(myMap);
path.ResistanceDictionary.Add(2, 255);
path.Start = new Coordinate(0, 0);
path.End = new Coordinate(9, 9);
gfx.ColorDictionary.Add(0, Color.Black);
gfx.ColorDictionary.Add(1, Color.Pink);
gfx.ColorDictionary.Add(2, Color.White);
gfx.DrawAllTiles();
for (ushort i = 8; i > 0; i--) //draw wall down the middle
myMap[4, i].Value = 2;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if(gfx != null)
gfx.DrawAllTiles();
}
private void button2_Click(object sender, EventArgs e)
{
foreach (Coordinate c in path.GetFullPath())
myMap[c].Value = 1;
}
}
}
GameFX的能力远超这个例子。二级制地图和其他一些配置都很容易在游戏里面开启和配置。别害怕集成它们。它们会对你的项目有帮助的如果要获得一个更详细的了解,请阅读这里:下面是GameFX的类图: