技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 1197|回复: 10
收起左侧

【VB6】Minecraft地图画生成器:使用抖动算法,支持用户自定义图片,生成bash脚本(给服务器用)

[复制链接]

1008

主题

2235

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
200
威望
265 点
宅币
16762 个
贡献
33386 次
宅之契约
0 份
在线时间
1598 小时
注册时间
2014-1-26
发表于 2017-2-28 23:14:34 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
20170228230712.png
下载地址在后面。

之所以不像上个版本那样直接发送命令到MC窗口是因为……那会让用户无法操作电脑上的其它东西,并且,现在因为支持很大的图片,命令很多而又不好做中止功能的话,实在是令人头疼。
所以干脆让它能自动在当前文件夹目录下生成一个txt文本和一个bash脚本,Linux服务器端直接执行这个bash脚本就行了。

这个bash脚本又是怎么发送服务器命令到服务器后台的呢?其实不是什么靠谱的办法,说白了就是常见的往screen的stdin写入字符的方式来完成的。
20170228225722.png
screen.png

每发送一条命令就sleep 0.05秒,而MC的游戏刻是20分之一秒,正好是这个时间。当然这些设定都可以调整。
为了考虑国际化,我这些功能都用英文写。现在请看功能介绍。
help.png

其中“凹凸”调色板,含义是根据MC对地图颜色处理的原理,凸起和凹陷的地图,有特殊的颜色处理。打个比方,我在超平坦世界里放置了一个方块,那么因为这个方块是凸起的,它的南面紧贴着它的位置并没有比它更高的方块,于是在地图上,它的颜色比它本身的平均色更亮,而它南面那个方块,因为比它低,所以颜色更暗。

借助这个特性,我们可以利用方块的位置高度差,来创建颜色更丰富的地图图像。
2017-02-28_21.07.29.png
2017-02-28_21.08.18.png

调色板数据,我是从这里获取的:
http://minecraft.gamepedia.com/Map_item_format
但1.10和1.12的调色板我是靠自己找出追加的新方块来确定的。顺带,我不知道,这个wikipedia描述的每种方块都有4种调色板颜色的第四种颜色到底怎么获取。所以我直接无视了其中的第四种暗色,而取用了前面三种颜色。

顺带对于颜色降级的处理,抖动算法可以解决颜色降级的问题,也就是,如果我们把真彩色(16777216色)降级为调色板颜色,我们如何通过仿色来还原最终的效果,这里请看下面的资料:
https://en.wikipedia.org/wiki/Ordered_dithering
https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dithering

最后,我会放出整个程序的源码和bin,欢迎大家下载。
MapPaintGen.zip (767.93 KB, 下载次数: 31, 售价: 1 个宅币)

本帖被以下淘专辑推荐:

0

主题

3

帖子

19

积分

用户组: 初·技术宅

UID
2280
精华
0
威望
0 点
宅币
16 个
贡献
0 次
宅之契约
0 份
在线时间
1 小时
注册时间
2017-2-25
发表于 2017-3-1 03:54:11 | 显示全部楼层

0

主题

4

帖子

39

积分

用户组: 初·技术宅

UID
2214
精华
0
威望
0 点
宅币
35 个
贡献
0 次
宅之契约
0 份
在线时间
4 小时
注册时间
2017-2-5
发表于 2017-3-1 10:00:15 | 显示全部楼层
感谢楼主~
回复

使用道具 举报

0

主题

1

帖子

21

积分

用户组: 初·技术宅

UID
3506
精华
0
威望
2 点
宅币
16 个
贡献
0 次
宅之契约
0 份
在线时间
1 小时
注册时间
2018-2-27
发表于 2018-3-4 17:53:45 | 显示全部楼层
好东西mark了

1008

主题

2235

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
200
威望
265 点
宅币
16762 个
贡献
33386 次
宅之契约
0 份
在线时间
1598 小时
注册时间
2014-1-26
 楼主| 发表于 2018-3-5 16:09:50 | 显示全部楼层
更新了一下,解决持续的“上坡”或“下坡”带来的突破高度限制的问题,以及水方块到处乱流的问题。

因为建造高度的限制是256格,而如果有一列像素它使用的方块总是“上坡”或者“下坡”的话,有时候就会超出边界。

以前的做法是用一个对话框提示一下,如果没被点“取消”的话,它就继续生成命令出来了——比如/setblock 0 777 0这种Y值严重超标的命令,导致设置方块失败的问题。

