码迷,mamicode.com
首页 > 编程语言 > 详细

GO语言面向对象08---投胎游戏

时间:2019-12-01 11:38:08      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:阻塞   持久   持久化   names   range   成都   %s   输入   语言   

package main

import (
	"fmt"
	"math/rand"
	"time"
)

/*
@内存数据持久化到文件
·循环输入一堆人名
·为每个人创建一个Person对象
·随机生成其性别、生肖、星座
·将这些信息写出到《投胎.txt》
*/

/*性别常量*/
type Gender int
var genders []string = []string{"女","男","娘炮","女汉子","死变态"}
const (
	Female Gender = iota
	Male
	niangpao
	nvhanzi
	sibiantai
)

/*生肖*/
type Shengxiao int
var shengxiaos []string = []string{"鼠","牛","虎","兔子","龙","蛇","马","羊","猴","鸡","狗","猪"}
const (
	Rat   Shengxiao   = iota //鼠
	Ox             //牛
	Tiger          //虎
	Rabbit         //兔子
	Dragon         //龙
	Snake          //蛇
	Horse          //马
	Goat           //羊
	Money          //猴
	Rooster        //鸡
	Dog            //狗
	Pig            //猪
)

/*星座*/
type Xingzuo int
var xingzuos []string = []string{"白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","摩羯座","水瓶座","双鱼座"}
const (
	Aries       Xingzuo = iota //白羊座
	Taurus                     // 金牛座
	Gemini                     // 双子座
	Cancer                     // 巨蟹座
	Leo                        // 狮子座
	Virgo                      // 处女座
	Libra                      //天秤座
	Scorpio                    //天蝎座
	Sagittarius                //射手座
	Capricornus                //摩羯座
	Aquarius                   //水瓶座
	Pisces                     //双鱼座
)

type Person struct {
	Name string
	Gender Gender
	Shengxiao Shengxiao
	Xingzuo Xingzuo
}

func NewPerson(name string,gender Gender,shengxiao Shengxiao,xingzuo Xingzuo) *Person {
	person :=new(Person)
	person.Name = name
	person.Xingzuo = xingzuo
	person.Shengxiao = shengxiao
	person.Gender = gender
	return person
}

/*
让Person实现系统的String接口(不要用指针去实现,要用实例去实现)
该接口的String()方法的返回值,会在fmt.printxxx时使用
*/
func (p Person)String() string {
	return fmt.Sprintf("Person{姓名:%s,性别:%s,生肖:%s,星座:%s}",p.Name,genders[p.Gender],shengxiaos[p.Shengxiao],xingzuos[p.Xingzuo])
}

func main() {
	var names = []string{"李元霸", "宇文成都","裴元庆","雄阔海","你妹","山本","一龙"}
	people := make([]*Person, 0)

	for _,name := range names{
		//随机生成性别,生肖,星座
		gender,shengxiao,xingzuo := GetRandomConfig()
		person := NewPerson(name, gender, shengxiao, xingzuo)

		people = append(people, person)
	}
	for _,p := range people{
		fmt.Println(*p)
	}
}

func GetRandomConfig() (gender Gender,shengxiao Shengxiao,xingzuo Xingzuo) {
	//强制阻塞睡眠1纳秒,以确保时间种子得以更新
	time.Sleep(1 * time.Nanosecond)
	rand := rand.New(rand.NewSource(time.Now().UnixNano()))
	gender = Gender(rand.Intn(5))
	shengxiao = Shengxiao(rand.Intn(12))
	xingzuo = Xingzuo(rand.Intn(12))
	return
}

 输出:

Person{姓名:李元霸,性别:女汉子,生肖:龙,星座:射手座}
Person{姓名:宇文成都,性别:女汉子,生肖:猪,星座:射手座}
Person{姓名:裴元庆,性别:娘炮,生肖:猪,星座:狮子座}
Person{姓名:雄阔海,性别:女汉子,生肖:虎,星座:射手座}
Person{姓名:你妹,性别:娘炮,生肖:牛,星座:处女座}
Person{姓名:山本,性别:男,生肖:龙,星座:水瓶座}
Person{姓名:一龙,性别:娘炮,生肖:龙,星座:白羊座}

  

GO语言面向对象08---投胎游戏

标签:阻塞   持久   持久化   names   range   成都   %s   输入   语言   

原文地址:https://www.cnblogs.com/yunweiqiang/p/11965380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!