#55647: th tdruyr ejsru


yp11550450@yphs.tp.edu.tw (701-44蕭書峻)


for (const auto& e : enemies) {
if ((y == e.y || y == e.y + 1) && (x == e.x || x == e.x + 1)) {
canvas += RED + (x == e.x ? "[" : "]") + RESET;
drawn = true;
break;
}
}
}
// D. 繪製橫向子彈
if (!drawn) {
for (const auto& b : bullets) {
if (b.x == x && b.y == y) {
canvas += (b.symbol == '>') ? RED + ">" + RESET : YELLOW + std::string(1, b.symbol) + RESET;
drawn = true;
break;
}
}
}
if (!drawn) canvas += " ";
}
canvas += BLUE + "|\n" + RESET;
}
// 底邊界
for (int i = 0; i < WIDTH + 2; ++i) canvas += "-";
canvas += "\n";
std::cout << canvas << std::flush;
frame++;
std::this_thread::sleep_for(std::chrono::milliseconds(33));
}
if (!running) break;
// ---- 步驟 G:無限停留的結算畫面 (不關閉遊戲,按 R 重來) ----
std::cout << "\033[2J" << TOP_LEFT;
while (true) {
std::string endScreen = TOP_LEFT;
if (stateWon) {
endScreen += GREEN + "===============================================\n" + RESET;
endScreen += GREEN + " VICTORY! 您成功守護了右側防線! \n" + RESET;
endScreen += GREEN + "===============================================\n\n" + RESET;
} else {
endScreen += RED + "===============================================\n" + RESET;
endScreen += RED + " GAME OVER \n" + RESET;
endScreen += RED + "===============================================\n\n" + RESET;
}
endScreen += WHITE + " 最終戰役得分: " + std::to_string(score) + " 分\n" + RESET;
endScreen += CYAN + " ➔ 按 [R] 鍵重新滿血開戰 \n" + RESET;
endScreen += RED + " ➔ 按 [Q] 鍵徹底退出遊戲 \n" + RESET;
std::cout << endScreen << std::flush;
int endKey = checkKeyPress();
if (endKey == 'r' || endKey == 'R') {
std::cout << "\033[2J" << std::flush;
break; // 跳出結算迴圈,回到外層大迴圈重新初始化
} else if (endKey == 'q' || endKey == 'Q') {
running = false; // 終止大迴圈,正式離開
break;
}
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
// 徹底退出清屏
std::cout << "\033[2J" << TOP_LEFT << "遊戲已安全關閉。感謝遊玩!\n";
return 0;
}