<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Go語言實現1024終端游戲-不到400行代碼

      先放源碼地址,喜歡看源碼翻源碼,喜歡看文章的繼續看文章

      https://github.com/taadis/go1024 - go1024

      使用 go 語言實現的 1024 終端游戲,不到400行代碼,代碼簡潔,以便理解和學習和掌握 go 語言開發.

      安裝和運行

      要運行這個程序,你需要先安裝依賴:

      go mod tidy
      

      然后運行程序即可:

      go run main.go
      

      游戲運行如下:

      
           2     0     0     0
      
           4     2     0     0
      
           8    32     4     2
      
          32    16     8    16
      
      Score: 380
      請使用方向鍵操作,按快捷鍵 Ctrl+C 可退出游戲.
      
      

      游戲實現

      當前游戲實現了以下內容:

      1. 基于 go 語言的跨平臺、可移植的終端游戲、包管理
      2. 1024游戲的核心邏輯
      3. 基于 ANSI 的終端顏色顯示
      4. 鍵盤控制
      5. 得分計算
      6. 游戲結束檢測
      7. 跨平臺兼容性
      8. 基本的錯誤處理

      隨機數生成

      我們使用 rand 來生成隨機數。在本游戲中隨機數主要有兩個作用:

      1. 隨機生成新數字的位置:
      slot := emptySlots[rand.Intn(len(emptySlots))]
      
      1. 隨機決定生成2還是4:
      if rand.Float64() > 0.95 {
          value = 4  // 5%的概率生成4
      } else {
          value = 2  // 95%的概率生成2
      }
      

      如果不設置隨機數種子,每次運行游戲時隨機數生成器都會使用相同的默認種子,這樣:

      1. 每次游戲開始時數字出現的位置都會相同
      2. 新數字的值(2或4)的出現順序也會相同
      3. 游戲失去了隨機性,變得可預測

      使用當前時間的納秒數作為種子,可以確保每次運行游戲時都會得到不同的隨機序列,使游戲更有趣和不可預測性。

      顏色表示

      根據數字的大小返回不同的顏色代碼.

      我們使用的數字是 ANSI 轉義序列中的顏色代碼。在終端中,我們使用 \033[ 開頭的轉義序列來控制文本的顯示效果。

      ANSI 轉義序列的顏色代碼是有限的,主要分為這幾組:

      1. 基本前景色:30-37
      2. 基本背景色:40-47
      3. 高亮前景色:90-97
      4. 高亮背景色:100-107

      98、99 和 108 以后的數字并不是標準的 ANSI 顏色代碼,不會產生顏色效果。

      具體解釋:

      1. \033[ 是轉義序列的開始標記(ESC 字符)
      2. 后面的數字是顏色代碼:
        • 30-37:基本前景色(文字顏色)
          • 31: 紅色
          • 32: 綠色
          • 33: 黃色
          • 34: 藍色
          • 35: 紫色
          • 36: 青色
          • 37: 白色
        • 90-97:高亮前景色
          • 90: 亮灰色
          • 91: 亮紅色
          • 92: 亮綠色
            等等...

      在代碼中:

      fmt.Printf("\033[%dm%6d\033[0m", color, g.Board[i][j])
      
      • \033[%dm 設置顏色
      • %6d 顯示數字(6位寬度)
      • \033[0m 重置所有屬性

      所以當我們使用 color = 90 時,就會顯示亮灰色文字,這在游戲中用來表示空位(值為0的格子)。

      如果需要更豐富的顏色,可以使用:

      1. 24位真彩色:\033[38;2;R;G;Bm
      2. 256色:\033[38;5;Nm(N是0-255之間的數字)

      例如:

      // 24位真彩色(紅色)
      fmt.Printf("\033[38;2;255;0;0m文本\033[0m")
      
      // 256色(第100號顏色)
      fmt.Printf("\033[38;5;100m文本\033[0m")
      

      但這些高級顏色特性可能不是所有終端都支持,所以在通用程序中一般還是使用基本的 ANSI 顏色代碼(30-37, 90-97)。

      退出游戲

      退出游戲主要通過監聽取消信息來實現

      1. 添加了 os/signalsyscall
      2. 使用 signal.Notify 來捕獲 SIGINT (Ctrl+C) 和 SIGTERM 信號
      3. 啟動一個 goroutine 來處理信號,收到信號時:
        • 關閉鍵盤監聽
        • 退出程序
      4. 移除了原有的 Ctrl+C 檢查代碼

      這樣修改后,無論在程序的任何時刻按下 Ctrl+C,都能正確退出程序。同時也會確保鍵盤資源被正確釋放。

      后面改為使用 github.com/eiannone/keyboard 包了,簡化邏輯處理.

      posted @ 2025-03-30 22:34  taadis  閱讀(422)  評論(0)    收藏  舉報
      掃碼關注

      掃碼關注我

      主站蜘蛛池模板: 日本亚洲色大成网站www久久| 熟女一区| 国产日韩久久免费影院| 亚洲av不卡电影在线网址最新| 久久五月丁香激情综合| 人妻系列中文字幕精品| 电影在线观看+伦理片| 69精品丰满人妻无码视频a片| 欧美乱人伦人妻中文字幕| 久久精品色一情一乱一伦| 日夜啪啪一区二区三区| 4399理论片午午伦夜理片| 久青草国产在视频在线观看| 久久精品人妻无码专区| 成人亚洲精品一区二区三区| 久久青青草原精品国产app| 亚洲综合一区二区三区| 成人天堂资源www在线| 十八禁国产精品一区二区| 小嫩批日出水无码视频免费| 青青草原国产AV福利网站| 欧美日韩精品一区二区在线观看| 日韩人妻少妇一区二区三区| 国产精品疯狂输出jk草莓视频| 日韩精品无码人妻一区二区三区| 久久亚洲日本激情战少妇| 武城县| 国精品午夜福利不卡视频| 国产一区日韩二区三区| 国内不卡不区二区三区| 国产亚洲久久久久久久| 午夜国产精品福利一二| 最新亚洲av日韩av二区| 后入内射无码人妻一区| 日韩人妻一区中文字幕| 中文成人无字幕乱码精品区| 国产精品13页| 一区二区三区无码免费看| 美女裸体十八禁免费网站| 区一区二区三区中文字幕| 西西人体大胆444WWW|