C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(七)传说中的A*寻径算法
2009-06-22 08:32:49 来源:WEB开发网接着,我将自己写好的曼哈顿A*寻径所有代码封装在QX.Game.PathFinder这个命名空间中,那么到此才进入本文的关键,如何通过C#来模拟角色寻路:
首先当然是引用:using QX.Game.PathFinder;
接着我们初始化需要的变量:
Rectangle rect;
private IPathFinder PathFinder = null;
private byte[,] Matrix = new byte[1024, 1024]; //寻路用二维矩阵
private int GridSize = 20; //单位格子大小
private System.Drawing.Point Start = System.Drawing.Point.Empty; //移动起点坐标
private System.Drawing.Point End = System.Drawing.Point.Empty; //移动终点坐标
这里要特别讲解一下GridSize这个变量,它定义了窗口坐标系中以多大一个尺寸来确定游戏坐标系的一个单元格(大家可以这样理解这两种不同的坐标系:假如游戏窗口大小为800*600像素,那么窗口坐标系中的(80,100)这个坐标,根据GridSize = 20来换算,在游戏坐标系中的坐标则为(80/20,100/20)=(4,5))。大家同时可以联想一下SLG类型游戏,人物处于的每个单元格都是由N*N像素组成的方块,GridSize就相当于N了;而该格子在游戏坐标系中的显示坐标则为((N/20), (N/20)),这样应该很好理解了吧。这样根据不同的需要来使用GridSize对坐标系进行缩小(/GridSize)和放大(*GridSize)操作,从而可以非常方便的实现各种效果并且被不同的情况所调用,后面的内容及章节会涉及到相关知识。
那么接下来我们在窗体构造函数中初始化二维矩阵,代码如下:
public Window7() {
InitializeComponent();
ResetMatrix(); //初始化二维矩阵
}
private void ResetMatrix() {
for (int y = 0; y < Matrix.GetUpperBound(1); y++) {
for (int x = 0; x < Matrix.GetUpperBound(0); x++) {
//默认值可以通过(非障碍物)在矩阵中用1表示
Matrix[x, y] = 1;
}
}
//构建障碍物(举例)
for (int i = 0; i < 18; i++) {
//障碍物在矩阵中用0表示
Matrix[i, 12] = 0;
rect = new Rectangle();
rect.Fill = new SolidColorBrush(Colors.Red);
rect.Width = GridSize;
rect.Height = GridSize;
Carrier.Children.Add(rect);
Canvas.SetLeft(rect, i * GridSize);
Canvas.SetTop(rect, 12 * GridSize);
}
//构建其他障碍物……(省略)
Start = new System.Drawing.Point(1, 1); //设置起点坐标
}
Tags:开发 WPF Silverlight
编辑录入:爽爽 [复制链接] [打 印]- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››WPF学习笔记12. Binding (5)
- ››WPF学习笔记11. Binding (4)
- ››WPF学习笔记10. Binding (3)
- ››WPF学习笔记9. Binding (2)
- ››WPF学习笔记8. Binding
更多精彩
赞助商链接