Welcome

首页 / 软件开发 / Silverlight / Silverlight游戏设计(Game Design):(十三)帝国时代II(Demo)之“战争艺术”②

Silverlight游戏设计(Game Design):(十三)帝国时代II(Demo)之“战争艺术”②2011-08-12 博客园 深蓝色右手帝国时代是一部阐述世界战争发展史的游戏巨著,讲究还原真实的历史战争场景,其中的阵型系统为 游戏的极大亮点之一;玩家根据兵种的不同搭配上最合适的阵型时常能起到逆转乾坤的神效,经典的如前 枪,中骑,后投石,强大的阵型加上玩家精确的微操能瞬间扫荡大规模敌军而毫发不伤。阵型系统不仅仅 存在于即时战略游戏中,在《三国志》、《信长野望》等SLG策略游戏中,其同样是一者永远不可缺少的 重要机制。

本节,我将在上一节搭建的《帝国时代》Demo的基础上引入比原著更加灵活多变的自定义阵型系统, 以让战争游戏更显真实与华丽。

自定义阵型系统的灵感来源于国际象棋,阵型好比“棋盘”,作战单位好比“棋子”;因此从结构出 发,我选择使用Grid作为构建阵型系统的最底层载体,通过指定Row和Column即可随意布局棋子到指定方 格内:

在本节Demo中,我将“棋盘”摆放在HUD的中下方,并限制其为一个4*12最大容纳48单位的表格型载体 。

有了“棋盘”,当然还少不了“棋子”。“棋子”是一个图标,于是我创建一个名为Piece的类,该类 包含一个图片控件和一个矩形方块控件(血条):

上图为骑兵对应的“棋子”图标。接下来要实现自定义的棋子布局,我们还需为这些棋子增加座位交 互功能:即点击其中一个棋子后,该棋子为选中状态,并与接下来点击的位置或另一个棋子进行位置交换 ,代码很简单,大致如下:

Piece hitPiece = null; //点击的棋子
/// <summary>
/// 单位位置更换
/// </summary>
private void img_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
if (hitPiece == null && (int)((sender as Piece).Code) != -1) {
hitPiece = sender as Piece;
hitPiece.Effect = new DropShadowEffect() { BlurRadius = 8, ShadowDepth = 0, Color = Colors.Red };
} else if (hitPiece != null) {
int oldRow = Grid.GetRow(hitPiece);
int oldColumn = Grid.GetColumn(hitPiece);
Piece piece = sender as Piece;
int newRow = Grid.GetRow(piece);
int newColumn = Grid.GetColumn(piece);
Grid.SetRow(piece, oldRow);
Grid.SetColumn(piece, oldColumn);
Grid.SetRow(hitPiece, newRow);
Grid.SetColumn(hitPiece, newColumn);
hitPiece.Effect = null;
hitPiece = null;
}
e.Handled = true;
}