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

📄 aliens.cpp

📁 打飞机的过关游戏(linux)
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			}

			if ((currentGame.area != 18) || (theEnemy->shield < 0))
				theEnemy->x += engine.ssx;

			theEnemy->y += engine.ssy;
		}

		*theEnemy++;
	}
}

void setAlienShapes()
{
	for (int i = 0 ; i < MAX_DEFALIENS ; i++)
	{
		if (graphics.shipShape[defEnemy[i].imageIndex[0]] != NULL)
		{
			defEnemy[i].image[0] = graphics.shipShape[defEnemy[i].imageIndex[0]];
			defEnemy[i].image[1] = graphics.shipShape[defEnemy[i].imageIndex[1]];
			defEnemy[i].engineX = defEnemy[i].image[0]->w;
			defEnemy[i].engineY = (defEnemy[i].image[0]->h / 2);
		}
	}
}

#if USEPACK

void loadAliens()
{
	int dataLocation = locateDataInPak("data/aliens.dat", 1);
	int def, ai, speed, shield, max, image1, image2, weapon1, weapon2, chance1, chance2, score;
	int collectChance, collectType, collectVal, flags;

	FILE *fp;

	fp = fopen(PACKLOCATION, "rb");
	fseek(fp, dataLocation, SEEK_SET);

	for (int i = 0 ; i < MAX_DEFALIENS ; i++)
	{
		fscanf(fp, "%d", &def);
		fscanf(fp, "%d", &ai);
		fscanf(fp, "%d", &speed);
		fscanf(fp, "%d", &shield);
		fscanf(fp, "%d", &max);
		fscanf(fp, "%d", &image1);
		fscanf(fp, "%d", &image2);
		fscanf(fp, "%d", &weapon1);
		fscanf(fp, "%d", &weapon2);
		fscanf(fp, "%d", &chance1);
		fscanf(fp, "%d", &chance2);
		fscanf(fp, "%d", &score);
		fscanf(fp, "%d", &collectChance);
		fscanf(fp, "%d", &collectType);
		fscanf(fp, "%d", &collectVal);
		fscanf(fp, "%d", &flags);

		defEnemy[i].classDef = def;
		defEnemy[i].AIType = ai;
		defEnemy[i].speed = speed;
		defEnemy[i].shield = shield;
		defEnemy[i].maxShield = max;
		defEnemy[i].imageIndex[0] = image1;
		defEnemy[i].imageIndex[1] = image2;
		defEnemy[i].weaponType[0] = weapon1;
		defEnemy[i].weaponType[1] = weapon2;
		defEnemy[i].chance[0] = chance1;
		defEnemy[i].chance[1] = chance2;
		defEnemy[i].score = score;
		defEnemy[i].collectChance = collectChance;
		defEnemy[i].collectType = collectType;
		defEnemy[i].collectValue = collectVal;
		defEnemy[i].flags = flags;
	}

	fclose(fp);
}

void defineAliens(){loadAliens();}

#else

void saveAliens()
{
	FILE *fp;

	fp = fopen("data/aliens.dat", "wb");
	if (fp == NULL)
	{
		printf("Unable to write Alien Data File\n");
		exit(1);
	}

	for (int i = 0 ; i < MAX_DEFALIENS ; i++)
	{
		fprintf(fp, "%d ", defEnemy[i].classDef);
		fprintf(fp, "%d ", defEnemy[i].AIType);
		fprintf(fp, "%d ", defEnemy[i].speed);
		fprintf(fp, "%d ", defEnemy[i].shield);
		fprintf(fp, "%d ", defEnemy[i].maxShield);
		fprintf(fp, "%d ", defEnemy[i].imageIndex[0]);
		fprintf(fp, "%d ", defEnemy[i].imageIndex[1]);
		fprintf(fp, "%d ", defEnemy[i].weaponType[0]);
		fprintf(fp, "%d ", defEnemy[i].weaponType[1]);
		fprintf(fp, "%d ", defEnemy[i].chance[0]);
		fprintf(fp, "%d ", defEnemy[i].chance[1]);
		fprintf(fp, "%d ", defEnemy[i].score);
		fprintf(fp, "%d ", defEnemy[i].collectChance);
		fprintf(fp, "%d ", defEnemy[i].collectType);
		fprintf(fp, "%d ", defEnemy[i].collectValue);
		fprintf(fp, "%d\n", defEnemy[i].flags);
	}

	// Put an extra line for the PAK file "just in case"
	fprintf(fp, "\n");

	fclose(fp);
}

