method.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package main
  2. import "fmt"
  3. /*
  4. // 普通函数
  5. func 函数名(参数) 返回值 {
  6. // 函数体
  7. }
  8. // 方法 = 函数 + 接收者
  9. func (接收者) 方法名(参数) 返回值 {
  10. // 方法体
  11. }
  12. */
  13. // 游戏角色系统
  14. type Player struct {
  15. Name string
  16. Level int
  17. Health int
  18. MaxHealth int
  19. Attack int
  20. }
  21. // 值接收器方法 - 只读操作
  22. func (p Player) DisplayStatus() {
  23. fmt.Printf("=== %s的状态 ===\n", p.Name)
  24. fmt.Printf("等级: %d\n", p.Level)
  25. fmt.Printf("生命值: %d/%d\n", p.Health, p.MaxHealth)
  26. fmt.Printf("攻击力: %d\n", p.Attack)
  27. }
  28. func (p Player) IsAlive() bool {
  29. return p.Health > 0
  30. }
  31. // 指针接收器方法 - 修改状态
  32. func (p *Player) TakeDamage(damage int) {
  33. p.Health -= damage
  34. if p.Health < 0 {
  35. p.Health = 0
  36. }
  37. fmt.Printf("%s受到%d点伤害!剩余生命值: %d\n", p.Name, damage, p.Health)
  38. }
  39. func (p *Player) Heal(amount int) {
  40. p.Health += amount
  41. if p.Health > p.MaxHealth {
  42. p.Health = p.MaxHealth
  43. }
  44. fmt.Printf("%s恢复%d点生命值!当前生命值: %d\n", p.Name, amount, p.Health)
  45. }
  46. func (p *Player) LevelUp() {
  47. p.Level++
  48. p.MaxHealth += 20
  49. p.Health = p.MaxHealth // 升级回满血
  50. p.Attack += 5
  51. fmt.Printf("%s升级了!现在等级: %d\n", p.Name, p.Level)
  52. }
  53. // 战斗方法
  54. func (p *Player) AttackTarget(target *Player) {
  55. if !p.IsAlive() {
  56. fmt.Printf("%s已经倒下,无法攻击!\n", p.Name)
  57. return
  58. }
  59. if !target.IsAlive() {
  60. fmt.Printf("%s已经倒下,无需攻击!\n", target.Name)
  61. return
  62. }
  63. damage := p.Attack
  64. fmt.Printf("%s攻击%s,造成%d点伤害!\n", p.Name, target.Name, damage)
  65. target.TakeDamage(damage)
  66. }
  67. func main() {
  68. fmt.Println("=== 游戏战斗演示 ===\n")
  69. // 创建两个玩家
  70. hero := &Player{
  71. Name: "勇者",
  72. Level: 1,
  73. Health: 100,
  74. MaxHealth: 100,
  75. Attack: 15,
  76. }
  77. monster := &Player{
  78. Name: "怪物",
  79. Level: 1,
  80. Health: 80,
  81. MaxHealth: 80,
  82. Attack: 12,
  83. }
  84. // 显示初始状态
  85. hero.DisplayStatus()
  86. monster.DisplayStatus()
  87. fmt.Println("\n=== 战斗开始 ===")
  88. // 第一轮攻击
  89. hero.AttackTarget(monster)
  90. monster.AttackTarget(hero)
  91. // 第二轮攻击
  92. hero.AttackTarget(monster)
  93. monster.AttackTarget(hero)
  94. // 勇者升级
  95. fmt.Println("\n=== 勇者升级 ===")
  96. hero.LevelUp()
  97. hero.DisplayStatus()
  98. // 最终攻击
  99. fmt.Println("\n=== 最终攻击 ===")
  100. hero.AttackTarget(monster)
  101. // 检查存活状态
  102. fmt.Printf("\n战斗结果:\n")
  103. fmt.Printf("勇者存活: %t\n", hero.IsAlive())
  104. fmt.Printf("怪物存活: %t\n", monster.IsAlive())
  105. }