⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 march_n.h

📁 这是一个游戏程序源码
💻 H
字号:
/////////////////
// March_new.h		:	《赤壁》行军策略算法的数据结构
// March_new.h		:	
//
// 版本0010		:	1997年1月24日
//
// 编写			:	董海
// written by	:	Dong Hai
//
// 编译器		:	Visual C++ 4.0
// Compiler		:	Visual C++ 4.0
//
// 版权			:	北京前导软件有限公司		1996-1997
// Copyright	:	WayAhead Software Co.Ltd.	1996-1997
/////////////////
// 此文件包括对行军中部队绕过各种障碍物的算法

 
#ifndef		CB_MARCH
#define		CB_MARCH


//#include	<math.h>
//#include	<string.h>
#include	<stdio.h>
#include	<memory.h>
#include	<string.h>
//#include	<conio.h>
//#include	<stdlib.h>
//#include	<dos.h>
#include	"CBMap.h"


extern		struct	MAP_LIB_STRUCT	MAP_Lib;



//表示前进方向的宏定义
#define		MARCH_GO_BY_LEFT								9000
#define		MARCH_GO_BY_RIGHT								9001




//用来定义在整个行军的模块中,所使用的数组的大小
#define		NUMBER_OF_TRACK									512
#define		NUMBER_OF_BEND									512


//用来定义轨迹数组中的第二维的值是轨迹的X还是Y坐标,或者是层数
#define		COORD_X											0
#define		COORD_Y											1
#define		LEVEL_NUM										2


//在行军策略中定义的各种部队和地形的宏定义
#define		MARCH_UNIT										8000
#define		MARCH_PLAIN										8001
#define		MARCH_WATER										8002
#define		MARCH_HILL										8003
#define		MARCH_SPECIAL									8004
#define		MARCH_BUILDING									8005
#define		MARCH_RIVERBED									8006
#define		MARCH_ONE_PEOPLE								8007
#define		MARCH_TWO_PEOPLE								8008
#define		MARCH_ONE_SHIP									8009
#define		MARCH_TWO_SHIP									8010
#define		MARCH_FOUR_SHIP									8011
#define		MARCH_FORTRESS									8012
#define		MARCH_WALL										8013
#define		MARCH_EMPTY										8014
#define		MARCH_CAN_SHIN									8015
#define		MARCH_CAN_NOT_SHIN								8016
#define		MARCH_LONG_STAIRCASE							8017
#define		MARCH_SHORT_STAIRCASE							8018



//在行军策略中的错误返回码
#define		MARCH_OK										0
#define		MARCH_ERROR_GROUND								-6000
#define		MARCH_ERROR_COORD_Y								-6001
#define		MARCH_ERROR_COORD_X								-6002
#define		MARCH_ERROR_INPUT_COORD							-6003
#define		MARCH_ERROR_FORWARD_IN_GET_COORD				-6004
#define		MARCH_ERROR_GO_OUT_X_IN_GET_LINE				-6005
#define		MARCH_ERROR_GO_OUT_Y_IN_GET_LINE				-6006
#define		MARCH_ERROR_DECODE								-6007
#define		MARCH_ERROR_GO_OUT_ARRAY						-6008
#define		MARCH_ERROR_STAY_HERE							-6009
#define		MARCH_ERROR_COORD								-6010
#define		MARCH_ERROR_CAN_NOT_GO							-6011
#define		MARCH_ERROR_UNIT_STATUS							-6012
#define		MARCH_ERROR_MARCH_TRACK							-6013
#define		MARCH_ERROR_FORWARD								-6014
#define		MARCH_ERROR_TO_PLAIN							-6015




//定义在给出两点的坐标以后,求出的第一步的方向
#define		MARCH_UP										0
#define		MARCH_RIGHT_UP									1
#define		MARCH_RIGHT										2
#define		MARCH_RIGHT_DOWN								3		
#define		MARCH_DOWN										4
#define		MARCH_LEFT_DOWN									5
#define		MARCH_LEFT										6
#define		MARCH_LEFT_UP									7
#define		MARCH_UP_UP										8
#define		MARCH_DOWN_DOWN									9
#define		MARCH_NO_UP_DOWN								10
#define		MARCH_FORWARD_NO_CHANGE							13




//定义是否能够走到目的地
#define		MARCH_CAN_RECEIVE								9200
#define		MARCH_CAN_NOT_RECEIVE							9201





