• 大小: 0.01M
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-06-09
  • 语言: Python
  • 标签: 其他  

资源简介

寻路.py

资源截图

代码片段和文件信息

# 一个小地图的信息
class Point:
    “““表示一个点“““

    def __init__(self x y):
        self.x = x
        self.y = y

    def __eq__(self other):
        if self.x == other.x and self.y == other.y:
            return True

    def __str__(self):
        return “x:“ + str(self.x) + “,y:“ + str(self.y)

# 自动寻路
class AStar:
    “““A*算法python“““

    class Node:  # 描述AStar算法中的节点数据
        def __init__(self point endpoint G=0):
            self.point = point  # 自己的位置(array)
            self.father = None  # 父节点
            self.G = G  # g值,g值用到会重新计算
            self.H = (abs(endpoint.x - point.x) + abs(endpoint.y - point.y)) * 10

    def __init__(self map2d startpoint endpoint passtag=96):
        “““
        构造A*算法的启动条件
        :param map2d: Array2D类型的寻路数组
        :param startPoint: Point或二元组类型的寻路起点
        :param endPoint: Point或二元组类型的寻路终点
        :param passTag: int类型的可行走标记(若地图数据!=passTag即为障碍)
        “““
        # 开启表
        self.openlist = []
        # 关闭表
        self.closelist = []
        # 寻路的地图
        self.map2d = map2d
        self.width self.height = map2d.shape[:2]

        # 起点终点
        if isinstance(startpoint Point) and isinstance(endpoint Point):
            self.startpoint = startpoint
            self.endpoint = endpoint
        else:
            self.startpoint = Point(*startpoint)
            self.endpoint = Point(*endpoint)

        # 不可行走标记
        self.passtag = passtag

    def getMinNode(self):
        “““获得poenlist中F值最小的节点“““
        cur_node = self.openlist[0]
        for node in self.openlist:
            if node.G + node.H < cur_node.G + cur_node.H:
                cur_node = node
        return cur_node

    # 判断自己坐标在不在关闭表
    def pointCloseList(self point):
        for node in self.closelist:
            if node.point == point:
                return True
        return False

    # 查找开启表中有没有自己的坐标
    def pointOpenList(self point):
        for node in self.openlist:
            if node.point == point:
                return node
        return None

    # 判断是否是终点
    def endPointCloseList(self):
        for node in self.openlist:
            if node.point == self.endpoint:
                return node
        return None

    def searchNode(self minF offset_x offset_y):
        “““
        搜索节点周围的点
        :param minF:F值最小的节点
        :param offset_x:坐标偏移量
        :param offset_y:
        :return:
        “““

        # 越界检测
        if minF.point.x + offset_x < 0 \
                or minF.point.x + offset_x > self.width - 1 \
                or minF.point.y + offset_y < 0 \
                or minF.point.y + offset_y > self.height -

评论

共有 条评论