按键精灵大漠插件教程A星寻路插件,有用的么

按键精灵A星寻路插件,有用的么?有用的拿去吧。 _ 插件界面 - 按键精灵论坛
腾讯微博:
软件版本:2014.05软件大小:76.8M更新时间:2-21
软件版本:3.2.1软件大小:52.1M更新时间:04-06
软件版本:1.2.4软件大小:29.2M更新时间:10-28
软件版本:1.1.0软件大小:12.3M更新时间:12-29
查看: 16744|回复: 619
[插件下载]
按键精灵开发者4级可通过提升认证等级来升级勋章:
本帖最后由 kwok 于
20:33 编辑 哈罗,大家好,这次放一个关于A星的插件。08,09年就接触按键到现在也好久了,不过中间有几年时间完全没有写脚本。前段时间看到一个按键递归解A星的源码帖子:这个帖子足足看了我好几天才看明白,受益很深,虽然我从来没有用过A星,甚至不知道A星在什么时候起作用,但是我还是去学习了下传统的A星算法。我不知道按键如何定义结构体,所以按键要用传统的A星算法似乎有困难,刚好最近一直在琢磨易语言,于是尝试着用易语言写了这个插件。用法:把Astar.dll和Astar.html放到按键精灵plugin目录即可使用,也可以看到说明。命令说明:只有一个命令
GetPath要用这个插件,首先需要准备一个txt文档用来描述地图,在这个文档中,4表示障碍,0表示通道(起点和终点也同样描述为0),并且,这个文档的第一行、最后一行、第一列、最后一列都必须是4(代表地图4边障碍)。调用这个函数会生成一个新的txt文档,包含路径的信息,在这个文档中,4表示障碍,2表示探索过的区域,1表示最终的路线,0表示没有探索过的原有通道。每一个数字在文档中的位置,就是这个点的坐标,坐标的数值,横轴和纵轴都是以1开始,即最左上角的点坐标是(1,1)。这是因为在易语言中,数组下标的定义与按键不同,要注意区分。参数说明:参数1 文本型,原始地图文档路径。提前准备好的原始地图信息的txt文档,比如“D:\地图.txt”。参数2 文本型,路径地图文档路径。生成寻路之后的路径信息的txt文档,比如“D:\路径.txt”。参数3 整数型,起点x坐标。这个坐标是指的在txt文档中起点所在的点的列数,也就是横轴坐标。
参数4 整数型,起点y坐标。这个坐标是指的在txt文档中起点所在的点的行数,也就是纵轴坐标。
参数5 整数型,终点x坐标。定义同上。参数6 整数型,终点y坐标。定义同上。
参数7 整数型,搜索方向定义。0表示4方向搜索,1表示8方向搜索。当为0时,最后一个参数无效。参数8 整数型,能否跨越墙角。0表示不能跨越墙角,1表示可以跨越墙角(但仍不能从夹角中穿过障碍)。返回值说明:寻路成功会返回一个包含路径包含的点的坐标信息的文本,格式如"2,2|2,3|2,4|.....",用"|"分隔按顺序经过的点,第一个是起点,最后一个是终点,用","分隔每个点的x坐标和y坐标;如果寻路失败(终点无法到达),返回文本"0"。示例代码:(示例所用地图在压缩包中)//a为简单的4方向寻路示例
//b为寻路失败示例
//c为大地图4方向寻路示例
//d为大地图8方向寻路(可以切过墙角)示例
a = Plugin.Astar.GetPath("d:\原始地图1.txt", "d:\路径1.txt", 2, 2, 12, 2, 0, 0)
b = Plugin.Astar.GetPath("d:\原始地图2.txt", "d:\路径2.txt", 2, 2, 12, 2, 0, 0)
c = Plugin.Astar.GetPath("d:\原始地图3.txt", "d:\路径3.txt", 8, 8, 20, 5, 0, 0)
d = Plugin.Astar.GetPath("d:\原始地图3.txt", "d:\路径4.txt", 8, 8, 20, 5, 1, 1)
aa = split(a,"|")
bb = split(b,"|")
cc = split(c,"|")
dd = split(d,"|")
TracePrint "a路线信息:"&a
TracePrint "b路线信息:"&b
TracePrint "b路线信息:"&c
TracePrint "b路线信息:"&d
TracePrint "a路线总长:"&ubound(aa)
TracePrint "b路线总长:"&ubound(bb)
TracePrint "c路线总长:"&ubound(cc)
TracePrint "d路线总长:"&ubound(dd)
复制代码示例效果:绿色为起点,红色为终点,蓝色是路线演示1:小地图4方向寻路您所在的用户组无法下载或查看附件演示2:无法寻路您所在的用户组无法下载或查看附件演示3:大地图4方向寻路您所在的用户组无法下载或查看附件演示4:大地图8方向寻路(原始地图与演示3相同)您所在的用户组无法下载或查看附件资源下载:您所在的用户组无法下载或查看附件写在后面:其实我真的不知道A星到底如何在脚本中使用,不过这个插件可以生成地图TXT,可以返回路径的坐标,我相信是足够进行下一步处理来真正应用到游戏中的了。由于按键精灵的QUI似乎不支持控件数组,所以我没有办法很好的演示效果,只能通过txt来观察,当地图很大的时候,可能看起来会很复杂。所以我用易语言做了一个模拟演示的程序,大家可以自己玩玩。另外,一个完美的A星可能非常复杂,我这个只是传统A星算法里面最为基础的,没有更多复杂情况的处理,就是一个简单的寻路。并且,在地图很大,障碍很复杂,而又使用8方向寻路的时候,会出现路径并非最短的结果(当然,离最短也很接近了),我至今仍然未能明白问题在哪里,可能是方向的差异所致(具体的表现大家可以在我提供的演示程序里,试试大地图8方向,就能看出来正反方向造成的差别)。
&真的可以用&
按键精灵开发者1级可通过提升认证等级来升级勋章:
好东西啊!!!!!
huangxiaochuan
学有所成学有所成勋章,新手步入按键学堂的第一枚勋章按键精灵开发者4级可通过提升认证等级来升级勋章:黄瓜勋章(永久)体验商业小精灵活动的奖励
牛啊 支持了
想象之中,别人与我没有不同
按键精灵开发者2级可通过提升认证等级来升级勋章:幸运草勋章(永久)商业小精灵限时活动勋章。单身汪勋章单身贵族的专属勋章
按键精灵A星插件
按键精灵开发者3级可通过提升认证等级来升级勋章:鹰眼勋章鹰眼注册用户专属勋章黄瓜勋章(永久)体验商业小精灵活动的奖励
其实已经很好了!
按键精灵开发者4级可通过提升认证等级来升级勋章:按键会员(月)按键会员绑定账号后自动赠送
牛,真是太牛了,佩服佩服
按键精灵开发者4级可通过提升认证等级来升级勋章:
看来是没什么人需要这个东西了么- -
按键精灵开发者4级可通过提升认证等级来升级勋章:爱心大使积极帮助新手(可向管理员进行申请)鹰眼勋章鹰眼注册用户专属勋章黄瓜勋章(永久)体验商业小精灵活动的奖励幸运草勋章(永久)商业小精灵限时活动勋章。马年勋章(360天) 马年纪念勋章(360天)
按键精灵开发者5级可通过提升认证等级来升级勋章:学有所成学有所成勋章,新手步入按键学堂的第一枚勋章认证考霸(90天)参加考霸活动,对认证考了十次以上用户的鼓励
谢谢分享..... 以后就靠它了
幸运草勋章(永久)商业小精灵限时活动勋章。鹰眼勋章鹰眼注册用户专属勋章认证考霸(90天)参加考霸活动,对认证考了十次以上用户的鼓励按键精灵开发者4级可通过提升认证等级来升级勋章:学有所成学有所成勋章,新手步入按键学堂的第一枚勋章论坛GG按键论坛男性用户勋章马年勋章(360天) 马年纪念勋章(360天)十周年勋章(360天)十周年纪念勋章按键卫士(90天)参与“打击山寨,维护按键”活动抢楼达人(30天)参与抢楼活动黄瓜勋章(永久)体验商业小精灵活动的奖励双蛋勋章(30天)双蛋活动勋章(30天)月全勤论坛自然月(如8.1-8.31)签到满勤,系统会在月底自动判断发放。
感谢楼主的分享,学习一下
不错嘛!!!!!
浪花一大朵
的发挥规范化示范岗
常州地区老乡
按键精灵开发者4级可通过提升认证等级来升级勋章:
按键论坛已经远不如前了么。。。
流浪在外的狼
学习中,研究一下
新手 到处灌灌
回复看看了
魔域脚本制作 讨论技术的夜可找我!
按键14周年庆纪念勋章按键14周年庆纪念勋章(360天)按键精灵开发者6级(新浪V认证)通过新浪微博加V后自动发放,并替换普通的认证6级勋章。 学有所成学有所成勋章,新手步入按键学堂的第一枚勋章
易语言 怎样调用?上传时间:
【江中游】A星寻路算法
专辑名称:
专辑创建者:
视频数:19
播放次数:1,704,144
56官方微信
扫一扫发现精彩Public Declare Function FindPath Lib "zd/LY_Cstar_VB.dll" (ByVal StarX As Integer, ByVal StarY As Integer, ByVal StopX As Integer, ByVal StopY As Integer, ByVal Space As Integer, ByVal MapSRC As String, ByVal ClickXY As Integer, ByVal sn As String) As String
Private Sub Command1_Click()Dim ss As Stringss = FindPath(154, 39, 35, 210, 0, "zd/1.bmp", 2, "dl_8889888")If ss && "-1" ThenMsgBox (ss)End IfEnd Sub
注意VB不能像DELPHI一样传递变量 赋值变量返回 所以特别做了有返回值的函数FindPath,另外传递字符串 请用PCHAR类型
.DLL命令 FindPath, 逻辑型, "LY_Cstar.dll", "FindPath"
.参数 StarX, 整数型
.参数 StarY, 整数型
.参数 StopX, 整数型
.参数 StopY, 整数型
.参数 Space, 整数型
.参数 MapSRC, 文本型
.参数 ClickXY, 整数型
.参数 sn, 文本型
.参数 outstring, 整数型, 传址
.局部变量 DD, 整数型.局部变量 SS, 逻辑型
SS = FindPath (418, 117, 170, 261, 0, &2.bmp&, 2, &dl_8889888&, DD).如果 (SS)
信息框 (&计算值:& + 指针到文本 (DD), 0, ).否则
信息框 (&设置参数不能到达此处:&, 0, )
COM DLL方式
//开始按钮_点击操作功能 开始_点击()
TS = com("DL.CStar")
// 创建插件对象 com关键字必须是小写
ss= TS.FindPath(111,41,23,85,0,"C:\\Users\\momo\\Desktop\\C星寻路验证程序\\pic\\1004.bmp",2,"保密安全码")
辅助.消息框(ss)功能结束
4、按键精灵
ss=Plugin.DL_Cstar.FindPath(154,39,35,210,0,"Map\1.bmp",2,"dl_8889888")MessageBox ss
unit Unit2;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdC
TForm2 = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
{ Private declarations }
{ Public declarations }
Form2: TForm2;
implementation
{$R *.dfm}//------------------------------------------------------------------------------自动释放资源function FindPath(StarX, StarY, StopX, StopY, Space: I MapSRC: PAnsiCClickXY: I
sn: PAnsiCvar outstring: PAnsiChar): BExternal 'zd/LY_Cstar.dll' ;//NAME 'FindPath2'//------------------------------------------------------------------------------//procedure TForm2.Button1Click(Sender: TObject);var
ss:PAnsiCbeginif FindPath(154,39,35,210,0,'zd/1.bmp',2,'dl_8889888',ss) thenShowMessage(ss);
// fffDlg.cpp : implementation file//
#include "stdafx.h"#include "fff.h"#include "fffDlg.h"
#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif
/////////////////////////////////////////////////////////////////////////////// CFffDlg dialog
CFffDlg::CFffDlg(CWnd* pParent /*=NULL*/) : CDialog(CFffDlg::IDD, pParent){ //{{AFX_DATA_INIT(CFffDlg)
// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-&LoadIcon(IDR_MAINFRAME);}
void CFffDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFffDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP}
BEGIN_MESSAGE_MAP(CFffDlg, CDialog) //{{AFX_MSG_MAP(CFffDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAPEND_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////// CFffDlg message handlers
BOOL CFffDlg::OnInitDialog(){ CDialog::OnInitDialog();
// Set the icon for this dialog.
The framework does this automatically //
when the application's main window is not a dialog SetIcon(m_hIcon, TRUE);
// Set big icon SetIcon(m_hIcon, FALSE);
// Set small icon
// TODO: Add extra initialization here
return TRUE;
// return TRUE
unless you set the focus to a control}
// If you add a minimize button to your dialog, you will need the code below//
to draw the icon.
For MFC applications using the document/view model,//
this is automatically done for you by the framework.
void CFffDlg::OnPaint() { if (IsIconic()) {
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon); } else {
CDialog::OnPaint(); }}
// The system calls this to obtain the cursor to display while the user drags//
the minimized window.HCURSOR CFffDlg::OnQueryDragIcon(){ return (HCURSOR) m_hI}
void CFffDlg::OnOK()
{ // TODO: Add extra validation hereS String d1,d2; d1="C:\\LY_Cstar.dll"; d2="C:\\1.bmp";
HINSTANCE Hint = ::LoadLibrary(d1);//加载我们刚才生成的dll if(Hint) {
typedef void(WINAPI*ADD)(CString);//函数指针类型
ADD b = NULL;
b = (ADD)GetProcAddress(Hint,"A");//取得dll导出的add方法
typedef CString (WINAPI*ADD1)(int,int,int,int,LPCTSTR);//函数指针类型
ADD1 B=NULL;
B = (ADD1)GetProcAddress(Hint,"GetPath");//取得dll导出的add方法
//d=B(2,2,20,20,""); } CDialog::OnOK();}
阅读(...) 评论()

我要回帖

更多关于 按键精灵自动寻路教程 的文章

 

随机推荐