| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package main
- import "fmt"
- /*
- // 普通函数
- func 函数名(参数) 返回值 {
- // 函数体
- }
- // 方法 = 函数 + 接收者
- func (接收者) 方法名(参数) 返回值 {
- // 方法体
- }
- */
- // 游戏角色系统
- type Player struct {
- Name string
- Level int
- Health int
- MaxHealth int
- Attack int
- }
- // 值接收器方法 - 只读操作
- func (p Player) DisplayStatus() {
- fmt.Printf("=== %s的状态 ===\n", p.Name)
- fmt.Printf("等级: %d\n", p.Level)
- fmt.Printf("生命值: %d/%d\n", p.Health, p.MaxHealth)
- fmt.Printf("攻击力: %d\n", p.Attack)
- }
- func (p Player) IsAlive() bool {
- return p.Health > 0
- }
- // 指针接收器方法 - 修改状态
- func (p *Player) TakeDamage(damage int) {
- p.Health -= damage
- if p.Health < 0 {
- p.Health = 0
- }
- fmt.Printf("%s受到%d点伤害!剩余生命值: %d\n", p.Name, damage, p.Health)
- }
- func (p *Player) Heal(amount int) {
- p.Health += amount
- if p.Health > p.MaxHealth {
- p.Health = p.MaxHealth
- }
- fmt.Printf("%s恢复%d点生命值!当前生命值: %d\n", p.Name, amount, p.Health)
- }
- func (p *Player) LevelUp() {
- p.Level++
- p.MaxHealth += 20
- p.Health = p.MaxHealth // 升级回满血
- p.Attack += 5
- fmt.Printf("%s升级了!现在等级: %d\n", p.Name, p.Level)
- }
- // 战斗方法
- func (p *Player) AttackTarget(target *Player) {
- if !p.IsAlive() {
- fmt.Printf("%s已经倒下,无法攻击!\n", p.Name)
- return
- }
- if !target.IsAlive() {
- fmt.Printf("%s已经倒下,无需攻击!\n", target.Name)
- return
- }
- damage := p.Attack
- fmt.Printf("%s攻击%s,造成%d点伤害!\n", p.Name, target.Name, damage)
- target.TakeDamage(damage)
- }
- func main() {
- fmt.Println("=== 游戏战斗演示 ===\n")
- // 创建两个玩家
- hero := &Player{
- Name: "勇者",
- Level: 1,
- Health: 100,
- MaxHealth: 100,
- Attack: 15,
- }
- monster := &Player{
- Name: "怪物",
- Level: 1,
- Health: 80,
- MaxHealth: 80,
- Attack: 12,
- }
- // 显示初始状态
- hero.DisplayStatus()
- monster.DisplayStatus()
- fmt.Println("\n=== 战斗开始 ===")
- // 第一轮攻击
- hero.AttackTarget(monster)
- monster.AttackTarget(hero)
- // 第二轮攻击
- hero.AttackTarget(monster)
- monster.AttackTarget(hero)
- // 勇者升级
- fmt.Println("\n=== 勇者升级 ===")
- hero.LevelUp()
- hero.DisplayStatus()
- // 最终攻击
- fmt.Println("\n=== 最终攻击 ===")
- hero.AttackTarget(monster)
- // 检查存活状态
- fmt.Printf("\n战斗结果:\n")
- fmt.Printf("勇者存活: %t\n", hero.IsAlive())
- fmt.Printf("怪物存活: %t\n", monster.IsAlive())
- }
|