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

📄 mapgen.cpp

📁 symbian 的一个 二维飞行游戏 源码 及相关技术文章
💻 CPP
字号:
// Copyright 2002 Kenneth Guy,
// 

#include <iostream>
#include <fstream>
#include <vector>

typedef int TInt;
typedef short TInt16;
typedef unsigned int TUint32;
typedef unsigned short TUint16;


#include "TMapLineType.h"
#include "TPathLineType.h"

#include "map.h"
#include "paths.h"
#include "header.h"

/*
  MapDataOffset         0
  Paths                4
  ShipSprite                 8
  ShipDeathStartSprite       12
  ShipDeathEndSprite         16
  BadGuyDeathStartSprite     20
  BadGuyDeathEndSprite       24
  BulletPower1_StartSprite   28
  BulletPower2_StartSprite   32
  BulletPower3_StartSprite   36
  BulletPower4_StartSprite   40 

  mapdata       44
  paths         44+mapdata
*/


void write32bit(int val,std::ofstream& file) {
  const unsigned char* data = (const unsigned char*)(&val);
  file.write(data,4);
}

main(int argc, char** argv) {
  if(argc!=2) {
    cerr << "levelGen <filename>\n";
    std::exit(-1);
  }

  std::vector<short > pathStartVec;

  int pathSize=0;
  while(KPaths[pathSize]!=EPathLineEnd) {
    // keep track of where the start points are
    if(KPaths[pathSize]==EPathLineStart) {
      pathStartVec.push_back(pathSize/4);
    }
    pathSize+=4;
  }
  pathSize+=4;
  pathSize*= sizeof(TInt16);


  int mapSize=0;
  while(Map[mapSize]!=EMapLineEndOfMap) {
    // change path field to to be offset into
    // path commands rather than n'th EPathLineStart
    if(Map[mapSize] & EMapLineObject &&
       Map[mapSize] & EMapLineObjectMovementPath) {
      Map[mapSize+5]=pathStartVec[Map[mapSize+5]];
    }
    mapSize+=8;
  }
  mapSize+=8;
  mapSize*= sizeof(TInt16);


  int mapDataOffset=60;
  int pathsOffset=mapDataOffset+mapSize;

  std::ofstream level(argv[1]);
  if(!level) {
    cerr << "Couldn't open " << argv[1] << "\n";
    std::exit(-1);
  }


  write32bit(mapDataOffset,level);       //0
  write32bit(pathsOffset,level);         //4
  write32bit(KShipSprite,level);         //8
  write32bit(KShipDeathStartSprite,level);  //12
  write32bit(KShipDeathEndSprite,level);    //16
  write32bit(KBadGuyDeathStartSprite,level);//20
  write32bit(KBadGuyDeathEndSprite,level);  //24
  write32bit(KBulletPower1_StartSprite,level); //28
  write32bit(KBulletPower2_StartSprite,level); //32
  write32bit(KBulletPower3_StartSprite,level); //36
  write32bit(KBulletPower4_StartSprite,level); //40
  write32bit(KShipStartPosX,level); //44
  write32bit(KShipStartPosY,level); //48
  write32bit(KShipStartHealth,level); //52
  write32bit(KShipPowerUps,level); //56

  level.write((const unsigned char *)Map,mapSize); //60
  level.write((const unsigned char *)KPaths,pathSize);
}


⌨️ 快捷键说明

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