Golang 實現控制台貪吃蛇

2021-08-15 12:00:18 字數 4921 閱讀 2578

package main

import (

"fmt"

"math/rand"

"os"

"time")/*

#include #include // 使用了winapi來移動控制台的游標

void gotoxy(int x,int y)

// 從鍵盤獲取一次按鍵,但不顯示到控制台

int direct()

*/import "c" // go中可以嵌入c語言的函式

// 表示游標的位置

type loct struct

var (

area = [20][20]byte{} // 記錄了蛇、食物的資訊

food bool             // 當前是否有食物

lead byte             // 當前蛇頭移動方向

head loct             // 當前蛇頭位置

tail loct             // 當前蛇尾位置

size int              // 當前蛇身長度

)// 隨機生成乙個位置,來放置食物

func place() loct

}// 用來更新控制台的顯示,在指定位置寫字元,使用錯誤輸出避免緩衝

func draw(p loct, c byte)

func init() , loct

lead, size = 'r', 1

area[4][4] = 'h'

rand.seed(int64(time.now().unix()))

// 輸出初始畫面

fmt.fprintln(os.stderr, `

#-----------------------------------------#

|                                         |

|                                         |

|                                         |

|                                         |

|         *                               |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

#-----------------------------------------#

`) // 我們使用乙個單獨的go程來捕捉鍵盤的動作,因為是單獨的,不怕阻塞

go func()

} }()

}func main() // 放置食物

if !food

} // 我們在蛇頭位置記錄它移動的方向

area[head.i][head.j] = lead // 根據lead來移動蛇頭

switch lead // 判斷蛇頭是否出界

if head.i < 0 || head.i >= 20 || head.j < 0 || head.j >= 20 // 獲取蛇頭位置的原值,來判斷是否撞車,或者吃到食物

eat := area[head.i][head.j]

if eat == 'f' else if eat == 0

} else

draw(head, '*') // 繪製蛇頭

} // 收尾了

switch

} "fmt"

"math/rand"

"os"

"time")/*

#include #include // 使用了winapi來移動控制台的游標

void gotoxy(int x,int y)

// 從鍵盤獲取一次按鍵,但不顯示到控制台

int direct()

*/import "c" // go中可以嵌入c語言的函式

// 表示游標的位置

type loct struct

var (

area = [20][20]byte{} // 記錄了蛇、食物的資訊

food bool             // 當前是否有食物

lead byte             // 當前蛇頭移動方向

head loct             // 當前蛇頭位置

tail loct             // 當前蛇尾位置

size int              // 當前蛇身長度

)// 隨機生成乙個位置,來放置食物

func place() loct

}// 用來更新控制台的顯示,在指定位置寫字元,使用錯誤輸出避免緩衝

func draw(p loct, c byte)

func init() , loct

lead, size = 'r', 1

area[4][4] = 'h'

rand.seed(int64(time.now().unix()))

// 輸出初始畫面

fmt.fprintln(os.stderr, `

#-----------------------------------------#

|                                         |

|                                         |

|                                         |

|                                         |

|         *                               |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

|                                         |

#-----------------------------------------#

`) // 我們使用乙個單獨的go程來捕捉鍵盤的動作,因為是單獨的,不怕阻塞

go func()

} }()

}func main() // 放置食物

if !food

} // 我們在蛇頭位置記錄它移動的方向

area[head.i][head.j] = lead // 根據lead來移動蛇頭

switch lead // 判斷蛇頭是否出界

if head.i < 0 || head.i >= 20 || head.j < 0 || head.j >= 20 // 獲取蛇頭位置的原值,來判斷是否撞車,或者吃到食物

eat := area[head.i][head.j]

if eat == 'f' else if eat == 0

} else

draw(head, '*') // 繪製蛇頭

} // 收尾了

switch

}

參考:

貪吃蛇 控制台

本文把遊戲區域就行編號,第一行從0到width 1,到height 1 到 width height 1 二維陣列 並用trace len 陣列儲存snake移動的軌跡 儲存的是數值,數值就能表現出所在的行和列 trace 0 始終為snake的頭部 根據display 函式繪圖,延時,在繪圖,達到...

c 控制台實現貪吃蛇

思路 效果 沒開發前覺得挺難,一步步做下來後就不覺得難了,當然,只是粗略的實現,速度,地圖自定義等都可以再繼續優化,規劃也不好。貪吃蛇包含 牆,食物,蛇。牆 初始後固定動,直接按橫0縱0,高寬自定列印字元即可。食物 x,y生成在牆內。蛇 會動,實際會動的只有蛇頭和蛇尾,蛇身每個字元都會經過蛇頭的位置...

控制台版貪吃蛇

include include include include include 地圖大小 define map size 20 全域性螢幕輸出快取區控制代碼 handle g houtput 地圖屬性 struct mapnode s nodetype e type 全域性地圖資料 mapnode ...