//定义调用行军函数的单元的类型
#define		MARCH_SHIP										9000





//定义在直线轨迹上是否有障碍点
#define		MARCH_BLOCK										8500
#define		MARCH_NO_BLOCK									8501
#define		MARCH_SAME_POINT								8502


//定义是否为本身
#define		MARCH_IS_ME										8800
#define		MARCH_IS_NO_ME									8801



//定义是否接近目的地
#define		MARCH_IS_NEAR									8900
#define		MARCH_IS_FAR									8901



//
#define		MARCH_NO_NEW_END								9900
#define		MARCH_NEW_END									9901


/////////////


extern		int	March_Interface(int	BeginX,int	BeginY,int	BeginLevel,int	EndX,int	EndY,int	EndLevel);//,int	UnitNum);


/////////////




// 当给出了起始点和目的地的地址,求出下一步的前进方向
// 前进的方向是在返回值中传给调用者的
// MARCH_BeginX				:	起始点的X坐标
// MARCH_BeginY				:	起始点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int	MARCH_StepByStepOnHigh(short	MARCH_Current[3],short	MARCH_Next[3],int	MARCH_Aspect);




int	MARCH_CheckAround(short	MARCH_CurrentX,short	MARCH_CurrentY,int	Level);




// 根据当前点和起始点位置判断当前点是否在起始点的范围内
// MARCH_CurrentPoint		:	当前点的坐标
int MARCH_IsMe_2(int	MARCH_CurrentX,int	MARCH_CurrentY);






// 根据当前点和起始点位置判断当前点是否在起始点的范围内
// MARCH_CurrentPoint		:	当前点的坐标
int MARCH_IsMe_4(int	MARCH_CurrentX,int	MARCH_CurrentY);






// 如果出发点在山上或者城墙上,首先从出发点下到最底层
// MARCH_BeginX				:	出发点的X坐标
// MARCH_BeginY				:	出发点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int	MARCH_DownToGround(int	BeginX,int	BeginY,int	BeginLevel,int	EndX,int	EndY,int	EndLevel,int	NewBegin[2]);





// 如果目的地在山上或者城墙上,从目的地下到最底层
// MARCH_BeginX				:	出发点的X坐标
// MARCH_BeginY				:	出发点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int	MARCH_UpFromGround(int	BeginX,int	BeginY,int	EndX,int	EndY,int	EndLevel,int	NewEnd[2]);





int	MARCH_GoWithSameLevel(int	BeginX,int	BeginY,int	EndX,int	EndY,int	Level);



int		MARCH_StepByStepOnHigh1(short	MARCH_Current[3],short	MARCH_Next[3],int	MARCH_Aspect);



// 根据当前点和临时数组中的位置算出这点的坐标
// MARCH_CurrentPoint		:	当前点的坐标
// MARCH_NextPoint			:   下一点的坐标
// MARCH_Num				:	下一点在临时数组中的位置
int MARCH_GetCoord(short	MARCH_CurrentPoint[2],int MARCH_NextPoint[2],int MARCH_Num);



// 判断所给的坐标的点上的属性
// AroundPointX		:	所给点的X坐标
// AroundPointY		:	所给点的Y坐标
// MARCH_Level		:	所给点的层数
// 返回值			:	返回此点的属性
extern	int MARCH_CheckAroundPoint(int	AroundPointX,int	AroundPointY,int	MARCH_Level);



// 在出发点和目的地之间找到一条直线轨迹
// MARCH_BeginX		:	出发点的X坐标
// MARCH_BeginY		:	出发点的Y坐标
// MARCH_EndX		:	目的地的Y坐标
// MARCH_EndY		:	目的地的X坐标
int MARCH_LookForLine(int MARCH_BeginX,int MARCH_BeginY,int MARCH_EndX,int MARCH_EndY);



//当MARCH_LookForLine函数求出了一个大概的直线时,此函数在进行一下校正
// MARCH_BeginX		:	在MARCH_LookForLine函数中结束点的X坐标
// MARCH_BeginY		:	在MARCH_LookForLine函数中结束点的Y坐标
// MARCH_EndX		:	目的地的Y坐标
// MARCH_EndY		:	目的地的X坐标
int	MARCH_CorrectLine(int MARCH_BeginX,int	MARCH_BeginY,int MARCH_EndX,int	MARCH_EndY);



