【译】一个游戏开发框架

发表于2016-03-09
评论1 2k浏览
版权:作者版权声明为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的类图:

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引