当前位置:网站首页>The latest tank battle 2022 - Notes on the whole development -2

The latest tank battle 2022 - Notes on the whole development -2

2022-07-06 13:27:00 Programmer rock

6、 ... and 、 Create tanks

6.1 Define tank data types

typedef enum Direction {
	DIRRECT_START, 
	DIRECT_UP = DIRRECT_START, 
	DIRECT_RIGHT, 
	DIRECT_DOWN, 
	DIRECT_LEFT, 
	DIRECT_COUNT
} direct_t;

typedef struct tank {
	bool heroFlag; // true: own   false:  The enemy 
	IMAGE* imgBody;
	IMAGE* imgSafe;
	int x, y;  //  Column and row numbers in the map 
	int sn;    //  Number 
	bool used; //  Whether to use 
    direct_t diret; // Direction 
} tank_t;

6.2 Define tank texture

enum {
	TANK_MINE,
	TANK_ENEMY_1,
	TANK_TYPE_COUNT
};

IMAGE imgUnits[UNIT_COUNT];
IMAGE imgTanks[TANK_TYPE_COUNT][DIRECT_COUNT];

6.3  Define tank variables
 

#define ENEMY_TANK_MAX  10
#define	MY_TANK_MAX  3

tank_t myTank;
tank_t enemyTanks[ENEMY_TANK_MAX];

int myTankCount;	// The number of our tanks 

6.3 Load the texture of the tank

Define the image texture array of the tank .

enum {
	TANK_MINE,
	TANK_ENEMY_1,
	TANK_TYPE_COUNT
};

IMAGE imgTanks[TANK_TYPE_COUNT][DIRECT_COUNT];

stay init In the initialization function , Load the image texture of the enemy and our tanks in all directions .

loadimage(&imgTanks[TANK_MINE][DIRECT_UP], "res/tankUp.png");
loadimage(&imgTanks[TANK_MINE][DIRECT_RIGHT], "res/tankRight.png");
loadimage(&imgTanks[TANK_MINE][DIRECT_DOWN], "res/tankDown.png");
loadimage(&imgTanks[TANK_MINE][DIRECT_LEFT], "res/tankLeft.png");
loadimage(&imgTanks[TANK_ENEMY_1][DIRECT_UP], "res/tankEnemyUp.png");
loadimage(&imgTanks[TANK_ENEMY_1][DIRECT_RIGHT], "res/tankEnemyRight.png");
loadimage(&imgTanks[TANK_ENEMY_1][DIRECT_DOWN], "res/tankEnemyDown.png");
loadimage(&imgTanks[TANK_ENEMY_1][DIRECT_LEFT], "res/tankEnemyLeft.png");

6.4  Create our tanks

void createMyTank() {
	if (myTank.used) return;

	if (myTankCount > 0) {
		myTankCount--;
		myTank.used = true;
		myTank.heroFlag = true;
		myTank.diret = DIRECT_UP;
		myTank.x = 9;
		myTank.y = 16;
		myTank.imgBody = imgTanks[TANK_MINE];
	}
}

stay main Call in function  createMyTank().

6.5 Create enemy tanks

int enemyCurCount;         // The number of enemy tanks currently fighting 
int enemyTankCountCanUsed; // Total number of enemy tanks available ( What has appeared and what is ready to appear later )

void createEnemyTank() {
	if (enemyCurCount < 4 && enemyTankCountCanUsed > 0) {
		int index;
		for (index = 0; index < ENEMY_TANK_MAX && enemyTanks[index].used; index++);
		if (index >= ENEMY_TANK_MAX) return;

		enemyCurCount++;
		enemyTanks[index].heroFlag = false;
		enemyTanks[index].used = true;
		enemyTanks[index].direct = DIRECT_DOWN;
		enemyTanks[index].x = rand() % 2 ? 9 : 15; // stay init Function to add srand Configure random seeds 
		enemyTanks[index].y = 0;
		enemyTanks[index].imgBody = imgTanks[TANK_ENEMY_1];
	}
}

stay main Call in function  createEnemyTank().

6.6 Initialize the number of tanks

stay init Function to initialize the number of tanks .

myTankCount = MY_TANK_MAX;
enemyTankCountCanUsed = ENEMY_TANK_MAX;
enemyCurCount = 0;

7. Render all tanks

  Definition updateAllTanks()

void updateTank(tank_t* tank) {
	if (!tank->used) return;
	putimagePNG(tank->x * 50 + 5, tank->y * 50 + 5, &tank->imgBody[tank->direct]);
}

void updateAllTanks() {
	updateTank(&myTank);

	for (int i = 0; i < ENEMY_TANK_MAX; i++) {
		if (enemyTanks[i].used) {
			updateTank(&enemyTanks[i]);
		}
	}
}

stay main Call in function updateAllTanks()

int main(void) {
	init();

	createMyTank();
	createEnemyTank();


	updataMap();
	updateAllTanks();

	system("pause");
	return 0;
}

Perform project , Check the running effect of the game :

 

  Next section , We optimize the code , Design the main frame of the game .

原网站

版权声明
本文为[Programmer rock]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060916110022.html