http://openmymind.net/Things-I-Wish-Someone-Had-Told-Me-About-Go/更改结构属性值
试图让我的头转过去,仍然很新。我知道C中的参考和指针,我似乎无法在Go中工作。我已阅读了许多有关此问题的文章,但仍然没有真正理解和实施解决方案。
字符有健康和atk点。
Chars can Attack()。
Combat round calls这个角色可以攻击的攻击()。
意图,当在字符上调用Attack()时,健康在另一个字符上发生变化。
当前运行状况在字符中不会改变。
有人可以给我一个简洁的例子,说明如何改变右侧物体上的值吗?
package main
import (
"fmt"
"math/rand"
"time"
)
//Character health + atk of
type Character struct {
Health, Atk int
}
//Attack ... Character can Attack
func (c *Character) Attack(health, atk int) {
health -= atk
}
//CharacterInterface ... methods for characters
type CharacterInterface interface {
Attack(health, atk int)
}
func combatRound(p, e Character) {
whoAtks := rand.Intn(100)
if whoAtks > 30 {
p.Attack(e.Health, p.Atk)
fmt.Println(p.Health)
} else {
e.Attack(p.Health, e.Atk)
fmt.Println(p.Health)
}
}
func main() {
//seed rand generator for the current run
rand.Seed(time.Now().UTC().UnixNano())
p := Character{20, 5}
e := Character{20, 5}
combatRound(p, e)
fmt.Println("Player Health: %d \n Enemy Health: %d", p.Health, e.Health)
}
'func combatRound(ref p,ref e Character){'什么是'ref'业务?它甚至编译? – hobbs
哦,这是我正在尝试忘记改变的东西。对不起 已修复。 –
你最好命名你的界面“攻击者”,那么任何具有“攻击”功能的“角色”都可以满足它。我认为你甚至可以创建一个AttackTarget接口,然后Attack功能就会成为target.TakeDamage(c.atk)。然后人物,物体,陷阱,盒子等,都可以单独进行攻击和攻击。 –