CPU利用率が高いのは手抜きです。
実は迷路生成と、迷路表示だけが目的で
切った張ったしてでっち上げたもので、
悪影響しかないと思いますのでソースは勘弁してください。

一応肝の迷路生成と迷路表示だけは抜粋しておきます。
// マップを全部壁にして、穴掘り法で迷路を生成する。
// 周りには番兵として道がある。
void MazeSub(int x, int y){
if(Map[y][x] != MAP_ROAD){
return;
}
int r = rand() & 3; // 次の道の方向
int p = (rand() & 2) - 1; // 回転方向を適当に変えて遊ぶ(-1か1)
for(int i = 0;i < 4;i++){
int px = GetDirX(r);
int py = GetDirY(r);
if(Map[y + py * 2][x + px * 2] == MAP_WALL){
Map[y + py][x + px] = MAP_ROAD;
Map[y + py * 2][x + px * 2] = MAP_ROAD;
MazeSub(x + px * 2, y + py * 2);
}
r = (r + p) & 3; // 回す
}
}