共有回帖数 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号
意见反馈 |
关于直线 |
版权声明 |
会员须知