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. helm安装及使用

    helm简介 官网文档:https://helm.sh/ helm是kubernetes的包管理器,类似于linux系统下的apt-get或yum 安装 wget https://get.helm.s ...

  2. 【yml】springboot 配置类 yml语法

    参考:https://www.runoob.com/w3cnote/yaml-intro.html YAML 是 "YAML Ain't a Markup Language"(YA ...

  3. JS笔记(二)

    1.完整的JavaScript由核心(ECMAScipt).文档对象模型(DOM).浏览器对象模型(BOM)组成. 2.<script>标签的用法:引用位置.src.async.defer ...

  4. 修改Android手机内核,绕过反调试

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/57086486 0x1.手机设备环境 Model number: Nexus 5 O ...

  5. hdu4941 map交换行列

    题意:      有一个大矩阵,某些格子上有数字,然后有三种操作, 1 交换行 2 交换列 3 询问当前坐标数值 思路:      直接用map去映射行列,用二维的map去存数字就行了,水题,想不通的 ...

  6. poj2175费用流消圈算法

    题意:      有n个建筑,每个建筑有ai个人,有m个避难所,每个避难所的容量是bi,ai到bi的费用是|x1-x2|+|y1-y2|+1,然后给你一个n*m的矩阵,表示当前方案,问当前避难方案是否 ...

  7. 使用Windows全局钩子打造键盘记录器

    简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...

  8. Windows核心编程 第27章 硬件输入模型和局部输入状态

    第27章 硬件输入模型和局部输入状态 这章说的是按键和鼠标事件是如何进入系统并发送给适当的窗口过程的.微软设计输入模型的一个主要目标就是为了保证一个线程的动作不要对其他线程的动作产生不好的影响. 27 ...

  9. PowerShell-5.网络请求

    写了一个函数,用于文件下载并且执行: function DownLoadAndRun($vUrl ,$vLocalPath ,$vStart){ Import-Module BitsTransfer ...

  10. HackingLab脚本关

    目录 1:key又又找不到了 2:快速口算 3:这个题目是空的 5:逗比验证码第一期 6:逗比验证码第二期 7:逗比的验证码第三期(SESSION) 8:微笑一下就能过关了 9:逗比的手机验证码 10 ...