/*
Will be dumped into a data file at the end of the project
*/
void defineAliens()
{
	// Dual Plasma Fighter.
	defEnemy[CD_DUALFIGHTER].classDef = CD_DUALFIGHTER;
	defEnemy[CD_DUALFIGHTER].AIType = AI_NORMAL;
	defEnemy[CD_DUALFIGHTER].speed = 4;
	defEnemy[CD_DUALFIGHTER].maxShield = 5;
	defEnemy[CD_DUALFIGHTER].shield = 5;
	defEnemy[CD_DUALFIGHTER].imageIndex[0] = 2;
	defEnemy[CD_DUALFIGHTER].imageIndex[1] = 3;
	defEnemy[CD_DUALFIGHTER].weaponType[0] = W_DOUBLE_SHOT;
	defEnemy[CD_DUALFIGHTER].weaponType[1] = W_ROCKETS;
	defEnemy[CD_DUALFIGHTER].chance[0] = 100;
	defEnemy[CD_DUALFIGHTER].chance[1] = 1;
	defEnemy[CD_DUALFIGHTER].score = 25;
	defEnemy[CD_DUALFIGHTER].collectChance = 50;
	defEnemy[CD_DUALFIGHTER].collectType = P_ANYTHING;
	defEnemy[CD_DUALFIGHTER].collectValue = 50;
	defEnemy[CD_DUALFIGHTER].flags = FL_WEAPCO;

	// Missile Boat
	defEnemy[CD_MISSILEBOAT].classDef = CD_MISSILEBOAT;
	defEnemy[CD_MISSILEBOAT].AIType = AI_DEFENSIVE;
	defEnemy[CD_MISSILEBOAT].speed = 2;
	defEnemy[CD_MISSILEBOAT].maxShield = 50;
	defEnemy[CD_MISSILEBOAT].shield = 50;
	defEnemy[CD_MISSILEBOAT].imageIndex[0] = 4;
	defEnemy[CD_MISSILEBOAT].imageIndex[1] = 5;
	defEnemy[CD_MISSILEBOAT].weaponType[0] = W_ROCKETS;
	defEnemy[CD_MISSILEBOAT].weaponType[1] = W_DOUBLE_ROCKETS;
	defEnemy[CD_MISSILEBOAT].chance[0] = 25;
	defEnemy[CD_MISSILEBOAT].chance[1] = 4;
	defEnemy[CD_MISSILEBOAT].score = 250;
	defEnemy[CD_MISSILEBOAT].collectChance = 25;
	defEnemy[CD_MISSILEBOAT].collectType = P_ANYTHING;
	defEnemy[CD_MISSILEBOAT].collectValue = 75;
	defEnemy[CD_MISSILEBOAT].flags = FL_WEAPCO;

	//Prototype fighter
	defEnemy[CD_PROTOFIGHTER].classDef = CD_PROTOFIGHTER;
	defEnemy[CD_PROTOFIGHTER].AIType = AI_DEFENSIVE;
	defEnemy[CD_PROTOFIGHTER].speed = 5;
	defEnemy[CD_PROTOFIGHTER].maxShield = 15;
	defEnemy[CD_PROTOFIGHTER].shield = 15;
	defEnemy[CD_PROTOFIGHTER].imageIndex[0] = 6;
	defEnemy[CD_PROTOFIGHTER].imageIndex[1] = 7;
	defEnemy[CD_PROTOFIGHTER].weaponType[0] = W_TRIPLE_SHOT;
	defEnemy[CD_PROTOFIGHTER].weaponType[1] = P_ANYTHING;
	defEnemy[CD_PROTOFIGHTER].chance[0] = 100;
	defEnemy[CD_PROTOFIGHTER].chance[1] = 1;
	defEnemy[CD_PROTOFIGHTER].score = 50;
	defEnemy[CD_PROTOFIGHTER].collectChance = 50;
	defEnemy[CD_PROTOFIGHTER].collectType = P_ANYTHING;
	defEnemy[CD_PROTOFIGHTER].collectValue = 50;
	defEnemy[CD_PROTOFIGHTER].flags = FL_WEAPCO;

	// Phoebe and Ursula
	defEnemy[CD_FRIEND].classDef = CD_FRIEND;
	defEnemy[CD_FRIEND].AIType = AI_OFFENSIVE;
	defEnemy[CD_FRIEND].speed = 3;
	defEnemy[CD_FRIEND].maxShield = 50;
	defEnemy[CD_FRIEND].shield = 50;
	defEnemy[CD_FRIEND].imageIndex[0] = 20;
	defEnemy[CD_FRIEND].imageIndex[1] = 21;
	defEnemy[CD_FRIEND].weaponType[0] = W_DOUBLE_SHOT;
	defEnemy[CD_FRIEND].weaponType[1] = W_HOMING_MISSILE;
	defEnemy[CD_FRIEND].chance[0] = 100;
	defEnemy[CD_FRIEND].chance[1] = 5;
	defEnemy[CD_FRIEND].score = 0;
	defEnemy[CD_FRIEND].collectChance = 0;
	defEnemy[CD_FRIEND].collectType = P_CASH;
	defEnemy[CD_FRIEND].collectValue = 0;
	defEnemy[CD_FRIEND].flags = FL_FRIEND;

	// Boss 1
	defEnemy[CD_FRIGATE].classDef = CD_BOSS;
	defEnemy[CD_FRIGATE].AIType = AI_NORMAL;
	defEnemy[CD_FRIGATE].speed = 2;
	defEnemy[CD_FRIGATE].maxShield = 550;
	defEnemy[CD_FRIGATE].shield = 550;
	defEnemy[CD_FRIGATE].imageIndex[0] = 8;
	defEnemy[CD_FRIGATE].imageIndex[1] = 9;
	defEnemy[CD_FRIGATE].weaponType[0] = W_MICRO_ROCKETS;
	defEnemy[CD_FRIGATE].weaponType[1] = W_ENERGYRAY;
	defEnemy[CD_FRIGATE].chance[0] = 100;
	defEnemy[CD_FRIGATE].chance[1] = 85;
	defEnemy[CD_FRIGATE].score = 500;
	defEnemy[CD_FRIGATE].collectChance = 100;
	defEnemy[CD_FRIGATE].collectType = P_CASH;
	defEnemy[CD_FRIGATE].collectValue = 250;
	defEnemy[CD_FRIGATE].flags = FL_WEAPCO;

	defEnemy[CD_FRIGATE_WING1].classDef = CD_FRIGATE_WING1;
	defEnemy[CD_FRIGATE_WING1].AIType = AI_NORMAL;
	defEnemy[CD_FRIGATE_WING1].speed = 2;
	defEnemy[CD_FRIGATE_WING1].maxShield = 100;
	defEnemy[CD_FRIGATE_WING1].shield = 100;
	defEnemy[CD_FRIGATE_WING1].imageIndex[0] = 10;
	defEnemy[CD_FRIGATE_WING1].imageIndex[1] = 11;
	defEnemy[CD_FRIGATE_WING1].weaponType[0] = W_TRIPLE_SHOT;
	defEnemy[CD_FRIGATE_WING1].weaponType[1] = W_ROCKETS;
	defEnemy[CD_FRIGATE_WING1].chance[0] = 100;
	defEnemy[CD_FRIGATE_WING1].chance[1] = 10;
	defEnemy[CD_FRIGATE_WING1].score = 500;
	defEnemy[CD_FRIGATE_WING1].collectChance = 100;
	defEnemy[CD_FRIGATE_WING1].collectType = P_ANYTHING;
	defEnemy[CD_FRIGATE_WING1].collectValue = 250;
	defEnemy[CD_FRIGATE_WING1].flags = FL_WEAPCO + FL_DAMAGEOWNER;

	defEnemy[CD_FRIGATE_WING2].classDef = CD_FRIGATE_WING2;
	defEnemy[CD_FRIGATE_WING2].AIType = AI_NORMAL;
	defEnemy[CD_FRIGATE_WING2].speed = 2;
	defEnemy[CD_FRIGATE_WING2].maxShield = 100;
	defEnemy[CD_FRIGATE_WING2].shield = 100;
	defEnemy[CD_FRIGATE_WING2].imageIndex[0] = 12;
	defEnemy[CD_FRIGATE_WING2].imageIndex[1] = 13;
	defEnemy[CD_FRIGATE_WING2].weaponType[0] = W_TRIPLE_SHOT;
	defEnemy[CD_FRIGATE_WING2].weaponType[1] = W_ROCKETS;
	defEnemy[CD_FRIGATE_WING2].chance[0] = 100;
	defEnemy[CD_FRIGATE_WING2].chance[1] = 10;
	defEnemy[CD_FRIGATE_WING2].score = 500;
	defEnemy[CD_FRIGATE_WING2].collectChance = 100;
	defEnemy[CD_FRIGATE_WING2].collectType = P_ANYTHING;
	defEnemy[CD_FRIGATE_WING2].collectValue = 250;
	defEnemy[CD_FRIGATE_WING2].flags = FL_WEAPCO + FL_DAMAGEOWNER;

	// Transport ship
	defEnemy[CD_TRANSPORTSHIP].classDef = CD_TRANSPORTSHIP;
	defEnemy[CD_TRANSPORTSHIP].AIType = AI_EVASIVE;
	defEnemy[CD_TRANSPORTSHIP].speed = 4;
	defEnemy[CD_TRANSPORTSHIP].maxShield = 10;
	defEnemy[CD_TRANSPORTSHIP].shield = 10;
	defEnemy[CD_TRANSPORTSHIP].imageIndex[0] = 14;
	defEnemy[CD_TRANSPORTSHIP].imageIndex[1] = 15;
	defEnemy[CD_TRANSPORTSHIP].weaponType[0] = W_DOUBLE_SHOT;
	defEnemy[CD_TRANSPORTSHIP].weaponType[1] = W_DOUBLE_SHOT;
	defEnemy[CD_TRANSPORTSHIP].chance[0] = 0;
	defEnemy[CD_TRANSPORTSHIP].chance[1] = 0;
	defEnemy[CD_TRANSPORTSHIP].score = 25;
	defEnemy[CD_TRANSPORTSHIP].collectChance = 100;
	defEnemy[CD_TRANSPORTSHIP].collectType = P_WEAPONS;
	defEnemy[CD_TRANSPORTSHIP].collectValue = 30;
	defEnemy[CD_TRANSPORTSHIP].flags = FL_WEAPCO + FL_NOFIRE;

	// Cargo ship
	defEnemy[CD_CARGOSHIP].classDef = CD_CARGOSHIP;
	defEnemy[CD_CARGOSHIP].AIType = AI_EVASIVE;
	defEnemy[CD_CARGOSHIP].speed = 4;
	defEnemy[CD_CARGOSHIP].maxShield = 10;
	defEnemy[CD_CARGOSHIP].shield = 10;
	defEnemy[CD_CARGOSHIP].imageIndex[0] = 22;
	defEnemy[CD_CARGOSHIP].imageIndex[1] = 23;
	defEnemy[CD_CARGOSHIP].weaponType[0] = W_DOUBLE_SHOT;
	defEnemy[CD_CARGOSHIP].weaponType[1] = W_DOUBLE_SHOT;
	defEnemy[CD_CARGOSHIP].chance[0] = 0;
	defEnemy[CD_CARGOSHIP].chance[1] = 0;
	defEnemy[CD_CARGOSHIP].score = 25;
	defEnemy[CD_CARGOSHIP].collectChance = 50;
	defEnemy[CD_CARGOSHIP].collectType = P_ANYTHING;
	defEnemy[CD_CARGOSHIP].collectValue = 100;
	defEnemy[CD_CARGOSHIP].flags = FL_WEAPCO + FL_NOFIRE;

	// Weapco Miner
	defEnemy[CD_MINER].classDef = CD_MINER;
	defEnemy[CD_MINER].AIType = AI_EVASIVE;
	defEnemy[CD_MINER].speed = 4;
	defEnemy[CD_MINER].maxShield = 25;
	defEnemy[CD_MINER].shield = 25;
	defEnemy[CD_MINER].imageIndex[0] = 16;
	defEnemy[CD_MINER].imageIndex[1] = 17;
	defEnemy[CD_MINER].weaponType[0] = W_DOUBLE_SHOT;
	defEnemy[CD_MINER].weaponType[1] = W_DOUBLE_SHOT;
	defEnemy[CD_MINER].chance[0] = 0;
	defEnemy[CD_MINER].chance[1] = 0;
	defEnemy[CD_MINER].score = 100;
	defEnemy[CD_MINER].collectChance = 100;
	defEnemy[CD_MINER].collectType = P_ANYTHING;
	defEnemy[CD_MINER].collectValue = 30;
	defEnemy[CD_MINER].flags = FL_WEAPCO + FL_NOFIRE + FL_DROPMINES;

	// Kline
	defEnemy[CD_KLINE].classDef = CD_KLINE;
	defEnemy[CD_KLINE].AIType = AI_OFFENSIVE;
	defEnemy[CD_KLINE].speed = 5;
	defEnemy[CD_KLINE].maxShield = 750;
	defEnemy[CD_KLINE].shield = 750;
	defEnemy[CD_KLINE].imageIndex[0] = 18;
	defEnemy[CD_KLINE].imageIndex[1] = 19;
	defEnemy[CD_KLINE].weaponType[0] = W_TRIPLE_SHOT;
	defEnemy[CD_KLINE].weaponType[1] = W_MICRO_ROCKETS;
	defEnemy[CD_KLINE].chance[0] = 100;
	defEnemy[CD_KLINE].chance[1] = 2;
	defEnemy[CD_KLINE].score = 0;
	defEnemy[CD_KLINE].collectChance = 0;
	defEnemy[CD_KLINE].collectType = P_ANYTHING;
	defEnemy[CD_KLINE].collectValue = 0;
	defEnemy[CD_KLINE].flags = FL_WEAPCO + FL_CANNOTDIE + FL_ALWAYSFACE + FL_CIRCLES;

	// Aim Fighter
	defEnemy[CD_AIMFIGHTER].classDef = CD_AIMFIGHTER;
	defEnemy[CD_AIMFIGHTER].AIType = AI_NORMAL;
	defEnemy[CD_AIMFIGHTER].speed = 3;
	defEnemy[CD_AIMFIGHTER].maxShield = 15;
	defEnemy[CD_AIMFIGHTER].shield = 15;
	defEnemy[CD_AIMFIGHTER].imageIndex[0] = 8;
	defEnemy[CD_AIMFIGHTER].imageIndex[1] = 9;
	defEnemy[CD_AIMFIGHTER].weaponType[0] = W_AIMED_SHOT;
	defEnemy[CD_AIMFIGHTER].weaponType[1] = W_AIMED_SHOT;
	defEnemy[CD_AIMFIGHTER].chance[0] = 7;
	defEnemy[CD_AIMFIGHTER].chance[1] = 1;
	defEnemy[CD_AIMFIGHTER].score = 50;
	defEnemy[CD_AIMFIGHTER].collectChance = 75;
	defEnemy[CD_AIMFIGHTER].collectType = P_ANYTHING;
	defEnemy[CD_AIMFIGHTER].collectValue = 100;
	defEnemy[CD_AIMFIGHTER].flags = FL_WEAPCO + FL_AIMS;

	// Slave ship
	defEnemy[CD_SLAVETRANSPORT].classDef = CD_SLAVETRANSPORT;
	defEnemy[CD_SLAVETRANSPORT].AIType = AI_EVASIVE;
	defEnemy[CD_SLAVETRANSPORT].speed = 2;
	defEnemy[CD_SLAVETRANSPORT].maxShield = 10;
	defEnemy[CD_SLAVETRANSPORT].shield = 20;
	defEnemy[CD_SLAVETRANSPORT].imageIndex[0] = 10;
	defEnemy[CD_SLAVETRANSPORT].imageIndex[1] = 11;
	defEnemy[CD_SLAVETRANSPORT].weaponType[0] = W_DOUBLE_SHOT;
	defEnemy[CD_SLAVETRANSPORT].weaponType[1] = W_DOUBLE_SHOT;
	defEnemy[CD_SLAVETRANSPORT].chance[0] = 0;
	defEnemy[CD_SLAVETRANSPORT].chance[1] = 0;
	defEnemy[CD_SLAVETRANSPORT].score = 25;
	defEnemy[CD_SLAVETRANSPORT].collectChance = 100;
	defEnemy[CD_SLAVETRANSPORT].collectType = P_SLAVES;
	defEnemy[CD_SLAVETRANSPORT].collectValue = 25;
	defEnemy[CD_SLAVETRANSPORT].flags = FL_WEAPCO + FL_NOFIRE;

	// Good Transport
	defEnemy[CD_GOODTRANSPORT].classDef = CD_GOODTRANSPORT;
	defEnemy[CD_GOODTRANSPORT].AIType = AI_EVASIVE;
	defEnemy[CD_GOODTRANSPORT].speed = 3;
	defEnemy[CD_GOODTRANSPORT].maxShield = 75;
	defEnemy[CD_GOODTRANSPORT].shield = 75;
	defEnemy[CD_GOODTRANSPORT].imageIndex[0] = 12;
	defEnemy[CD_GOODTRANSPORT].imageIndex[1] = 13;
	defEnemy[CD_GOODTRANSPORT].weaponType[0] = W_AIMED_SHOT;
	defEnemy[CD_GOODTRANSPORT].weaponType[1] = W_AIMED_SHOT;
	defEnemy[CD_GOODTRANSPORT].chance[0] = 100;
	defEnemy[CD_GOODTRANSPORT].chance[1] = 100;
	defEnemy[CD_GOODTRANSPORT].score = 0;
	defEnemy[CD_GOODTRANSPORT].collectChance = 0;
	defEnemy[CD_GOODTRANSPORT].collectType = P_ANYTHING;
	defEnemy[CD_GOODTRANSPORT].collectValue = 0;
	defEnemy[CD_GOODTRANSPORT].flags = FL_FRIEND + FL_NOFIRE + FL_AIMS;

	// Sid Wilson
	defEnemy[CD_SID].classDef = CD_SID;
	defEnemy[CD_SID].AIType = AI_NORMAL;
	defEnemy[CD_SID].speed = 3;
	defEnemy[CD_SID].maxShield = 50;
	defEnemy[CD_SID].shield = 50;
	defEnemy[CD_SID].imageIndex[0] = 24;
	defEnemy[CD_SID].imageIndex[1] = 25;
	defEnemy[CD_SID].weaponType[0] = W_IONCANNON;
	defEnemy[CD_SID].weaponType[1] = W_IONCANNON;
	defEnemy[CD_SID].chance[0] = 100;
	defEnemy[CD_SID].chance[1] = 0;
	defEnemy[CD_SID].score = 0;
	defEnemy[CD_SID].collectChance = 0;
	defEnemy[CD_SID].collectType = P_ANYTHING;
	defEnemy[CD_SID].collectValue = 0;
	defEnemy[CD_SID].flags = FL_FRIEND + FL_AIMS;

	// Mining Vessel Boss
	defEnemy[CD_MINEBOSS].classDef = CD_BOSS;
	defEnemy[CD_MINEBOSS].AIType = AI_NORMAL;
	defEnemy[CD_MINEBOSS].speed = 3;
	defEnemy[CD_MINEBOSS].maxShield = 1000;
	defEnemy[CD_MINEBOSS].shield = 1000;
	defEnemy[CD_MINEBOSS].imageIndex[0] = 26;
	defEnemy[CD_MINEBOSS].imageIndex[1] = 27;
	defEnemy[CD_MINEBOSS].weaponType[0] = W_TRIPLE_SHOT;
	defEnemy[CD_MINEBOSS].weaponType[1] = W_SPREADSHOT;
	defEnemy[CD_MINEBOSS].chance[0] = 0;

⌨️ 快捷键说明

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