綜合運用「七彩輸出」與「字符繪圖」技巧,打造經典 Console 版貪食蛇遊戲。展示 SetCursorPosition、ReadKey、CursorVisible、顏色控制等核心 API 的綜合應用。

| 功能 | API | 關鍵點 |
|---|---|---|
| 彩色輸出 | Console.BackgroundColor = ConsoleColor.Red; Console.Write(" "); Console.ResetColor(); | 用背景色填充方塊模擬像素 |
| 光標定位 | Console.SetCursorPosition(left, top) | 座標原點 (0,0) 在左上角 |
| 隱藏光標 | Console.CursorVisible = false; | 消除遊戲畫面閃爍 |
| 非阻塞按鍵 | Console.KeyAvailable + Console.ReadKey(true) | 不回顯字符,支援方向鍵 |
| 暫停/繼續 | 任意鍵切換 isPaused 旗標 | 簡單狀態機控制 |
class SnakeGame {
// 遊戲狀態
Queue<Point> snake = new Queue<Point>();
Point food;
Direction dir = Direction.Right;
bool isPaused = false;
int score = 0;
// 初始化
void Init() {
Console.Clear();
Console.CursorVisible = false;
DrawBorder();
SpawnFood();
snake.Enqueue(new Point(10, 10)); // 初始位置
}
// 主迴圈
void Run() {
while (true) {
if (Console.KeyAvailable) HandleInput(Console.ReadKey(true).Key);
if (!isPaused) {
MoveSnake();
CheckCollision();
Thread.Sleep(100); // 速度控制
}
}
}
// 移動邏輯 (頭部新增、尾部移除)
void MoveSnake() {
Point head = snake.Last();
Point newHead = head + dir.Offset();
snake.Enqueue(newHead);
if (newHead == food) { score++; SpawnFood(); }
else { Point tail = snake.Dequeue(); Erase(tail); }
Draw(newHead, ConsoleColor.Green);
}
}
if (newDir != Opposite(dir)) dir = newDir; 防止 180 度轉向自殺。GameOver()。SetCursorPosition(0, 0) 更新分數字符。源碼下載連結見文末。愚人節快樂,願代碼無 Bug,人生不掉坑!🐍