Silverlight 游戏研发手记:(一) 差集运算在SLG战棋游戏战斗范围设定中的应用

  战棋游戏通常指以回合制为基础,角色在地图上按格移动作战的游戏,好比下棋一样,该类型游戏更侧重于策略,节奏较缓慢,注重精美、绚丽的画面,考验的是玩家运筹全局的智慧。耳熟能详的比如《梦幻模拟战》、《火焰纹章》、《大战略》、《炎龙骑士团》、《幻世录》等经典。

  战棋游戏占据了我太多记忆,每次看到类似的游戏都会激动不已,尤其是远距离攻击类型的弓箭手和魔法师,战局扭转往往就在一步之间。

  今天,作为一名游戏开发者,当技术与思想逐步成熟,理想似乎已不再是那么的遥不可及。以SLG战棋游戏战斗范围为例,我们可以巧妙的通过集合运算来实现几乎所有你能想到的角色战斗范围设定。

  动手前我们不妨先看一下《曹操传》中所有的战斗范围图例:

  见到此类素材大家会否觉得实在亲切。没错,就是我们小时候读书最常玩的找规律数学题。

  既然要找出规律,那么就得先分析出其中的共性与变化。最直接的共性便是所有的格子均是“对称”的;而发生变化的则是某些图例似乎都被“挖”去了一些;再往下想,这些被“挖”掉的格子同样也是“对称”的。由此,基于集合的差集运算第一时间浮现在脑海。

  规律把握的是否正确离不开证明过程,接下来我们随便以上图中任意几个图例为例加以验证:

  ……

  是不是开始有些激动了?

  最后的总结:所有“对称”的战斗范围都可以是基于某种规律N格长度的范围与基于另一种规律M格长度范围的差集,其中这两种规律可以相同,N与M也可以相同。由此便可衍生出如文中开头所有的战斗范围,以及更多未列出来的。

  有了以上强大的理论依据作为基础,接下来的编码便是手到擒来,我的思路大致如下。

  第一步,定义最常用的基本规律(即连续的战斗范围类型):

/// <summary>

/// 战斗范围类型

/// </summary>

public enum AttackRangeTypes {

/// <summary>

/// 无

/// </summary>

None = 0,

/// <summary>

/// 全八面(方形)

/// </summary>

Square = 1,

/// <summary>

/// 斜四面(菱形)

/// </summary>

Diamond = 2,

/// <summary>

/// 正四向(十字)

/// </summary>

Cross = 3,

/// <summary>

/// 斜四向(交叉)

/// </summary>

Oblique = 4,

}  

  除None外,它们2长度范围分别对应以下图例:

  第二步,以这些战斗范围(List<Point>)为返回值构造方法:

List<Point> GetRange(Point center, AttackRangeTypes attackRangeType, int range) {

List<Point> points = new List<Point>();

for (int x = -range; x <= range; x++) {

for (int y = -range; y <= range; y++) {

switch (attackRangeType) {

case AttackRangeTypes.None:

continue;

case AttackRangeTypes.Square:

break;

case AttackRangeTypes.Diamond:

if (Math.Abs(x) + Math.Abs(y) > range) { continue; }

break;

case AttackRangeTypes.Cross:

if (Math.Abs(x) != 0 && Math.Abs(y) != 0) { continue; }

break;

case AttackRangeTypes.Oblique:

if (Math.Abs(x) != Math.Abs(y)) { continue; }

break;

}

points.Add(new Point(center.X + x, center.Y + y));

}

}

return points;

}

/// <summary>

///
获取攻击范围坐标列表

/// </summary>

/// <param name="rangeType">范围类型</param>

/// <param name="range">范围</param>

/// <param name="exclusionRangeType">排除范围类型</param>

/// <param name="exclusionRange">排除范围</param>

/// <returns></returns>

