共有回帖数  0  个 
	 
	
	
	
     
          
          
               
				
			 
				
					 
 
            
				   - 
						
						
							 
									先说数据结构
#includestdio.h 
#includegraphics.h 
#includetime.h 
#includestdlib.h 
#includebios.h 
#define ESC	27 
#define BLACK	0 
#define HEIZHUAN	1 
#define BAIZHUAN	2 
#define TREE1	3 
#define TREE2	4 
#define TREE3	5 
#define TREE4	6 
#define BASE	7 
#define PLAYERSHOT	1 
#define NPCSHOT	0 
#define NPC1	0 
#define NPC2	1 
#define NPC3	2 
#define PLAYER	3 
#define VIABLE	1 
#define NOVIABLE	0 
#define Y	0 
#define X	1 
char MapData[72][84]; 
char MapState[72][84]; 
int *Base; 
int *Tank[4][4][2]; 
int *Image[7]; 
int *Shot[4]; 
int *BirBg; 
int Direction[4][2]={-1,0,0,1,1,0,0,-1}; 
int PosFirst[6][2]={1,1,1,41,1,81,70,36,70,40,70,46}; 
int NextBg[4][3][2]={-2,-1,-2,0,-2,1,-1,2,0,2,1,2,2,1,2,0,2,-1,1,-2,0,-2,-1,-2}; 
int TankBg[4][3][2]={1,-1,1,0,1,1,-1,-1,0,-1,1,-1,-1,-1,-1,0,-1,1,-1,1,0,1,1,1}; 
int hei[4][2][2]={0,-1,0,1,-1,0,1,0,0,1,0,-1,1,0,-1,0}; 
struct tank{ 
 int d,hp,attack,define,i,si,interval,ShotInterval,type,CenterY,CenterX,now,ShotSpeed; 
 struct tank *link; 
}; 
typedef struct tank *PTANK; 
struct shot{ 
 int y,x,d,attack,interval,type,i; 
 struct shot *link; 
}; 
typedef struct shot *PSHOT; 
PTANK NpcHead,PlayerHead; 
PSHOT NpcShotHead,PlayerShotHead; 
int *NpcBir,*PlayerBir,BNpcI,BPlayerI,BNpcY,BNpcX,BPlayerY,BPlayerX,BType,BNpcIntval,BPlayerIntval; 
int *BW[8],BWY,BWX,BWI,BWType,BWIsRun,BWIsOver,BWShow,GetBW,BWTime=20; 
int NowNpc=0,NowMaxNpc=6,SumNpc=30,SumNpcDead=0,chance=4,GameOver=0; 
int DingShi,DSI,DSTime=100,MaxPlayerShot=1,NowPlayerShot=0,SuperPao=0; 
char CH='-1',str[11],MapName[11]; 
int YY=0,HP=200,NpcHp[3]={100,200,300},ATTACK=100,XI=0,SPEED=200; 
long POINT=0; 
FILE *fname,*fdata;
宏定义我就不说了 
char MapData[72][84];  
地图的数据,其值是HEIZHUAN,BAIZHUAN,TREE1,TREE2,TREE3,TREE4,BASE 
之一 
char MapState[72][84]; 
记录地图每一个栅格是否可行,可行VIABLE,不可行NOVIABLE
int *Base;  
int *Tank[4][4][2];  
int *Image[7];  
int *Shot[4];  
int *BirBg; 
游戏里的图像数据指针,在LoadData中绐它们分配内存并从data文件读取数据 
Base是基地指针,大小为18*18 
Tank[4][4][2],坦克图像的指针数组. 
坦克有4种,每个坦克有四个方向,每个方向有两张图像(以便使坦克走起来时,轮子看起来是旋转的) 
Image[7],地图数据的图像指针数组. 
每个元素分别指向HEAIZHUAN,BAIZHUAN,TREE1,TREE2,TREE3,TREE4,BASE 
Shot[4],子弹的四个方向的图像指针. 
BirBg,用于擦除生成坦克时留下的痕迹
int Direction[4][2]={-1,0,0,1,1,0,0,-1};  
一般来说在移动坦克或子弹时,需要判断方向,然后再决定坦克或子弹的坐标(y,x)的增量, 
但是每个方向坦克或子弹移动后的坐标(y1,x1)和原来的坐标(y0,x0)相比,增量是确定的(步长为一个地图栅格即6象素) 
所以有Direction这个数组后就不需要判断方向,只需要知道方向变量 
d即可 
y1=y0+Direction[d][Y];x1=x0+Direction[d][X]; 
(y1,x1)就是坦克或子弹在方向d移动的下一个坐标 
PosFirst[6][2]={1,1,1,41,1,81,70,36,70,40,70,46}; 生成坦克的四个坐标,基地坐标,最后一个暂时没用(绐第二个玩家预留的)
int NextBg[4][3][2]={-2,-1,-2,0,-2,1,-1,2,0,2,1,2,2,1,2,0,2,-1,1,-2,0,-2,-1,-2};  
int TankBg[4][3][2]={1,-1,1,0,1,1,-1,-1,0,-1,1,-1,-1,-1,-1,0,-1,1,-1,1,0,1,1,1};  
int hei[4][2][2]={0,-1,0,1,-1,0,1,0,0,1,0,-1,1,0,-1,0}; 
NextBg[4][3][2]用于判断坦克是否能向前移动 
 只有坦克在方向d上的前三点坐标都是可行的VIABLE时才能向前移动 
 [4][3][2](4个方向,前3点坐标) 
