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. GridSearchCV 参数

    GridSearchCV(estimator, param_grid, scoring=None, fit_params=None, n_jobs=1, iid=True, refit=True, c ...

  2. 473. Matchsticks to Square

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  3. display:table-cell,inline-block 之间的缝隙

    1.dispaly:table-call ,会让你对元素设置的为百分百的宽度失效,设置正常数值宽高时, vertical-align: middle;可让内部元素垂直居中,但如果加上position: ...

  4. 【Set】Set集合求并集,交集,差集

    /** * @author: Sam.yang * @date: 2020/11/16 11:14 * @desc: Set集合操作工具类 */ public class SetOptUtils { ...

  5. 将Android源码导入eclipse中的方法以及编译Android源码指定模块

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/53365659 将android源码导入eclipse.androidstudio. ...

  6. Tomcat启动乱码解决

    问题如下图: 解决方案 找到Tomcat目录下conf文件夹中的logging.properties文件 打开logging.properties文件,找到文件中的java.util.logging. ...

  7. JDBC相关配置和操作

    获取数据库连接的几种方式 ps.数据库URL : String url = "jdbc:mysql://localhost:3306/dailytext?useSSL=false&s ...

  8. 【前端】vue2.x 配合 bootstrapTable 动态添加元素和绑定点击事件,事件无效 解决

    背景: 使用bootstrap-table 表格插件时,每一行的最后一班会加操作按钮列.如果不加入vue的话,使用插件自己的列属性formatter:function(value, row, inde ...

  9. python双曲线拟合

    待拟合函数 y = alpha * pow(x, beta) 输入: x数组,y数组 输出: alpha,beta,相关系数R2 from scipy.optimize import leastsq ...

  10. ES 6 中的箭头函数及用法

    ES6标准新增了一种新的函数:Arrow Function(箭头函数). 主要的几种写法如下: 组成: 参数 => 语句, 参数不是1个: (参数,参数2)=>语句 语句不止一条: 参数 ...