package main
import (
"fmt"
"time"
"math/rand"
"sync"
)
var myrand *rand.Rand
var wg sync.WaitGroup
func init() {
myrand = rand.New(rand.NewSource(time.Now().UnixNano()))
}
type characters struct {
name string //人物名称
attack int //攻击力1-100
hitRate int //命中率 1-100
hp chan int //HP
}
func newCharacters(name string,attack,hitRate int) *characters{
c := characters{name:name,attack:attack,hitRate:hitRate}
c.hp = make(chan int)
return &c
}
/*
攻击者 attacker
防御者 defender
*/
func game(attacker characters,defender characters){
fmt.Println(attacker.name,"开始进行攻击")
lossHP := 0
surplusHP := <- defender.hp
if surplusHP <= 0 {
fmt.Println(defender.name,"剩余生命为",surplusHP,attacker.name,"取得胜利")
wg.Done()
return
}
//停顿1s
time.Sleep(1 * time.Second)
rate := myrand.Intn(100)
//准备下次攻击
go game(attacker,defender)
//随机小于命中率时候 发动攻击
if attacker.hitRate >= rate {
lossHP = attacker.attack
fmt.Println(attacker.name,"对(",defender.name,")造成伤害:",lossHP)
} else {
lossHP = 0
fmt.Println(defender.name,"miss")
}
surplusHP -= lossHP
fmt.Println(defender.name,"剩余生命",surplusHP)
defender.hp <- surplusHP
}
func main(){
wg.Add(1)
char1 := newCharacters("勇士",15,85)
char2 := newCharacters("恶龙",25,30)
//准备攻击
go game(*char1,*char2)
go game(*char2,*char1)
//初始化生命
char1.hp <- 100
char2.hp <- 160
wg.Wait()
}
评论正在建设,欢迎大家拍砖!