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)。然後人物,物體,陷阱,盒子等,都可以單獨進行攻擊和攻擊。 –