首页 > 编程语言 > 详细

小妖精的完美游戏教室——人工智能,A*算法,启发因子篇

时间:2017-09-09 17:38:57      阅读:301      评论:0      收藏:0      [点我收藏+]

//================================================================
//
// Copyright (C) 2017 Team Saluka
// All Rights Reserved
//
// Author:小妖精Balous

//

//Summary:这里一共列出3种启发因子,启发因子决定搜索精确度与CPU开销
//
//================================================================

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Saruka
{
/// <summary>
/// 启发因子
/// </summary>
public abstract class Heuristics
{
public abstract float GetHeuristics(NavNode startNode, NavNode targetNode);
}

/// <summary>
/// 曼哈顿距离
/// </summary>
public class ManhattanDistance : Heuristics
{
public override float GetHeuristics(NavNode startNode, NavNode targetNode)
{
return Mathf.Abs(startNode.gridX - targetNode.gridX) + Mathf.Abs(startNode.gridY - targetNode.gridY);
}
}

/// <summary>
/// 欧几里得距离
/// </summary>
public class EuclideanDistance : Heuristics
{
public override float GetHeuristics(NavNode startNode, NavNode targetNode)
{
int disX = startNode.gridX - targetNode.gridX;
int disY = startNode.gridY - targetNode.gridY;
return Mathf.Sqrt(disX * disX + disY * disY);
}
}

/// <summary>
/// 八方向距离
/// </summary>
public class EightDirectionsDistance : Heuristics
{
public override float GetHeuristics(NavNode startNode, NavNode targetNode)
{
int disX = Mathf.Abs(startNode.gridX - targetNode.gridX);
int disY = Mathf.Abs(startNode.gridY - targetNode.gridY);
if (disX > disY) return 1.414213562f * disY + (disX - disY);
return 1.414213562f * disX + (disY - disX);
}
}
}

小妖精的完美游戏教室——人工智能,A*算法,启发因子篇

原文:http://www.cnblogs.com/balous/p/7498707.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!