前提准备条件:安装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语言编程小游戏--贪吃蛇相关推荐

  1. 【从入门到入土系列】C语言制作小游戏-贪吃蛇:Copy+运行即可另附注释

    系列文章 本系列持续更新中,欢迎您的访问! 系列简介 本系列由唐文疏撰写,负责记录博主的学习生涯中的一点一滴.独乐乐不如众乐乐,故此分享给大家.欢迎大家一起讨论.学习和批评指点. 博主只是一个普普通通 ...

  2. 面向对象编程java小游戏_JavaScript面向对象编程小游戏---贪吃蛇代码实例

    1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1-2 维护非常方便并且成本较低. ​2 这个demo是采用了面向 ...

  3. c语言入门级小游戏 · 贪吃蛇 | 激发你的编程兴趣

    目录 前言 拓展知识 介绍system("pause") First:制作可控移动的小蛇 Second:添加食物 Third:如何Game Over 完整代码 前言 声明:本游戏参 ...

  4. C语言实战小游戏:贪吃蛇大战

    代码如下: #include<easyx.h> #include<stdio.h> #include<conio.h> // 需要使用_kbhit和_getch函数 ...

  5. GUI编程详解:小游戏贪吃蛇

    GUI编程 1.简介 Gui的核心技术:Swing.AWT 界面不美观 需要jre环境 为什么要学习? 可以写出自己想要的小工具 工作时候,也可能需要维护到swing界面 了解MVC架构,了解监听 ( ...

  6. Python命令行小游戏—贪吃蛇

    Python命令行小游戏-贪吃蛇 前言 一.贪吃蛇游戏初始界面及地图 1.游戏初始界面 2.游戏地图 二.命令符的设置.输出刷新和按键检测 1.库支持 2.c语言代码 3.Python代码(变量初始化 ...

  7. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  8. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  9. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

最新文章

  1. 【翻译】旧技术成就新勒索软件,Petya添加蠕虫特性
  2. C语言文件读写(2)-文本文件写操作
  3. java发布后功能不能用,急项目发布后java写的打印功能失效了-求解解决方法
  4. Java Web系统经常使用的第三方接口
  5. java phantomjs_Java爬虫:Jsoup + Phantomjs
  6. yfan.qiu linux硬链接与软链接
  7. 解决centos使用nc命令报错:Ncat: Connection refused.
  8. 本人薛广涛,2004年毕业于上海交通大学计算机系软件与理论专业,上海交通大学计算机科学与工程系(CSE)...
  9. java判断是否为linux,java判断是否Linux操作系统,判断OS操作系统类型工具类
  10. (原创)c#学习笔记10--定义类成员01--成员定义03--定义属性
  11. 直播源 列表 转换 php,Telelist直播源制作与格式转换工具 V2.4.1下载 制作XSPF、DPL、M3U等播放列表格式...
  12. JavaWeb项目--【在线音乐播放器】onlineMusicPlayer
  13. 黑马2021最新版 SpringCloud基础篇全技术栈导学(RabbitMQ+Docker+Redis+搜索+分布式)
  14. 史上最全运放运算放大器知识讲解(附主流厂商)
  15. 小张的个人信息管理系统
  16. 数据结构课程设计 重言式判别
  17. 只有你想不到的 看看这些另类的可穿戴设备
  18. C# Jason 序列化到文件 和从文件反序列化到对象
  19. 【Git】Git的HEAD和branch的理解
  20. Windows10安装MinGW-w64

热门文章

  1. graph driver-device mapper-04libdevmapper基本操作
  2. Yii Framework2.0开发教程(5)数据库mysql性能
  3. 二维动态数组定义及二维静态数组与**P的区别
  4. stanford-chinese-corenlp-yyyy-MM-dd-models.jar not exists解决
  5. win7+ubuntu20.04双系统+easybcd安装以及Reached target Reboot卡住问题
  6. Idea导入maven项目不自动识别pom.xml
  7. Nifi清空Queue操作
  8. ValueError: Related model 'users.UserProfile' cannot be resolved
  9. Sqlite3 for Linux 可视化工具
  10. Robust PCA