雄无敌在线--战场第四章133地图
//测试目的:1.验证程序有效性 2.调整RecoupGrid使符合情况
//以下常数是测量得出,因每个图是不一定一样的
// MapDown 和 MapLeft 的测试留待您来参与,呵呵
const MapUpper   = "057,003"
const MapRight   = "066,005"
const OriginPos  = "510,380"
const MapXoffset = "32,16"
const MapYoffset = "-32,16"
const RecoupGrid = "7,9"

Dim Str
Dim TestPos 
//上边界边界补偿测试
TestPos = "057,008"
Str = "以下为上框边界补偿测试:" & vbCrlf
Str = Str & "地图坐标{"&TestPos&"}到上框点["&MapUpper&"]的距离为:"
Str = Str & Offset( MapUpper, TestPos, MapXoffset, MapYoffset ) & vbCrlf
Str = Str & "原来的屏幕坐标为:{"&OriginPos&"},边界补偿后的屏幕坐标为:"
Str = Str & GetOriginPos( TestPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset,  MapUpper, ",", ",", MapRight ) & vbCrlf
MessageBox Str
TestPos = "074,019"
//右边界边界补偿测试
Str = "以下为右框边界补偿测试:" & vbCrlf
Str = Str & "地图坐标{"&TestPos&"}到右框点["&MapRight&"]的距离为:"
Str = Str & Offset( MapRight, TestPos, MapXoffset, MapYoffset ) & vbCrlf
Str = Str & "原来的屏幕坐标为:{"&OriginPos&"},边界补偿后的屏幕坐标为:"
Str = Str & GetOriginPos( TestPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset,  MapUpper, ",", ",", MapRight ) & vbCrlf
MessageBox Str
TestPos = "060,005"
//上/右边界混合边界补偿测试
Str = "以下为混合边界补偿测试:" & vbCrlf
Str = Str & "地图坐标{"&TestPos&"}到上框点["&MapUpper&"]的距离为:"
Str = Str & Offset( MapUpper, TestPos, MapXoffset, MapYoffset ) & vbCrlf
Str = Str & "地图坐标{"&TestPos&"}到右框点["&MapRight&"]的距离为:"
Str = Str & Offset( MapRight, TestPos, MapXoffset, MapYoffset ) & vbCrlf
Str = Str & "原来的屏幕坐标为:{"&OriginPos&"},边界补偿后的屏幕坐标为:"
Str = Str & GetOriginPos( TestPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset,  MapUpper, ",", ",", MapRight ) & vbCrlf
MessageBox Str
EndScript

Function GetOriginPos( MapPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset,  MapUpper, MapDown, MapLeft, MapRight )
//制作人员:xxchuchu
//制作时间:2011.01.09
//功能说明:[英雄无敌在线]中,从游戏[地图坐标]换算屏幕坐标时,返回经过[边界补偿]的屏幕坐标
//         其中参数 MapPos, OriginPos, RecoupGrid, MapXoffset, MapYoffset 必须
//                  MapUpper, MapDown, MapLeft, MapRight 没有的用 "," 代入
//参数说明:
//GetOriginPos 返回值,OriginPos加上补偿值后的坐标,格式:X,Y 字符型
//MapPos       需要计算的[地图坐标],格式: X,Y  字符型
//OriginPos    正常的人物[屏幕当前坐标],格式:X,Y 字符型
//RecoupGrid   需要补偿的格子范围,格式: RecoupX,RecoupY  字符型
//MapXoffset   游戏坐标X+1时屏幕坐标位移值,格式:X,Y 字符型
//MapYoffset   游戏坐标Y+1时屏幕坐标位移值,格式:X,Y 字符型
//MapUpper     游戏画面边界上边界的任一点,格式:X,Y  字符型
//MapDown      游戏画面边界下边界的任一点,格式:X,Y  字符型
//MapLeft      游戏画面边界左边界的任一点,格式:X,Y  字符型
//MapRight     游戏画面边界右边界的任一点,格式:X,Y  字符型
Dim MyArray, XOrigin, YOrigin, RecoupX, RecoupY
Dim Xoffset, Yoffset, Ystep, Xstep
	//假定游戏显示坐标不能为负数
	If InStr( MapPos, "-" ) Then 
		GetOriginPos = OriginPos
		Goto EndOfFun
	End If
	
	//记录原始的屏幕坐标
	MyArray = Split( OriginPos, "," )
	XOrigin = CInt( MyArray(0) )
	YOrigin = CInt( MyArray(1) )
	//记录需要补偿的X/Y的格子数
	MyArray = Split( RecoupGrid, "," )
	RecoupX = CInt( MyArray(0) )
	RecoupY = CInt( MyArray(1) )
	//上框补偿计算开始,这里是把Y轴向上推
	If MapUpper <> "," and InStr( MapUpper, "," ) Then 
		MyArray = split( MapXoffset, "," )
		Ystep   = MyArray(1)
		MyArray = Split( Offset( MapUpper, MapPos, MapXoffset, MapYoffset ), "," )
		Xoffset = CInt( MyArray(0) )
		Yoffset = CInt( MyArray(1) )
		If Abs(Yoffset) <= Abs( Ystep * RecoupX ) Then
			//具体怎么补偿,需要看不同游戏自己分析一下
			YOrigin = YOrigin - ( Abs( Ystep * RecoupX ) - Abs( Yoffset ) )
		End If 
	End If 
	//下框补偿计算开始,这里是把Y轴向下推
	If MapDown <> "," and InStr( MapDown, "," ) Then 
		MyArray = split( MapXoffset, "," )
		Ystep   = MyArray(1)
		MyArray = Split( Offset( MapDown, MapPos, MapXoffset, MapYoffset ), "," )
		Xoffset = CInt( MyArray(0) )
		Yoffset = CInt( MyArray(1) )
		If Abs(Yoffset) <= Abs( Ystep * RecoupX ) Then
			//具体怎么补偿,需要看不同游戏自己分析一下
			YOrigin = YOrigin + ( Abs( Ystep * RecoupX ) - Abs( Yoffset ) )
		End If 
	End If 
	//左框补偿计算开始,这里是把X轴向右推
	If MapLeft <> "," and InStr( MapLeft, "," ) Then