解决办法是,当一个方块因为“上坡”或者“下坡”超出了边界的话,那就往前逆推,伺机上下调整前面的整体的方块,来保证在画面不会变化的情况下,通过让前面的“上坡”或者“下坡”由1格变为多格,来空出高度。

而如果得不到调整的机会——比如前面整体全都在“上坡”或者“下坡”,持续爬升256格或者降低256格,没有转折的话,那就干脆制造几个颜色不对但不起眼的像素,来“破罐子破摔”、无视高度重新生成方块。这样会产生几个亮度错误的方块,但开了抖动的话就看不出来了。

此外水流的问题,我是用/fill命令把水方块周围用特定方块(可以修改的,默认是glass 0)围起来,不让水乱流。这个选项可以关掉。此外,在“平坦调色板”模式下你不需要把水方块围起来——除非你设置的初始Y较高,然后不喜欢水一直往下流。

这个修复过的版本是有个版本号的,1.0.0.2。

啥时候有空了我把它改成能自动生成mca文件的。

25

主题

86

帖子

1157

积分

用户组: 版主

UID
1821
精华
6
威望
57 点
宅币
891 个
贡献
36 次
宅之契约
0 份
在线时间
204 小时
注册时间
2016-7-12
发表于 2018-3-19 20:33:01 | 显示全部楼层
让数据维持在区间[a,b]
a + (b - a) / 2 + (b - a) * (数据 - 数据中值) / (数据中最大值 - 数据中最小值)
计算机中求区间中值经常用 a + (b - a) / 2 而不是 (a + b) / 2的方式 因为后者溢出几率高很多
这样就可以让方块维持在[0,255]了

1008

主题

2235

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
200
威望
265 点
宅币
16762 个
贡献
33386 次
宅之契约
0 份
在线时间
1598 小时
注册时间
2014-1-26
 楼主| 发表于 2018-3-20 10:19:45 | 显示全部楼层
Ayala 发表于 2018-3-19 20:33
让数据维持在区间[a,b]
a + (b - a) / 2 + (b - a) * (数据 - 数据中值) / (数据中最大值 - 数据中最小值) ...

这里地图画的“坡度”的数据是不能用简单的插值方式来压缩高度的。它的+1和-1的过程就是定死的。你可以把+1改成+2、+3、+4、+255等,或者把-1改成-2、-3、-4、-255等。因为Y值的高度+1会让颜色变亮,-1会让颜色亮度变暗。所以如果使用了插值的话,一整条纵列都会有几个颜色异常的像素,影响较大。

25

主题

86

帖子

1157

积分

用户组: 版主

UID
1821
精华
6
威望
57 点
宅币
891 个
贡献
36 次
宅之契约
0 份
在线时间
204 小时
注册时间
2016-7-12
发表于 2018-3-21 19:44:32 | 显示全部楼层
本身就是有损压缩 不过这样可以让曲线变得平滑一些 这应该属于基本的投影问题 +1、+2、+3、+4、+255 转换成 + fix(1 * 梯度),+fix(2 * 梯度)、+fix(3 * 梯度)、+fix(4 * 梯度)、+fix(255 * 梯度) 两种不同做法有不同的效果 好比一幅画,其中有几个部分浸了水 还是整幅画均匀的漂洗了下

0

主题

14

帖子

45

积分

用户组: 初·技术宅

UID
3807
精华
0
威望
2 点
宅币
27 个
贡献
0 次
宅之契约
0 份
在线时间
3 小时
注册时间
2018-5-5
发表于 2018-5-6 07:24:41 | 显示全部楼层
我的世界吗.看到像素样的游戏界面,头痛

0

主题

2

帖子

14

积分

用户组: 初·技术宅

UID
4195
精华
0
威望
0 点
宅币
12 个
贡献
0 次
宅之契约
0 份
在线时间
1 小时
注册时间
2018-8-21
发表于 2018-8-21 17:18:44 | 显示全部楼层
真的厉害啊,我们这些肥宅看呆了

8

主题

36

帖子

336

积分

用户组: 中·技术宅

UID
3517
精华
0
威望
0 点
宅币
293 个
贡献
7 次
宅之契约
0 份
在线时间
49 小时
注册时间
2018-3-2
发表于 2018-8-22 13:02:33 | 显示全部楼层
本帖最后由 套路 于 2018-8-22 13:07 编辑

然而1.13羊毛声明颜色的方法不一样了
QQ浏览器截图20180822130158.png

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2018-11-21 16:13 , Processed in 0.093096 second(s), 19 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表