Snake game.
static void gameTick(){
if (!Snake.moving) return;
const int headDir = Snake.headDir;
const int newHeadPos = Snake.headPos + s_direction[headDir];
if (Canvas.pData[newHeadPos] & s_wallFlag) {
PlaySound((const char*)SND_ALIAS_SYSTEMASTERISK, nullptr,
SND_ALIAS_ID | SND_ASYNC);
return mazeInit();
}
Canvas.pData[Snake.headPos] = setDirFlags(s_tailColor, headDir);
if (Snake.tailSize == 0) {
Snake.tailPos = Snake.headPos;
Snake.tailSize = 1;
} else if (Snake.tailSize >= Snake.maxTailSize) {
const unsigned oldTail = Canvas.pData[Snake.tailPos];
Canvas.pData[Snake.tailPos] = 0;
Snake.tailPos += getDirection(oldTail);
} else {
++Snake.tailSize;
}
if (Canvas.pData[newHeadPos] & s_fruitFlag) {
PlaySound((const char*)SND_ALIAS_SYSTEMEXCLAMATION, nullptr,
SND_ALIAS_ID | SND_ASYNC);
Snake.maxTailSize *= 2;
Snake.fast = Canvas.pData[newHeadPos] & s_boostFlag;
if (!--Snake.fruits) return ++Snake.level, mazeInit();
}
Snake.headPos = newHeadPos;
Canvas.pData[Snake.headPos] = setDirFlags(s_headColor, headDir);
}
https://godbolt.org/z/3xqaMEKGc