package main

import (
"fmt"
"math/rand"
"os"
"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)
WritePerson2File(`F:\BlockChain\code\W2\day4\投胎.txt`, p)
}
} /*将人员信息写入指定文件*/
func WritePerson2File(filename string, person *Person) {
file, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil{
fmt.Println("打开文件失败err=",err)
return
}
defer file.Close() file.WriteString(person.String()+"\n")
fmt.Println("写出成功:",person.Name)
} 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---投胎游戏的更多相关文章

  1. 八戒转世投胎竟然是Java设计模式:桥接模式

    目录 示例 代码实例 桥接模式 定义 意图 主要解决问题 何时使用 优缺点 八戒转世投胎的故事 示例 请开发一个画图程序,可以画各种颜色不同形状的图形,请用面向对象的思 想设计图形 分析: 1.比如有 ...

  2. C语言面向对象风格编程

    前言 本文略谈C面向对象风格编程,如何使用过程式语言去模拟面向对象的特性?C面向对象的方式和形式很多,不一而足,本文的代码形式是模拟部分C++面向对象关键词并赋予其特性,这种方式对于初级程序员比较好理 ...

  3. 【C语言项目】贪吃蛇游戏(上)

    目录 00. 目录 01. 开发背景 02. 功能介绍 03. 欢迎界面设计 3.1 常用终端控制函数 3.2 设置文本颜色函数 3.3 设置光标位置函数 3.4 绘制字符画(蛇) 3.5 欢迎界面函 ...

  4. ch2_8_4求解投骰子游戏问题

    思路:递推.到第n步可以从第0步走n步到第n步,从第1步走n-1步到第n步... ...依次类推,=> f(n)=f(0)+f(1)+...+f(n-1) import java.util.Sc ...

  5. 【C语言项目】贪吃蛇游戏(下)

    目录 00. 目录 07. 游戏逻辑 7.5 按下ESC键结束游戏 7.6 判断是否撞到墙 7.7 判断是否咬到自己 08. 游戏失败界面设计 8.1 游戏失败界面边框设计 8.2 撞墙失败界面 8. ...

  6. GO语言面向对象

    当初开发go语言的时候就是因为C++的特性太过于繁杂,从而使得很多C++的开发者因为C++的特性而头疼,go语言成功的精简了C++的特性,使其很简洁,很少的特性,却可以完成很多的事情. go语言中并没 ...

  7. C语言面向对象的简便方法

    都知道C语言是面向过程的,但是现在软件规模越来越大,通过面向对象的方式可以简化开发.业余时间想了个简单的方法,在C中使用一部分面向对象的基本功能.由于C语言自身的限制,并不完善,只能将就用,聊胜于无, ...

  8. 云风:我所偏爱的C语言面向对象编程范式

    面向对象编程不是银弹.大部分场合,我对面向对象的使用非常谨慎,能不用则不用.相关的讨论就不展开了. 但是,某些场合下,采用面向对象的确是比较好的方案.比如 UI 框架,又比如 3d 渲染引擎中的场景管 ...

  9. oc语言--面向对象的三大特性

    一.封装 1.什么是封装 在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将对象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的 ...

随机推荐

  1. kubernetes的架构

    kubernetes架构 k8s的物理结构是master/node模式,架构图如下所示 master一般是三个节点或者五个节点做高可用,根据集群规模来定,master高可用指的是对apiserver做 ...

  2. 🍎

    江湖中有一本练了就能天下无敌的葵花宝典,大家都想得到它.如果有一天葵花宝典被公开了,人人都有机会练,到底是好事还是坏事呢? 这会成为一个灾难. 因为一个人拥有时,练不练是一个人的事.大家都拥有,练不练 ...

  3. Weblogic CVE-2020-2551漏洞复现

    Weblogic CVE-2020-2551漏洞复现 0x00 前言 在一次渗透测试过程中,碰见了该漏洞,并使用在野的POC验证了这个漏洞存在,当时工具网传的利用方式去进行利用,没有成功,可能是自己太 ...

  4. C++ 面向对象高级设计

    inline关键字 类声明内定义的函数,自动成为inline函数,类声明外定义的函数,需要加上inline关键字才能成为inline函数 构造函数 应该使用列表初始化 class complex { ...

  5. 031- 控制语句switch

    语法 switch(表达式){ case 值1: java语句; break; case 值2: java语句; break; case 值3: java语句; break; default: jav ...

  6. hdu4861 找规律了

    题意:      给你k个球和一个整数p,每个球的价值是 1^i+2^i+...+(p-1)^i (mod p),两个人轮流取球,最后谁的总价值也大谁就赢,问你先手能不能赢. 思路:      一开始 ...

  7. LAMP环境搭建一个Discuz论坛

    LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的简称.一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有 ...

  8. Linux中编写Shell脚本

    目录 Shell Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (())  数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令 ...

  9. Python2中的urllib、urllib2和 Python3中的urllib、requests

    目录 Python2.x中 urllib和urllib2 常用方法和类 Python3.x中 urllib requests Python2.x中 urllib和urllib2 urllib 和 ur ...

  10. POJ1486模拟或者匈牙利变种

    题意:       有n个矩形,每个矩形上的某个位置上都有一个点,但是由于矩形是透明的,当一些矩形重叠在一起的时候就很可能分不清哪个点是那个矩形的,给你n个矩形的坐标,还有n个点的坐标,然后让你找出所 ...