首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Console 進階技巧 (四):字符版貪食蛇完整實現

     編輯:關於.NET

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

遊戲效果

貪食蛇畫面

核心 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);
    }
}

關鍵實現細節

  1. 雙緩衝思想:僅繪製變化點 (新頭、舊尾、食物),不重繪整個畫面,極致流暢。
  2. 方向防反轉:if (newDir != Opposite(dir)) dir = newDir; 防止 180 度轉向自殺。
  3. 邊界檢測:撞牆或撞自身觸發 GameOver()。
  4. 食物生成:隨機空白格子,避開蛇身。
  5. 分數顯示:固定位置 SetCursorPosition(0, 0) 更新分數字符。

完整專案資訊

  • 開發環境:Visual Studio 2008 SP1
  • 目標框架:.NET Framework 2.0
  • 編譯方式:下載源碼後自行編譯
  • 操作方式:方向鍵控制移動,任意鍵暫停/繼續

學習價值

  • 掌握 Console 遊戲開發核心模式:狀態機 + 事件輸入 + 部分重繪。
  • 理解座標系、緩衝區、同步機制在文字模式下的應用。
  • 為進階專案 (如文字版 Tetris、Roguelike) 奠定基礎。
  • 體會「沒有圖形庫也能寫遊戲」的程式設計樂趣。

源碼下載連結見文末。愚人節快樂,願代碼無 Bug,人生不掉坑!🐍

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved