More on pointers in C. The use of typedef
This bit is slightly controversial. I find all the * makes it harder to read code so I use typedefs to hide them. Here’s an example from the game. Try replacing every pbte with byte * and see if reading it is harder for you.
typedef byte * pbyte;
// mask arrays
byte bulletmask[1][3][3];
byte plmask[24][64][64];
byte a1mask[24][280][280];
byte a2mask[24][140][140];
byte a3mask[24][70][70];
byte a4mask[24][35][35];
byte alienmask[64][64];
pbyte GetMask(int type, int rotation, int size) {
switch (type) {
case tAsteroid: // asteroid
{
switch (size)
{
case 280:
return (pbyte)&a1mask[rotation];
case 140:
return (pbyte)&a2mask[rotation];
case 70:
return (pbyte)&a3mask[rotation];
case 35:
return (pbyte)&a4mask[rotation];
}
};
case tBullet: // bullet
return (pbyte)&bulletmask;
case tPlayer: // player
return (pbyte)&plmask[rotation];
case tAlien:
return (pbyte)&alienmask;
}
return 0; // null - should never get here!
}
In my post about collision detection I mentioned getting mask bytes. This function GetMask returns a pointer to a byte (i.e. the first byte in a particular mask for a particular type of object (asteroid, bullet, player, alien) and for asteroids and the player a particular rotation. The many (pbyte) are needed because the arrays have different sizes. There are 24 player and asteroid masks.