标签:end interface highlight main loss case arc can app
package main
import "fmt"
type Fighter interface {
Attack() (bloodloss int)
Defend()
}
/*骑兵*/
type Rider struct{}
func (r *Rider)Attack() (bloodloss int) {
fmt.Println("铁蹄滚滚,尸横遍野\n")
return 100
}
func (r *Rider)Defend() {
fmt.Println("骑兵防守")
}
/*弓箭手*/
type Archer struct {}
func (a *Archer)Attack() (bloodloss int) {
fmt.Println("万箭齐发!\n")
return 50
}
func (a *Archer)Defend() {
fmt.Println("弓箭手防守")
}
/*法师*/
type Master struct {}
func (a *Master)Attack() (bloodloss int) {
fmt.Println("天灵灵地灵灵云中飞来百万兵!\n")
return 50
}
func (a *Master)Defend() {
fmt.Println("法师防守")
}
func main() {
//创建一支军队
fighters := make([]Fighter, 0)
//添加战士的多种实现形态
fighters = append(fighters, &Rider{})
fighters = append(fighters, &Archer{})
fighters = append(fighters, &Master{})
/*
让用户发将令
第一位代表骑兵,第二位代表弓箭手,第三位代表法师,9=进攻,0=防守,例如:
999=全体进攻
000=全体防守
090=弓箭手进攻,其他兵种防守
*/
var cmd string
for {
fmt.Println("大将军,请传令:")
fmt.Scan(&cmd)
switch cmd {
case "exit":
goto GAMEOVER
case "全体进攻":
//全体进攻
for _,fighter := range fighters{
fighter.Attack()
}
case "全体防守":
//全体防守
for _,fighter := range fighters{
fighter.Defend()
}
default:
/*不同兵种执行不同命令*/
//断言方法一:
/*for _,f := range fighters{
//调度骑兵
if _,ok := f.(*Rider);ok{
if cmd[0] == ‘9‘{
f.Attack()
}else {
f.Defend()
}
}
//调度弓箭手
if _,ok := f.(*Archer);ok{
if cmd[1] == ‘9‘{
f.Attack()
}else {
f.Defend()
}
}
//调度法师
if _,ok := f.(*Master);ok{
if cmd[2] == ‘9‘{
f.Attack()
}else {
f.Defend()
}
}
}*/
//断言方法二:
for _,fighter := range fighters{
switch fighter.(type) {
case *Rider:
if cmd[0] == ‘9‘{
fighter.Attack()
}else {
fighter.Defend()
}
case *Archer:
if cmd[1] == ‘9‘{
fighter.Attack()
}else {
fighter.Defend()
}
case *Master:
if cmd[2] == ‘9‘{
fighter.Attack()
}else {
fighter.Defend()
}
}
}
}
}
GAMEOVER:
fmt.Println("GAMEOVER!")
}
输出:
大将军,请传令: 000 骑兵防守 弓箭手防守 法师防守 大将军,请传令: 999 铁蹄滚滚,尸横遍野 万箭齐发! 天灵灵地灵灵云中飞来百万兵! 大将军,请传令: 090 骑兵防守 万箭齐发! 法师防守 大将军,请传令: 全体进攻 铁蹄滚滚,尸横遍野 万箭齐发! 天灵灵地灵灵云中飞来百万兵! 大将军,请传令: 全体防守 骑兵防守 弓箭手防守 法师防守 大将军,请传令: 909 铁蹄滚滚,尸横遍野 弓箭手防守 天灵灵地灵灵云中飞来百万兵! 大将军,请传令: 900 铁蹄滚滚,尸横遍野 弓箭手防守 法师防守
标签:end interface highlight main loss case arc can app
原文地址:https://www.cnblogs.com/yunweiqiang/p/11925141.html