码龄可以增加编程的速度和对代码的敏感程度,却难以增加编程的乐趣。其实编程不同于科研,对于大部分人来说,编程最好玩的部分不是在山峰顶端的代码风云,而是一些相对简单的,一些纯粹的乐趣。多一些随机性,多一些好奇心,才是产生乐趣的不尽源泉。
而编程中又有一个函数可以实现我们无尽好奇的诉求,而且它也是几乎所有语言公有的库,它就叫随机库。虽然不同的语言使用方法会有差别,但它的实现机理是相同的。它能让字库生成出各具特色的文字;能让颜色库展示出五彩缤纷的色彩;能让几何体组合出千姿百态的形式。或而优美,或而正常,或而丑陋,或而搞笑,并非有意而为,只是自然长出。从一种最基本的原则出发,却能让我们不断探索新知。
下面,我就从两个方面,五个例子来介绍这几天用随机库生成的一些东西。
文字处理:
首先,要说随机生成,最简单方便的就是文字处理。虽然汉字字块的生成没有英文字母或者数字那样简单方便,但只要建立一个汉字库,并做一个对应的程序即可。
1.随机生成姓名、地址
想要随机生成中文名字,首先需要了解中文命名规则。在中文名中,名比较自由,但姓氏相对比较集中,如果你在路上看到“用华”、“杰”和“李抵”,就算华杰作名字更常用,但你还是会觉得“李抵”才是名字。
所以要生成姓名,首先搜索得到姓库。而名的话,我直接找了个常用字库,稍做处理(删除部分“鬼屁衰滚”一类的劣字),虽然整体不会特别顺口,但也不会生成特别丧的名字,在能生成各种常见名字的同时保证了多元性。字数按传统以一到二字随机。姓的话更需要基于常见的多元,是用的常见姓前200占80%,复姓、200-500姓氏各10%的结构
人有姓氏,同理地名也有地名用字和1-3个随机字,地名用字在最后。除此之外,还可能出现“xx一路”“xx二路”“xx东街”“xx新村”等加描述的地名类型。
随机生成、概率的本质即生成随机数、当随机数在一定范围内在库中抓取一个值,并将抓出的值按照规律有机组合即可。
随机生成名字的呈现效果:
2.随机生成事件
与随机生成名字类似,随机生成事件也需要拼凑文字。不同的是,随机生成名字生成,最多储存一下即可,而随机生成事件可能会修改对应的数据。例如“代替”修改名字,“补考”修改成绩,“杀”删除数据,“生成”添加数据等。我的设计是每一个事件都有情绪副词、除了睡着都有对应说的话。
阎漆 浪漫地搬家了,从求滔五径搬到符屯大陂 ,并说:将就待两天。
卜爪可 代替了 谭食 ,并说:私来也。
游户 浪漫地补考了 ,并说:再试试。结果成绩涨了,从34考到了66。
游户 愤怒地睡着了。
易悬 玩游戏开挂。
易悬 悲伤地补考了 ,并说:考好才好过年。结果成绩涨了,从13考到了37。
亓官些匙 阴险地睡着了。
阎漆 睡着了。
魏权 转专业了,从文学转到哲学 ,并说:这才是我的梦想。
陶茫 打了 魏权 ,并说:以语言学家的角度看,开玩笑的。
阎漆 蹦蹦跳跳地玩游戏开挂 ,并说:换个活法。
...
鲁浪 浪漫地杀了 亓官些匙 ,并说:揍死你。54BP享年19次['亓官些匙', 19]
卜爪可 浪漫地转专业了,从法学转到农学 ,并说:之前志愿填错了。
图像处理:
相比于文字处理,图像处理的原理是通过设置(r,g,b)的值来实现变色。
1.随机生成色块
先生成随机色列表,在每一个色块上再从列表中随机抓取一种颜色绘制方块。
这是做的一个填色游戏,当填色完成的效果:
2.随机生成国旗
1.通过方法库随机获取生成国旗方法。
2.每一个方块随机生成颜色。为了让生成的颜色更正,我设置了一个正色库,即各个颜色值为[0,155,255]3个之一。
3.按照位置批量生成。
4.通过音译字库随机生成名字(2-4字,每个字可以随机选择是否添加尔斯德特,可选择是否删除尾字、是否加地名字:斯坦,尼亚,兰,单字+国,疆,朝等)
3.随机生成脸
1.通过黑白绘出脸、眼、嘴、发等元素。
2.通过调试找出对应位置。
3.将其与随机色配合(这些可能下次会单独讲)
呈现效果:
虽然五官画得比较奇怪,不是很好看,但只要掌握了原理,剩下的都是美术功底的事了。
除此之外,还有很多随机生成的方式,就不一一赘述了。总之随机生成通过一种最基本的原则出发,却造出千姿百态,能让我们创造层出不穷的趣味。