golang 每日一练 勇者斗恶龙

golang 每日一练 勇者斗恶龙


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()
}

评论正在建设,欢迎大家拍砖!

在线交流