A*寻路算法及在游戏中的应用

这篇博客介绍了一个基于帧编程的小游戏,利用A*算法实现寻路功能。游戏环境搭建于Adobe Flash CS6,使用AS3.0语言开发。详细介绍了游戏中的类结构、界面管理以及核心算法流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻出了一个文档,很久以前学习A*时做的一个小游戏,基于帧编程,没用OOP

 

游戏地址:http://www.3366.com/game/77446.shtml

 

简介:

                          

                     

                        

                      

 

 

开发环境:adobeflash cs 6

开发语言为as3.0

使用帧转跳技术开发。

所有类继承自MovieClip

 

实体对象类

Star        星星障碍对象类。

Charecter   角色方块对象类。

Tile        地形对象类。

 

界面相关类

LevelChoice  关卡选择对象类。

ScoreBoard   得分界面类。

 

游戏使用时间驱动

ENTER_FRAME   事件 每过一帧时间间隔,自动触发一个回调函数。

 

MouseEvent.CLICK 事件 响应鼠标点击,触发回调函数。

 

主要功能函数模块:

地图模块:

创建游戏地图

A*模块:

A*寻路算法实现寻路

行走模块:

通过A*模块返回的路径,驱动对象行走

界面模块:

处理界面的显示和帧的转跳

 

核心算法:

A*寻路算法:

A*是一种启发式的算法,所谓的"启发式",就是对每一个搜索的位置进行评估,也就是把找的位置离目标的距离当成找点的一个依据,然后猜测这个点是否最佳。

决定哪些方格会形成路径的关键是下面这个等式:

 F = G + H

G=从起点A沿着已生成的路径到一个给定方格的移动开销。

H=从给定方格到目的方格的估计移动开销。这种方式常叫做试探。

1.
将开始节点放入开放列表(开始节点的FG值都视为0);
2.
重复一下步骤:
i.
在开放列表中查找具有最小F值的节点,并把查找到的节点作为当前节点;
ii.
当前节点从开放列表删除, 加入到封闭列表;
iii.
当前节点相邻的每一个节点依次执行以下步骤:
1.
如果该相邻节点不可通行或者该相邻节点已经在封闭列表中,则什么操作也不执行,继续检验下一个节点;
2.
如果该相邻节点不在开放列表中,则将该节点添加到开放列表中,并将该相邻节点的父节点设为当前节点,同时保存该相邻节点GF;
3.
如果该相邻节点在开放列表中, 则判断若经由当前节点到达该相邻节点G值是否小于原来保存的G,若小于,则将该相邻节点的父节点设为当前节点,并重新设置该相邻节点GF.
iv.
循环结束条件:
终点节点被加入到开放列表作为待检验节点时,表示路径被找到,此时应终止循环;
或者当开放列表为空,表明已无可以添加的新节点,而已检验的节点中没有终点节点则意味着路径无法被找到,此时也结束循环;
3.
终点节点开始沿父节点遍历, 并保存整个遍历到的节点坐标,遍历所得的节点就是最后得到的路径;

注:以上关于A*算法的描述来源于来源于: GameDev.net作者: Patrick Lester翻译:孙璨

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值