签到

09月14日
尚未签到

共有回帖数 0

    Sienna

    等级:
    先说数据结构
    #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 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知