当前位置: 首页 > news >正文

Go语言游戏后端开发9:Go语言中的结构体

在这里插入图片描述

第9课我们来学习Go语言中的结构体(struct)。结构体在游戏开发里就像是一个“数据大礼包”,能把不同类型的数据组合在一起,方便管理和使用。

结构体的定义与使用

package mainimport "fmt"// 定义一个表示游戏角色的结构体
type Character struct {Name    string  Level   int  //等级HP      int  //生命值Attack  int  //攻击力
}func main() {// 创建一个角色实例hero := Character{Name:    "战士leicw",Level:   10,HP:      100,Attack:  20,}fmt.Printf("角色名称:%s,等级:%d,生命值:%d,攻击力:%d\n", hero.Name, hero.Level, hero.HP, hero.Attack)
}

将以上代码写入main.go,运行结果如下:

leicw@Code AI世界:code009$ go run main.go
角色名称:战士leicw,等级:10,生命值:100,攻击力:20

在这段代码中,我们使用 type 关键字定义了一个名为 Character 的结构体。结构体内部包含了 Name(字符串类型)、Level(整数类型)、HP(整数类型)和 Attack(整数类型) 四个字段,分别表示角色的名称、等级、生命值和攻击力。

main 函数里,我们通过 Character{} 的方式创建了一个名为 hero 的角色实例,并为每个字段赋值。最后使用 fmt.Printf 打印出角色的各项属性。

结构体指针

和普通变量一样,结构体也可以使用指针。使用结构体指针可以在函数间高效传递结构体数据,避免大量数据的拷贝。

package mainimport "fmt"type Character struct {Name    stringLevel   intHP      intAttack  int
}// 定义一个函数,通过结构体指针修改角色的生命值
func heal(character *Character, amount int) {character.HP += amount
}func main() {hero := Character{Name:    "战士leicw",Level:   10,HP:      100,Attack:  20,}fmt.Printf("治疗前生命值:%d\n", hero.HP)heal(&hero, 50)fmt.Printf("治疗后生命值:%d\n", hero.HP)
}

将以上代码写入main.go,运行结果如下:

leicw@Code AI世界:code009$ go run main.go
治疗前生命值:100
治疗后生命值:150

这里定义了一个 heal 函数,它接受一个 Character 类型的指针和一个整数 amount。在函数内部,通过指针直接修改了角色的生命值。在 main 函数里,我们先打印了治疗前的生命值,然后调用 heal 函数并传入角色的指针和治疗量,最后打印治疗后的生命值。

在游戏开发中,结构体可以用来表示各种游戏对象,比如怪物、道具等,每个对象都有不同的属性。通过结构体和结构体指针,能让我们更方便地管理和操作这些游戏对象的数据。

你可以试着给 Character 结构体添加更多字段,比如防御力、魔法值等,然后修改相关函数和代码来使用这些新字段。多尝试不同的操作,对结构体的理解会更深刻。要是遇到什么问题,欢迎评论区留言。点击下方微信公众号扫码关注我,解锁更多精彩内容。

http://www.dtcms.com/a/464951.html

相关文章:

  • 网页网站作业制作郑州企业网站排名
  • C4D域的应用之鞋底生长动画制作详解
  • C语言自学--文件操作
  • 免费小程序网站网站建设优劣的评价标准
  • Kubernetes(K8S)全面解析:核心概念、架构与实践指南
  • 软件测试分类指南(上):从目标、执行到方法,系统拆解测试核心维度
  • 李宏毅机器学习笔记18
  • 深圳做网站优化工资多少长沙官网seo分析
  • 深入理解SELinux:从核心概念到实战应用
  • W5500接收丢数据
  • 【深度学习新浪潮】大模型推理实战:模型切分核心技术(下)—— 流水线并行+混合并行+工程指南
  • 烟台建站价格推荐门户网站建设公司
  • Node.js/Python 实战:编写一个淘宝商品数据采集器​
  • 网站html模板贵州网站开发流程
  • 【分布式训练】分布式训练中的资源管理分类
  • 重生归来,我要成功 Python 高手--day24 Pandas介绍,属性,方法,数据类型,基本数据操作,排序,算术和逻辑运算,自定义运算
  • 如何在关闭浏览器标签前,可靠地发送 HTTP 请求?
  • http cookie 与 session
  • Asp.net core appsettings.json` 和 `appsettings.Development.json`文件区别
  • ICRA-2025 | 机器人具身探索导航新策略!CTSAC:基于课程学习Transformer SAC算法的目标导向机器人探索
  • ManipulationNet:开启真实世界机器人操作基准测试新时代
  • 物流公司网站模版网页设计与制作做网站
  • 北京网站 百度快照单位如何建设网站
  • 英语文章工具: 提取、过滤文章单词在线工具
  • 良策金宝AI:为光伏工程师打造专属“智能外脑”
  • 《C++ STL list 完全指南:从基础操作到特性对比,解锁链表容器高效用法》
  • 刀客doc:亚马逊广告再下一城,拿下微软DSP广告业务
  • Agent 开发设计模式(Agentic Design Patterns )第 3 章:并行化模式
  • 配电系统接地 | TT, TN-C, TNC-S,TN-S, IT
  • Qemu-NUC980(七):Timer定时器