无任不欢:随机生成的愉快之旅(为结构分析,不含代码)

码龄可以增加编程的速度和对代码的敏感程度,却难以增加编程的乐趣。其实编程不同于科研,对于大部分人来说,编程最好玩的部分不是在山峰顶端的代码风云,而是一些相对简单的,一些纯粹的乐趣。多一些随机性,多一些好奇心,才是产生乐趣的不尽源泉。

而编程中又有一个函数可以实现我们无尽好奇的诉求,而且它也是几乎所有语言公有的库,它就叫随机库。虽然不同的语言使用方法会有差别,但它的实现机理是相同的。它能让字库生成出各具特色的文字;能让颜色库展示出五彩缤纷的色彩;能让几何体组合出千姿百态的形式。或而优美,或而正常,或而丑陋,或而搞笑,并非有意而为,只是自然长出。从一种最基本的原则出发,却能让我们不断探索新知。

下面,我就从两个方面,五个例子来介绍这几天用随机库生成的一些东西。

文字处理:

首先,要说随机生成,最简单方便的就是文字处理。虽然汉字字块的生成没有英文字母或者数字那样简单方便,但只要建立一个汉字库,并做一个对应的程序即可。

1.随机生成姓名、地址

想要随机生成中文名字,首先需要了解中文命名规则。在中文名中,名比较自由,但姓氏相对比较集中,如果你在路上看到“用华”、“杰”和“李抵”,就算华杰作名字更常用,但你还是会觉得“李抵”才是名字。

所以要生成姓名,首先搜索得到姓库。而名的话,我直接找了个常用字库,稍做处理(删除部分“鬼屁衰滚”一类的劣字),虽然整体不会特别顺口,但也不会生成特别丧的名字,在能生成各种常见名字的同时保证了多元性。字数按传统以一到二字随机。姓的话更需要基于常见的多元,是用的常见姓前200占80%,复姓、200-500姓氏各10%的结构

人有姓氏,同理地名也有地名用字和1-3个随机字,地名用字在最后。除此之外,还可能出现“xx一路”“xx二路”“xx东街”“xx新村”等加描述的地名类型。

随机生成、概率的本质即生成随机数、当随机数在一定范围内在库中抓取一个值,并将抓出的值按照规律有机组合即可。

随机生成名字的呈现效果:

ad2b360653784b5486d27db4a138f19f.png

 

2.随机生成事件

与随机生成名字类似,随机生成事件也需要拼凑文字。不同的是,随机生成名字生成,最多储存一下即可,而随机生成事件可能会修改对应的数据。例如“代替”修改名字,“补考”修改成绩,“杀”删除数据,“生成”添加数据等。我的设计是每一个事件都有情绪副词、除了睡着都有对应说的话。

阎漆 浪漫地搬家了,从求滔五径搬到符屯大陂 ,并说:将就待两天。
卜爪可 代替了 谭食 ,并说:私来也。
游户 浪漫地补考了 ,并说:再试试。结果成绩涨了,从34考到了66。
游户 愤怒地睡着了。
易悬 玩游戏开挂。
易悬 悲伤地补考了 ,并说:考好才好过年。结果成绩涨了,从13考到了37。
亓官些匙 阴险地睡着了。
阎漆 睡着了。
魏权 转专业了,从文学转到哲学 ,并说:这才是我的梦想。
陶茫 打了 魏权 ,并说:以语言学家的角度看,开玩笑的。
阎漆 蹦蹦跳跳地玩游戏开挂 ,并说:换个活法。
...
鲁浪 浪漫地杀了 亓官些匙 ,并说:揍死你。54BP享年19次['亓官些匙', 19]
卜爪可 浪漫地转专业了,从法学转到农学 ,并说:之前志愿填错了。

图像处理:

相比于文字处理,图像处理的原理是通过设置(r,g,b)的值来实现变色。

1.随机生成色块

先生成随机色列表,在每一个色块上再从列表中随机抓取一种颜色绘制方块。

1030fea31f0d44a383a54c24facc7f31.png

这是做的一个填色游戏,当填色完成的效果:

cddda11c0ae644c1a6844fb57d294ce2.png

2.随机生成国旗

1.通过方法库随机获取生成国旗方法。

2.每一个方块随机生成颜色。为了让生成的颜色更正,我设置了一个正色库,即各个颜色值为[0,155,255]3个之一。

3.按照位置批量生成。

4.通过音译字库随机生成名字(2-4字,每个字可以随机选择是否添加尔斯德特,可选择是否删除尾字、是否加地名字:斯坦,尼亚,兰,单字+国,疆,朝等)

9f4b78064531452e83811414894f76af.png

3.随机生成脸

1.通过黑白绘出脸、眼、嘴、发等元素。

2.通过调试找出对应位置。

3.将其与随机色配合(这些可能下次会单独讲)

呈现效果:

c7d3a9c3284345dea268dc4fc1d06724.png

 虽然五官画得比较奇怪,不是很好看,但只要掌握了原理,剩下的都是美术功底的事了。

 

除此之外,还有很多随机生成的方式,就不一一赘述了。总之随机生成通过一种最基本的原则出发,却造出千姿百态,能让我们创造层出不穷的趣味。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值