0xAA55 发表于 2016-9-19 04:59:51

【VB】自己动手编程,将像素画导入到Minecraft世界!

本来想解析Anvil存档格式,然后将方块数据写进去的,但那样不好玩。我这个其实是靠生成控制台命令来将图像数据写进去的。
图像需要先经过处理,从真彩色降级到4位索引色(16色),并使用Minecraft的羊毛的颜色作为颜色表。
这个过程可以应用抖动算法,但我试过了,效果不理想:

矩阵抖动:


扩散抖动:


无抖动:


原图:


仔细对比了三张图后,我选择了不使用抖动算法的图。
然后我直接将图Copy到PictureBox,添加几个控件,决定开始“一次性工程”。


首先图像已经是16色了(之前用PS处理了一下),而且是MC羊毛色的调色板,直接用PictureBox的Point方法对指定点取色,然后直接判断颜色号是不是对应颜色就能判断出对应羊毛方块的方块数据。
然后就是要尽可能减少指令的条数,不过这方面我没怎么管,我直接用了最简单的RLE算法对指令进行压缩——其实就是判断在同一行的像素是不是颜色一样的,是的话用fill命令直接填充,不是的话用setblock来设置单独的方块。
因为是一次性工程我没写注释,毕竟也是小工程,一次性的。

生成命令后要考虑的下一件事情就是如何把命令输入进游戏控制台,我可不想手打,两千多条命令的话,还是算了吧。。
那就自动发送命令。试过VB6的sendkeys,这东西能发送命令没错,但它不能打开命令窗口,你用sendkeys发送“/”或者“t”给MC窗口,并没有任何效果(一开始我试的时候是直接用sendkeys发送两千条命令给MC窗口,结果突然鼠标动不了了,我这4核8线I7 6700K的CPU,使用率爆满,全部核心都100%使用率……于是我添加了检测Esc键的代码,按下Esc后退出循环)。因此我们需要用别的方法来打开命令窗口,我选的方法是用keybd_event模拟“t”键被按下,然后再模拟“t”键弹起,以此来打开命令窗口。实测有效。然后我再用sendkeys发送命令内容的时候,它好像只能接收后半部分的命令,估计是t键松开后还要再等一段时间才能发送命令。所以为了调整这个等的时间,我调试了很多次,最后发现在调用了API——Sleep(100)后来个DoEvents(),然后再sendkeys就没问题了。用sendkeys的时候,可以顺带把回车加上去,用vbCr做回车就行(不要用vbCrLf,不然调试的时候我不知道为啥手上突然就多了好几组烈焰人刷怪蛋……)。在sendkeys后,还需要再延迟200毫秒,然后再DoEvents(),此时发送命令有了75%的成功率。。最后在循环结尾再来个Sleep(100)就行了。此时它速度已经变得相当慢(和某音乐的节奏同步了哈),但已经能很好地发送命令给MC窗口了。。

另外就是发送命令的时机,如果你点下按钮的一瞬间它就开始发送命令的话,所有的字符都会被发到你自己的这个窗口里,用户根本来不及把焦点切换到MC窗口。所以应该设置一个倒计时,在倒计时后启动发送任务。
这个倒计时的动画效果我是用了Timer,它只负责做两件事:更新按钮上的倒计时文本;判断是否已经到时,是的话,关掉Timer自身,然后开始发送命令。这样就可以点了按钮后,再在倒计时的时间内选中MC窗口就行了。




最后放上源码和存档。
VB6源码:
校验信息:
名称: mcfillwool.7z
大小: 12707 字节
SHA256: 141D82FC6EBA07BB8DD9121A413C79C50DE6D8E00A0BED074DAD17185AD330EC

游戏存档请回帖后下载。**** Hidden Message *****

演示视频:http://www.bilibili.com/video/av6338232/

hyr191 发表于 2017-3-8 18:36:37

谢谢,我需要多学习!

leptonic 发表于 2017-3-11 10:51:47

学习了!谢谢

besteast 发表于 2017-3-22 20:30:49

:lol:lol:lol:lol:lol:lol

bigwind 发表于 2017-4-17 03:14:49

MC我的世界

oshi 发表于 2017-7-24 07:01:32

好东西,顶顶学习一下.

oshi 发表于 2017-7-24 07:01:48

好东西,顶顶学习一下.

吴础霖 发表于 2017-7-30 17:53:09

拿走了。。。

cxx 发表于 2017-10-8 20:25:48

好东西,顶顶学习一下.

plugin 发表于 2017-10-11 22:11:40

【VB】自己动手编程,将像素画导入到Minecraft世界!

cxx 发表于 2017-10-16 12:27:58


感谢大神,在此学习了。

Pnox 发表于 2017-11-27 10:57:36

666666666666666666

SBBBB 发表于 2018-1-27 13:07:29

nice,学习了

Alter 发表于 2018-8-21 17:20:10

真的厉害啊,我们这些肥宅看呆了

hxin123456 发表于 2020-4-3 21:23:31

看看学习下

大宝 发表于 2020-7-8 10:16:16

本帖最后由 china_shy_wzb 于 2020-7-20 13:55 编辑

学习一下

PandababyXX 发表于 2022-1-2 13:40:24

就想问下楼主 你这个图片 脚本运行了多久

xman2000 发表于 2023-3-9 05:54:35

看看学习下

gujin163 发表于 2023-3-14 10:00:35


感谢楼主分享。
页: [1]
查看完整版本: 【VB】自己动手编程,将像素画导入到Minecraft世界!