// 根据当前点的坐标和方向求出下一点的坐标
// NowX						:	下一点的X坐标
// NowY						:	下一点的Y坐标
// LastX					:	前一点的X坐标
// LastY					:	前一点的Y坐标
// Forward					:	所走的方向
extern	void	MARCH_TransBack(int	*NowX, int	*NowY, int	LastX, int	LastY, int	Forward);



// 根据当前点的坐标和下一点的坐标求出方向
// NowX						:	下一点的X坐标
// NowY						:	下一点的Y坐标
// LastX					:	前一点的X坐标
// LastY					:	前一点的Y坐标
// Forward					:	所走的方向
void MARCH_TransPoint(int	NowX, int	NowY, int	LastX, int	LastY, int	*Forward);




// 将已经得到坐标的轨迹转变成一条方向轨迹
// 
int MARCH_Transform(void);




// 利用当前点和目的地的坐标,求出下一点的坐标位置,此函数只考虑了1*1格士兵的情况
// MARCH_CurrentPoint		:	当前点的坐标
// MARCH_NextPoint			:   下一点的坐标
// MARCH_EndPoint			:	目的地的坐标
// MARCH_Aspect				:	靠左或靠右前进的标志位
int MARCH_OnePeopleWithCurrent(short	MARCH_CurrentPoint[2],short MARCH_NextPoint[2],short MARCH_EndPoint[2],int MARCH_Aspect);






// 当给出了起始点和目的地的地址,求出下一步的前进方向
// 前进的方向是在返回值中传给调用者的
// MARCH_BeginX				:	起始点的X坐标
// MARCH_BeginY				:	起始点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int		MARCH_StepByStepForward(int	MARCH_BeginX,int	MARCH_BeginY,int	MARCH_EndX,int	MARCH_EndY);






// 当给出了进入障碍物的进入点和离开障碍物的离开点后,求出一条绕过障碍物的比较优化的路径
// 此函数只考虑了1*1格士兵的情况
// MARCH_FromPlain			:	进入障碍物的进入点
// MARCH_ToPlain			:	离开障碍物的离开点
int	MARCH_OnePeopleFindWay(short	MARCH_FromPlain[2],short	MARCH_ToPlain[2]);





// 利用当前点和目的地的坐标,求出下一点的坐标位置,此函数只考虑了2*2格士兵的情况
// 与1*1格士兵不同之处是进入障碍物的进入点不是紧靠着障碍物的一点,而是与障碍物之间有一格距离的一点作为进入障碍物的进入点
// MARCH_CurrentPoint		:	当前点的坐标
// MARCH_NextPoint			:   下一点的坐标
// MARCH_EndPoint			:	目的地的坐标
// MARCH_Aspect				:	靠左或靠右前进的标志位
int MARCH_TwoPeopleWithCurrent(short	MARCH_CurrentPoint[2],short MARCH_NextPoint[2],short MARCH_EndPoint[2],int MARCH_Aspect);





// 当给出了进入障碍物的进入点和离开障碍物的离开点后,求出一条绕过障碍物的比较优化的路径
// 此函数只考虑了2*2格士兵的情况
// MARCH_FromPlain			:	进入障碍物的进入点
// MARCH_ToPlain			:	离开障碍物的离开点
int	MARCH_TwoPeopleFindWay(short	MARCH_FromPlain[2],short	MARCH_ToPlain[2]);







// 利用当前点和目的地的坐标,求出下一点的坐标位置,此函数只考虑了1*1格的船的情况
// MARCH_CurrentPoint		:	当前点的坐标
// MARCH_NextPoint			:   下一点的坐标
// MARCH_EndPoint			:	目的地的坐标
// MARCH_Aspect				:	靠左或靠右前进的标志位
int MARCH_OneShipWithCurrent(short	MARCH_CurrentPoint[2],short MARCH_NextPoint[2],short MARCH_EndPoint[2],int MARCH_Aspect);





// 当给出了进入障碍物的进入点和离开障碍物的离开点后,求出一条绕过障碍物的比较优化的路径
// 此函数只考虑了1*1格船的情况
// MARCH_FromPlain			:	进入障碍物的进入点
// MARCH_ToPlain			:	离开障碍物的离开点
int	MARCH_OneShipFindWay(short	MARCH_FromPlain[2],short	MARCH_ToPlain[2]);





