用Golang写一款小游戏

写一个用Golang运行的小游戏打发时间---贪吃蛇
为了实现可视化,我使用了Go的GUI库fyne

思路:

定义一个结构体Snake表示贪吃蛇,包含贪吃蛇的长度、方向、身体坐标等属性。
定义一个结构体Game表示游戏状态,包含贪吃蛇、食物、得分等属性。
实现游戏画面的显示,使用fyne库中的Canvas组件,绘制贪吃蛇和食物的图形。
实现键盘事件的监听,根据不同的按键来改变贪吃蛇的方向。
实现贪吃蛇的移动逻辑,每个时间间隔更新贪吃蛇的位置,判断是否吃到食物或碰到墙壁或自己的身体,更新得分并重新生成食物。
完成游戏结束的处理,当贪吃蛇碰到墙壁或自己的身体时,游戏结束,显示得分和重新开始按钮。

代码:

package main

import (
	"fmt"
	"image/color"
	"math/rand"
	"time"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/canvas"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/widget"
)

const (
	cellSize   = 20 // 每个格子的大小
	gridWidth  = 30 // 游戏区域的宽度(格子数)
	gridHeight = 20 // 游戏区域的高度(格子数)
)

var (
	directions = []fyne.Key{
   
		fyne.KeyUp,
		fyne.KeyDown,
		fyne.KeyLeft,
		fyne.KeyRight,
	}
)

// Snake表示贪吃蛇
type Snake struct {
   
	Body       []fyne.Position // 身体坐标
	Length     int             // 长度
	Direction  fyne.Key        // 方向
	lastMoveAt time.Time       // 上次移动时间
}

// NewSnake创建一个新的贪吃蛇
func NewSnake() Snake {
   
	head := fyne.NewPos(cellSize*gridWidth/2, cellSize*gridHeight/2)
	return Snake{
   
		Body:       []fyne.Position{
   head},
		Length:     1,
		Direction:  fyne.KeyRight,
		lastMoveAt: time.Now(),
	}
}

// Move移动贪吃蛇
func (s *Snake) Move() {
   
	if time.Since(s.lastMoveAt) < 100*time.Millisecond {
   
		return
	}

	head := s.Body[0]
	var newHead fyne.Position

	switch s.Direction {
   
	case fyne.KeyUp:
		newHead = fyne.NewPos(head.X, head.Y-cellSize)
	case fyne.KeyDown:
		newHead 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 忘 忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值