go语言编程小游戏--贪吃蛇
生活随笔
收集整理的這篇文章主要介紹了
go语言编程小游戏--贪吃蛇
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前提準備條件:安裝gcc環境,可以百度也
?可以安裝這個鏈接:https://pan.baidu.com/s/1BbXFcBZywK-k-eIkWqY3Ug?
提取碼:04wp
復制這段內容后打開百度網盤手機App,操作更方便哦,直接解壓,然后放到環境變量中。
代碼:
主文件:
package mainimport ("Clib""fmt""math/rand""os""time" )//全局常量 界面大小 const WIDE int = 20 const HIGH int = 20//存儲食物 var food Food//分數 var score = 0//初始化父類 坐標 type Position struct {X intY int }type Food struct {Position }//隨機食物 func RandomFood() {food.X = rand.Intn(WIDE) + 1food.Y = rand.Intn(HIGH)//顯示食物位置ShowUI(food.X, food.Y, '#') } func MapInit() {fmt.Fprintf(os.Stderr,`#-----------------------------------------#| || || || || || || || || || || || || || || || || || || || |#-----------------------------------------# `) } func ShowUI(X int, Y int, ch byte) {//調用c語言代碼繪制光標Clib.GotoPostion(X*2+2, Y+2)//將字符繪制在ui中fmt.Fprintf(os.Stderr, "%c", ch) } func PrintScore() {//打印分數Clib.GotoPostion(0, 23)fmt.Fprintln(os.Stderr, score)time.Sleep(time.Second * 2) }type Snake struct {size intdir intpos [WIDE * HIGH]Position }//初始化蛇信息 func (s *Snake) SnakeInit() {//初始化地圖 MapInit()//隨機食物 RandomFood()//蛇的長度s.size = 2s.pos[0].X = WIDE / 2s.pos[0].Y = HIGH / 2s.pos[1].Y = WIDE/2 - 1s.pos[1].Y = HIGH / 2//用U上L坐R右D下s.dir = 'R'for i := 0; i < s.size; i++ {var ch byte//區分蛇頭和身體if i == 0 {ch = '@'} else {ch = '*'}ShowUI(s.pos[i].X, s.pos[i].Y, ch)}//go 添加一個獨立函數//接收鍵盤的信息 go func() {for {switch Clib.Direction() {case 72, 87, 119:if s.dir != 'D' {s.dir = 'U'}case 80, 83, 115:if s.dir != 'U' {s.dir = 'D'}case 65, 97, 75:if s.dir != 'R' {s.dir = 'L'}case 68, 77, 100:if s.dir != 'L' {s.dir = 'R'}case 32:s.dir = 'P'}}}() } func (s *Snake) PlayGame() {var dx, dy int = 0, 0//游戲 的流程控制for {FLAG://延遲執行333stime.Sleep(time.Second / 3)//更新蛇的位置if s.dir == 'P' {goto FLAG}switch s.dir {case 'U':dx = 0dy = -1case 'D':dx = 0dy = 1case 'L':dx = -1dy = 0case 'R':dx = 1dy = 0}//蛇頭和墻的碰撞if s.pos[0].X < 1 || s.pos[0].X >= WIDE+1 || s.pos[0].Y < 0 || s.pos[0].Y >= HIGH {return}//蛇頭和身體的碰撞for i := 1; i < s.size; i++ {if s.pos[0].X == s.pos[i].X && s.pos[0].Y == s.pos[i].Y {return}}//蛇頭的食物的碰撞if s.pos[0].X == food.X && s.pos[0].Y == food.Y {s.size++RandomFood()score++}//記錄尾巴坐標lx := s.pos[s.size-1].Xly := s.pos[s.size-1].Y//更新蛇的坐標 蛇身體的坐標for i := s.size - 1; i > 0; i-- {s.pos[i].X = s.pos[i-1].Xs.pos[i].Y = s.pos[i-1].Y}//蛇頭的坐標s.pos[0].X += dxs.pos[0].Y += dy//繪制蛇的UIfor i := 0; i < s.size; i++ {var ch byte//區分蛇頭和身體if i == 0 {ch = '@'} else {ch = '*'}ShowUI(s.pos[i].X, s.pos[i].Y, ch)}//每次寫完將尾巴制空ShowUI(lx, ly, ' ')} } func main() {//設置隨機數種子 用作于混淆 rand.Seed(time.Now().UnixNano())//隱藏控制臺光標 Clib.HideCursor()//創建蛇的對象var s Snake//蛇的初始化 s.SnakeInit()s.PlayGame()PrintScore() }引入的c語言代碼和包:
package Clib/* #include<windows.h> #include<conio.h> //使用WInAPI來移動控制臺光標 void gotoxy(int x,int y){COORD c;c.X=x,c.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); } //從鍵盤獲取一次按鍵但不顯示在控制臺 int direct(){return _getch(); } //去控制臺光標 void hideCursor(){CONSOLE_CURSOR_INFO cci;cci.bVisible=FALSE;cci.dwSize=sizeof(cci);SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci); } */ import "C" //go可以嵌入C語言的函數 //設置控制臺光標位置 func GotoPostion(X int, Y int) {C.gotoxy(C.int(X), C.int(Y)) }//無顯示鍵盤輸入字符 func Direction() (key int) {key = int(C.direct())return } func HideCursor() {C.hideCursor() }?
轉載于:https://www.cnblogs.com/miria-486/p/10009894.html
總結
以上是生活随笔為你收集整理的go语言编程小游戏--贪吃蛇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ4860 Beijing2017
- 下一篇: 常用机器学习算法