public List<Point> AttackRange(AttackRangeTypes rangeType, int range, AttackRangeTypes exclusionRangeType, int exclusionRange) {

List<Point> points = GetRange(Coordinate, rangeType, range);

List<Point> excludePoints = GetRange(Coordinate, exclusionRangeType, exclusionRange);

return points.Except(excludePoints).ToList();



  第三步,游戏中,将玩家控制的角色坐标Coordinate作为以上方法的Center参数,通过前文提到的组合方式最终完成SLG战棋角色战斗范围动态设定:

  ……

  这是一款基于Silverlight的SLG游戏引擎的一部分,在线演示Demo 如下(点击下载该Demo源码):

  通过动态组合差集的方式设定SLG战棋角色的攻击范围,无论是灵活性、适用性还是拓展性都显得极其强大。当然,每个人的思维方式不一样,写出的算法也会大相径庭,游戏开发的乐趣就在于此:优化永无止尽。

  手记思考:当问题出现时若能正确的把握其本质规律,一切都将显得那么的简单。

时间: 2024-07-30 11:17:44

Silverlight 游戏研发手记:(一) 差集运算在SLG战棋游戏战斗范围设定中的应用的相关文章

策略战棋游戏《摇摆足球》试玩攻略

策略战棋游戏<摇摆足球>足球从表面上看是热血的东西,充满了激烈的身体对抗.但从另一个方面来讲,踢球不只是拼 体力,同时也需要脑力的激荡,尤其是把足球比赛当成一盘以双方球员为棋子来对弈的情况下.这款<摇摆足球>(DangleitisSoccer!)就是依照以上的思路来打造的,所以我们在游戏中 看不到狂野的飞奔和猛力的抽射,伴随在玩家左右的除了熟悉的激情配乐,就只剩下智慧火花的摩擦了. 游戏名称:<摇摆足球>价格:6元发布日期:2013年2月25日大小:39.1 MB<

Wesnoth 1.9.7发布 很受欢迎的战棋游戏

Battle for Wesnoth 韦诺之战 Wesnoth是一款开源的.很受欢迎的战棋游戏,其有着平衡的战斗设计.简单的玩法和强大的联网对战功能,被评为最好的开源游戏之一. 一款在GNU通用公共许可证下发布的.开放源代码的.免费的.自由的回合制策略游戏.游戏的创意来自于世嘉平台上的梦幻模拟战.韦诺之战的规则简单,人工智能十分强大,具有极高的挑战性和趣味性.游戏拥有多国语言支持,包括伟大的汉语!而且还有官方中文论坛为玩家提供社区服务. 韦诺之战是一个基于六边形地图的回合制策略游戏,可以进行单机

Wesnoth v1.9.5发布 开源的、很受欢迎的战棋游戏

Battle for Wesnoth 韦诺之战 Wesnoth是一款开源的.很受欢迎的战棋游戏,其有着平衡的战斗设计.简单的玩法和强大的联网对战功能,被评为最好的开源游戏之一. 韦诺之战是一款主要基于 C++++ 的回合制SLG游戏, 使用SDL作为图形引擎, 目前已经移植到了Windows.Linux.FreeBSD和Mac OS X等多种操作系统上, 有16种不同部族, 可以进行单机战役.多人游戏. Battle for Wesnoth v1.9.5更新日志: &http://www.ali

复古战棋游戏《异星之战》发布

机器人大战系列是任天堂的招牌战棋类游戏,最新发布的<异星之战(Mecho Wars)>就很像是一款 Android平台上的任天堂式战棋游戏.异星之战(Mecho Wars)异星之战(Mecho Wars)<异星之战>的故事发生在一个遥远的星系中,资源紧缺,因此,翼之十字军(Winged Crusade)和陆行者(Landians)之间经常发生战争,为了守护住仅有的资源,玩家需要在广阔的沙漠上制造并指挥各自阵营的战斗精英来与敌军决一死战.异星之战(Mecho Wars)异星之战(Me

策略战棋游戏《策略足球》限免中

足球不仅仅只有身体上的对抗,各种战术的运用较量同样精彩,<摇摆足球 Dangleitis Soccer!>就是这样一款将策略战棋与热血足球元素结合在一起的游戏.<策略足球>游戏截图游戏的画面元素虽然不多,但胜在精致,整体风格不错.游戏采用回合制的方式,需要从30名角色中轮流选择出四名球员,分别担任守门员,前锋和后卫等角色,角色的四项属性决定了他们适合担任的位置.四项属性分别是射门(Kick),抢断(Steal),移动(Move)和传球(Pass),其对应数值越大该项能力越强.<

精品角色策略战棋游戏《狩猎者》双版全免中

<狩猎者>是一款写实的军事战争题材策略战棋游戏,对于男同胞们的吸引力要比女同胞多很多啦.而且它不是款以剧情任务为主的战棋,更倾向于养成RPG的感觉.如果有耐心在不断重复的任务中培养起自己狩猎团队,体验成就感和满足感的朋友,那它会是个可以玩上很久的不错选择啦.目前两个版本都在免费中,抓紧机会下载试试吧~<狩猎者>的菜单界面有着 超酷的科幻风格,看上去非常带感.而进入任务后的游戏画面也十分的细致写实.你可以看到废旧工场地图上的铁网地面上一个个网格,转动的大齿 轮,杀死 敌人后飙射出的满

《魔法门:英雄交锋》经典战棋游戏降临iOS

游戏前瞻:<魔法门:英雄交锋>是育碧(UbiSoft)制作发行的一款策略战棋类游戏.游戏剧情设定在<英雄无敌5>的40年前,玩家需穿越Ashan领地,找寻增 强力量的道路,以拯救混乱的世界.游戏玩点:战棋类游戏的经典之作,高清画面.加入对战模式(同机对战/Online对战).评测正文:<魔法门:英雄交锋>曾经在 2009年时被IGN评选为最佳DS游戏,作为全世界最受欢迎战棋类游戏之一~这次iOS版本的发布,势必又会掀起一场游戏浪潮哦~整个游戏以PC版移植,在画面的表现上

在线多人3D战棋游戏《王者战场》发布

<王者战场(Champs: Battlegrounds)>是一款安卓平台战棋类游戏,有着华丽的3D画面及优秀的角色形象设计,而且最大的亮点在于支持 多人在线对战.王者战场(Champs: Battlegrounds)王者战场(Champs: Battlegrounds)<王者战场>采用360°全景俯视视角,玩家带领数人组成的队伍踏上竞技场,和不同的对手展开激烈对战.相比起以往战棋SLG强调地形.属性克制和如何与AI战斗,<冠军斗技场>侧重的是多人体验.王者战场(Cham

透过游戏研发项目特点看项目需求管理

游戏作为一种特殊的软件产品,比普通的软件开发更为复杂,因此,游戏项目的管理较之一般软件项目也更具挑战性.在软件工程中,需求管理是关乎项目生死存亡的首要环节.本文将透过游戏研发管理的视角,重点探讨如何通过有效的需求管理保证项目成功. 游戏研发项目特点 1.项目整体复杂性强 游戏是一种特殊的软件,尤其是大型网游,通常比一般的软件开发规模大.人数多.周期长.复杂程度高.首先,正规的游戏开发会包括策划.美术(含2D和3D).编程和测试等多个团队,如何使这些具备不同工作技能的团队成员协同工作,如何使各个工