TankBg[4][3][2]用于擦除坦克移动后留下的痕迹 
hei[4][2][2]用于判断子弹击中黑砖或白砖后旁边的两点坐标是否是黑砖或白砖,是的话就要一起擦除 
NextBg[4][3][2] TankBg[4][3][2] hei[4][2][2]都是当前点的增量值,就像Direction[4][2] 一样,是同一个道理的
struct tank{  
 int d,hp,attack,define,i,si,interval,ShotInterval,type,CenterY,CenterX,now,ShotSpeed;  
 struct tank *link;  
};  
typedef struct tank *PTANK;  
struct shot{  
 int y,x,d,attack,interval,type,i;  
 struct shot *link;  
};  
typedef struct shot *PSHOT; 
坦克和子弹的结构体以及他们的指针变量PTANK,PSHOT 
interval是移动的间隔,i是移动间隔的记时变量(坦克与子弹都是一样) 
CenterY,CenterX是坦克的中心坐标(坦克占3*3栅格) 
now坦克在d方向上的当前图像(每个方向有两张图像) 
ShotSpeed坦克的发出的子弹的速度
PTANK NpcHead,PlayerHead;  
 npc坦克链的头指针,玩家坦克的头指针 
PSHOT NpcShotHead,PlayerShotHead; 
 npc子弹链的头指针和玩家子弹链的头指针 
int*NpcBir,*PlayerBir,BNpcI,BPlayerI,BNpcY,BNpcX,BPlayerY,BPlayerX,BType,BNpcIntval,BPlayerIntval;  
 生成npc坦克和玩家坦克时一组数据,后面的帖子再详细说明 
int *BW[8],BWY,BWX,BWI,BWType,BWIsRun,BWIsOver,BWShow,GetBW,BWTime=20;  
用于处理宝物的一组数据,任何时刻最多只能存在一个宝物 
int NowNpc=0,NowMaxNpc=6,SumNpc=30,SumNpcDead=0,chance=4,GameOver=0;  
int DingShi,DSI,DSTime=100,MaxPlayerShot=1,NowPlayerShot=0,SuperPao=0;  
char CH='-1',str[11],MapName[11];  
int YY=0,HP=200,NpcHp[3]={100,200,300},ATTACK=100,XI=0,SPEED=200;  
long POINT=0;  
游戏性相关相关数据,见名字基本上就能知道是什么意思了 
FILE *fname,*fdata; 地图文件指针和图像数据文件指��
							 
							 
							 
							  
							  
							  楼主 2016-01-28 14:50 回复
						 
						 
           
          
          
         
   
         
      
 
   
             
                  
                  
 
 
 
     
	 
  
	Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知