📄 bomberplayers.c
字号:
//Draw the players
void DrawPlayers ()
{
int f, sx, i, j, p;
int Order [5], Y [5];
//Sort back to front
for (i = 0; i < Players; i++) {
Order [i] = i;
Y [i] = PlayerY [i];
}
for (i = 0; i < Players; i++) {
for (j = i + 1; j < Players; j++) {
if (Y [j] < Y [i]) {
p = Y [i];
Y [i] = Y [j];
Y [j] = p;
p = Order [i];
Order [i] = Order [j];
Order [j] = p;
}
}
}
//Draw back to front
for (i = 0; i < Players; i++) {
p = Order [i];
if (PlayerDead [p]) {
if (PlayerFrame [p] < 8)
DrawTSprite (PlayerX [p] - 12,
PlayerY [p] - 16,
24 * PlayerFrame [p]++,
p * 48 + 24,
25, 25);
} else {
f = PlayerFrame [p];
if (f == 2) f = 0;
if (f == 3) f = 2;
sx = PlayerDir [p] * 72 + f * 24;
DrawTSprite (PlayerX [p] - 12,
PlayerY [p] - 16,
sx, p * 48, 24, 24);
}
}
}
//Move the players
void MovePlayers ()
{
int canMove, tryDir;
int p, px, py, ox, oy;
for (p = 0; p < Players; p++) if (!PlayerDead [p]) {
//Assume nothing
canMove = 0;
tryDir = -1;
px = PlayerX [p];
py = PlayerY [p];
//Try the direction
if (Down [p]) tryDir = 0;
if (Right [p]) tryDir = 1;
if (Left [p]) tryDir = 2;
if (Up [p]) tryDir = 3;
//Check the map
ox = oy = 0;
if (tryDir == 0) { oy = 8; }
if (tryDir == 1) { ox = 8; }
if (tryDir == 2) { ox = -12; }
if (tryDir == 3) { oy = -12; }
//If the grid is empty or the spot is the same, movement is possible
canMove = (Grid [(px + ox) >> 4][(py + oy) >> 4] == 0);
if (tryDir == 0 || tryDir == 3) canMove |= (((py + oy) >> 4) == (py >> 4));
if (tryDir == 1 || tryDir == 2) canMove |= (((px + ox) >> 4) == (px >> 4));
//Update player
if (tryDir >= 0) PlayerDir [p] = tryDir;
if (canMove && tryDir >= 0) {
if (tryDir == 0) { oy = 4; PlayerX [p] = (PlayerX [p] & 0xFF0) + 8; }
if (tryDir == 1) { ox = 4; PlayerY [p] = (PlayerY [p] & 0xFF0) + 8; }
if (tryDir == 2) { ox = -4; PlayerY [p] = (PlayerY [p] & 0xFF0) + 8; }
if (tryDir == 3) { oy = -4; PlayerX [p] = (PlayerX [p] & 0xFF0) + 8; }
PlayerX [p] += ox;
PlayerY [p] += oy;
PlayerFrame [p]++;
PlayerFrame [p] &= 3;
} else {
PlayerFrame [p] = 0;
}
}
}
//Kill a player at a specific location
void KillPlayer (int x, int y)
{
int p, tx, ty;
//Check all players
for (p = 0; p < Players; p++) {
//if they're not dead
if (!PlayerDead [p]) {
tx = PlayerX [p] >> 4;
ty = PlayerY [p] >> 4;
//They can be killed
if (tx == x && ty == y) {
PlayerDead [p] = -1;
PlayerFrame [p] = 0;
PlaySound ((LPCSTR)Lose, NULL, SND_ASYNC | SND_MEMORY);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -