一、简介
两点之间寻找最短路径,要考虑到存在障碍物遮挡和斜线移动的情况。
二、具体说明
说明可以参考下面的链接,对A*算法实现的描述。
三、具体实现
1、实现功能
2、寻路具体流程
3、关于F值
f = g + h
g表示当前移动到下一个点的消耗,平移为1,斜移动为 sqrt((x1-x2)**2 +(y1-y2)**2);
h表示当前移动到终点的消耗,不考虑斜移,不考虑障碍物
具体原理请查看下面的参考链接。
完整实现:
# -*- coding: utf-8 -*-
import os,sys,random,math
#地图设置
gameMapWidth = 10
gameMapHeight = 10
gameMap = []
#地图障碍物
obstacleCount = 5
#块状态
ITEM_STAT_NORMAL = 0 #空点
ITEM_STAT_OBSTACLE = 1 #障碍物
ITEM_STAT_START = 2 #起点
ITEM_STAT_END = 3 #终点
#起点和终点
spNum = -1
epNum = -1
#每块的属性
class Item:
def __init__(self,x,y,status):
self.x = x
self.y = y
self.status = status
self.mf = -1
self.mg = -1
self.mh = -1
self.mParent = None
self.isPath = 0
#初始化地图
def initMap():
for wc in xrange(gameMapWidth):
for hc in xrange(gameMapHeight):
gameMap.append(Item(wc,hc,ITEM_STAT_N