用 Java 生成 ASCII 字符画

2007 先是次接触nethack,同年接触Dwarf
fortress,并成为roguelike游戏的死忠。

在上黄金年代篇博客里自身用Java创设了多个粗略的Ascii
字符画生成器(能够从GitHub威尼斯官网,上赢得),
随笔公布之后小编收下了成都百货上千陈述。所以几天前笔者希图继续在那么些类别上增添一些新特色,期望能受到愈来愈多款待。小编再也规划了大旨部分,指标是增加扩大性以便测量检验区别的算法以至发生多样化的结果。
在本文中,笔者交易会示本项目标全新布局,方便你结合进本人的类型中以致基于必要开展扩充。

2010 先是次通过海关nethack,种种快乐。

架构

威尼斯官网 1

2011.12 依傍DF的自由大地图的感到来尝试随机生成世界地图……
使用暴力的流星砸地形法,地形的更动算是中意,只是江湖的算法平素未果。

AsciiImgCache

在任何ascii字符渲染发生前,大家必要创建贰个此类的实例。
它供给三个字体和字符列表作为参数,然后它将为各样字符生成叁个图片的Map。若是您嫌麻烦,也会有私下认可的字符列表提你筛选。

提须求对此感兴趣的读者:

private static final char[] defaultCharacters = 
    "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft///|()1{}[]?-_+~<>i!lI;:,/"^`'. "

示例

// use only '/' '/' and ' '
AsciiImgCache mediumBlackAndWhiteCache = AsciiImgCache.
    create(new Font("Courier", Font.BOLD, 10), new char[] {'//', ' ', '/'});

// use default list
AsciiImgCache largeFontCache = AsciiImgCache.
    create(new Font("Courier",Font.PLAIN, 16));

2012.03 参照网络的算法尝试了价值观迷宫的变型,可是地城的成形一直未如人意。

BestCharacterFitStrategy

那是三个算法的肤浅,用来判别源图像与每一种字符的相仿度。该抽象唯有贰个主意:

float calculateError(final GrayscaleMatrix character, final GrayscaleMatrix tile);

对此现实的落实的话,它应该相比多少个图片并赶回浮点格式的偏差值。每种字符都会被用来扩充相比,最终选用重回最小偏差值的字符。前段时间有二种完结:

2013.06 利用分形算法再贰回挑战随机世界地图的变通,并试图用分形来兑现Infiniti大地图,生成结果和事情发生在此之前的暴力陨石法算是二种风格,只是Infiniti大地图的主张一向未果。

ColorSquareErrorFitStrategy

其大器晚成达成非常轻巧了然。
它相比各种像素然后总计灰度差别的均方固有误差(Mean
squared error)。

数学表明式如下:

威尼斯官网 2

里面n代表像素的多寡, C和T分别表示字符和tile图像的像素。

2013.09 地城生成有了突破性的进行!能够做出“看起来说得过去”的地城地图。

StructuralSimilarityFitStrategy

构造相通性(SSIM)索引算法声称能还原人类视角,其目的是进步传统的比方MSE的算法。此处作者不筹划详细明白其规律,即使您感兴趣能够在Wikipedia上读书有关资料。我要好也拓宽了一些尝试并贯彻了二个本子,仿佛能在我们的用例中获取正确的结果。

2013.10 FOV算法达成,能够在迷宫中绘制视线!

AsciiConverter

那是全方位工艺流程的为主,它含有源图像取样(tiling)的逻辑,调用具体落到实处计算出最相配的字符。不过,它并不知道如何创立ascii
字符 – 那亟需子类来促成。 近日有四个贯彻:AsciiToImageConverter and
AsciiToStringConverter – 望文生义,它们分别出口图像和字符串。

This entry was posted in 澳洲历史 and tagged , , , , , , . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注