技术宅的结界

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

QQ登录

只需一步,快速开始

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

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

[复制链接]

995

主题

2207

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
197
威望
261 点
宅币
16461 个
贡献
32335 次
宅之契约
0 份
在线时间
1565 小时
注册时间
2014-1-26
发表于 2016-9-19 04:59:51 | 显示全部楼层 |阅读模式

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

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

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

矩阵抖动
matrix.png

扩散抖动
floyd.png

无抖动:
nodither.png

原图:
9!.png

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

首先图像已经是16色了(之前用PS处理了一下),而且是MC羊毛色的调色板,直接用PictureBox的Point方法对指定点取色,然后直接判断颜色号是不是对应颜色就能判断出对应羊毛方块的方块数据。
然后就是要尽可能减少指令的条数,不过这方面我没怎么管,我直接用了最简单的RLE算法对指令进行压缩——其实就是判断在同一行的像素是不是颜色一样的,是的话用fill命令直接填充,不是的话用setblock来设置单独的方块。
因为是一次性工程我没写注释,毕竟也是小工程,一次性的。
20160919045802.png
生成命令后要考虑的下一件事情就是如何把命令输入进游戏控制台,我可不想手打,两千多条命令的话,还是算了吧。。
那就自动发送命令。试过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窗口了。。
pix.png
另外就是发送命令的时机,如果你点下按钮的一瞬间它就开始发送命令的话,所有的字符都会被发到你自己的这个窗口里,用户根本来不及把焦点切换到MC窗口。所以应该设置一个倒计时,在倒计时后启动发送任务。
这个倒计时的动画效果我是用了Timer,它只负责做两件事:更新按钮上的倒计时文本;判断是否已经到时,是的话,关掉Timer自身,然后开始发送命令。这样就可以点了按钮后,再在倒计时的时间内选中MC窗口就行了。

9.png
⑨.png

最后放上源码和存档。
VB6源码: mcfillwool.7z (12.41 KB, 下载次数: 34)

本帖被以下淘专辑推荐:

0

主题

2

帖子

7

积分

用户组: 初·技术宅

UID
2312
精华
0
威望
2 点
宅币
1 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2017-3-8
发表于 2017-3-8 18:36:37 | 显示全部楼层
谢谢,我需要多学习!

1

主题

3

帖子

19

积分

用户组: 初·技术宅

UID
2320
精华
0
威望
1 点
宅币
16 个
贡献
0 次
宅之契约
0 份
在线时间
2 小时
注册时间
2017-3-11
发表于 2017-3-11 10:51:47 | 显示全部楼层
学习了!谢谢

0

主题

52

帖子

124

积分

用户组: 小·技术宅

UID
1291
精华
0
威望
2 点
宅币
67 个
贡献
1 次
宅之契约
0 份
在线时间
1 小时
注册时间
2015-11-25
发表于 2017-3-22 20:30:49 | 显示全部楼层
回复

使用道具 举报

2

主题

62

帖子

413

积分

用户组: 中·技术宅

UID
2364
精华
0
威望
0 点
宅币
351 个
贡献
0 次
宅之契约
0 份
在线时间
49 小时
注册时间
2017-3-30
发表于 2017-4-17 03:14:49 | 显示全部楼层
MC我的世界

0

主题

15

帖子

27

积分

用户组: 初·技术宅

UID
2664
精华
0
威望
0 点
宅币
12 个
贡献
0 次
宅之契约
0 份
在线时间
2 小时
注册时间
2017-7-8
发表于 2017-7-24 07:01:32 | 显示全部楼层
好东西,顶顶学习一下.

0

主题

15

帖子

27

积分

用户组: 初·技术宅

UID
2664
精华
0
威望
0 点
宅币
12 个
贡献
0 次
宅之契约
0 份
在线时间
2 小时
注册时间
2017-7-8
发表于 2017-7-24 07:01:48 | 显示全部楼层
好东西,顶顶学习一下.

0

主题

1

帖子

9

积分

用户组: 初·技术宅

UID
2739
精华
0
威望
0 点
宅币
8 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2017-7-30
发表于 2017-7-30 17:53:09 | 显示全部楼层
拿走了。。。
回复

使用道具 举报

1

主题

15

帖子

15

积分

用户组: 初·技术宅

UID
2735
精华
0
威望
0 点
宅币
0 个
贡献
0 次
宅之契约
0 份
在线时间
6 小时
注册时间
2017-7-28
发表于 2017-10-8 20:25:48 | 显示全部楼层
好东西,顶顶学习一下.

0

主题

5

帖子

17

积分

用户组: 初·技术宅

UID
2944
精华
0
威望
1 点
宅币
9 个
贡献
1 次
宅之契约
0 份
在线时间
0 小时
注册时间
2017-10-11
发表于 2017-10-11 22:11:40 | 显示全部楼层
【VB】自己动手编程,将像素画导入到Minecraft世界!

1

主题

15

帖子

15

积分

用户组: 初·技术宅

UID
2735
精华
0
威望
0 点
宅币
0 个
贡献
0 次
宅之契约
0 份
在线时间
6 小时
注册时间
2017-7-28
发表于 2017-10-16 12:27:58 | 显示全部楼层

感谢大神,在此学习了。

0

主题

1

帖子

9

积分

用户组: 初·技术宅

UID
3140
精华
0
威望
0 点
宅币
8 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2017-11-27
发表于 2017-11-27 10:57:36 | 显示全部楼层
666666666666666666

0

主题

1

帖子

9

积分

用户组: 初·技术宅

UID
3400
精华
0
威望
0 点
宅币
8 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-1-27
发表于 2018-1-27 13:07:29 | 显示全部楼层
nice,学习了

0

主题

2

帖子

14

积分

用户组: 初·技术宅

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

本版积分规则

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

GMT+8, 2018-9-20 09:35 , Processed in 0.130279 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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