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 ...