// 利用当前点和目的地的坐标,求出下一点的坐标位置,此函数只考虑了2*2格船的情况
// 与1*1格船不同之处是进入障碍物的进入点不是紧靠着障碍物的一点,而是与障碍物之间有一格距离的一点作为进入障碍物的进入点
// MARCH_CurrentPoint		:	当前点的坐标
// MARCH_NextPoint			:   下一点的坐标
// MARCH_EndPoint			:	目的地的坐标
// MARCH_Aspect				:	靠左或靠右前进的标志位
int MARCH_TwoShipWithCurrent(short	MARCH_CurrentPoint[2],short MARCH_NextPoint[2],short MARCH_EndPoint[2],int MARCH_Aspect);





// 当给出了进入障碍物的进入点和离开障碍物的离开点后,求出一条绕过障碍物的比较优化的路径
// 此函数只考虑了2*2格船的情况
// MARCH_FromPlain			:	进入障碍物的进入点
// MARCH_ToPlain			:	离开障碍物的离开点
int	MARCH_TwoShipFindWay(short	MARCH_FromPlain[2],short	MARCH_ToPlain[2]);






// 利用当前点和目的地的坐标,求出下一点的坐标位置,此函数只考虑了4*4格船的情况
// 与1*1格船不同之处是进入障碍物的进入点不是紧靠着障碍物的一点,而是与障碍物之间有一格距离的一点作为进入障碍物的进入点
// MARCH_CurrentPoint		:	当前点的坐标
// MARCH_NextPoint			:   下一点的坐标
// MARCH_EndPoint			:	目的地的坐标
// MARCH_Aspect				:	靠左或靠右前进的标志位
int MARCH_FourShipWithCurrent(short	MARCH_CurrentPoint[2],short MARCH_NextPoint[2],short MARCH_EndPoint[2],int MARCH_Aspect);





// 当给出了进入障碍物的进入点和离开障碍物的离开点后,求出一条绕过障碍物的比较优化的路径
// 此函数只考虑了4*4格船的情况
// MARCH_FromPlain			:	进入障碍物的进入点
// MARCH_ToPlain			:	离开障碍物的离开点
int	MARCH_FourShipFindWay(short	MARCH_FromPlain[2],short	MARCH_ToPlain[2]);






// 当给出了起始点和目的地的坐标,求出一条行军轨迹,此函数只考虑1*1格士兵
// 这条行军的轨迹是在第0层地形上的,上山,下山和上城,下城则在另外的函数中处理
// MARCH_BeginX				:	起始点的X坐标
// MARCH_BeginY				:	起始点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int	MARCH_OnePeopleTrack(int	MARCH_BeginX,int	MARCH_BeginY,int	MARCH_EndX,int	MARCH_EndY);






// 当给出了起始点和目的地的坐标,求出一条行军轨迹,此函数只考虑2*2格士兵
// 这条行军的轨迹是在第0层地形上的,上山,下山和上城,下城则在另外的函数中处理
// MARCH_BeginX				:	起始点的X坐标
// MARCH_BeginY				:	起始点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int	MARCH_TwoPeopleTrack(int	MARCH_BeginX,int	MARCH_BeginY,int	MARCH_EndX,int	MARCH_EndY);






// 当给出了起始点和目的地的坐标,求出一条行军轨迹,此函数只考虑1*1格船
// MARCH_BeginX				:	起始点的X坐标
// MARCH_BeginY				:	起始点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int	MARCH_OneShipTrack(int	MARCH_BeginX,int	MARCH_BeginY,int	MARCH_EndX,int	MARCH_EndY);





// 当给出了起始点和目的地的坐标,求出一条行军轨迹,此函数只考虑2*2格船
// MARCH_BeginX				:	起始点的X坐标
// MARCH_BeginY				:	起始点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int	MARCH_TwoShipTrack(int	MARCH_BeginX,int	MARCH_BeginY,int	MARCH_EndX,int	MARCH_EndY);





// 当给出了起始点和目的地的坐标,求出一条行军轨迹,此函数只考虑4*4格船
// MARCH_BeginX				:	起始点的X坐标
// MARCH_BeginY				:	起始点的Y坐标
// MARCH_EndX				:	目的地的X坐标
// MARCH_EndY				:	目的地的Y坐标
int	MARCH_FourShipTrack(int	MARCH_BeginX,int	MARCH_BeginY,int	MARCH_EndX,int	MARCH_EndY);




int	MARCH_OnePeopleTrack1(int	MARCH_BeginX,int	MARCH_BeginY,int	MARCH_EndX,int	MARCH_EndY);



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -