欢迎光临散文网 会员登陆 & 注册

Java,编程与Mod

2021-06-24 23:36 作者:道家深湖  | 我要投稿

我需要学会Java/编程才能写mod吗?

我要学到什么程度才能写mod?

因人而异,没有统一的答案。

又有人在我的群问到了这类问题,我便写文以免重复说同样的话。

每个人心中都有自己的mod设计,不同的mod设计实现难度不同。此外,每个人的知识水平也不同,有的人会英语,有的人不会。诸如此类的问题决定了学习mod必得因材施教,指望靠一份Harbinger网络教程或者一本《我的世界模组开发指南》满足所有人的学习需求根本不切实际。不论老师的门槛放的多低,总有人够不到;“你所浪费的今天,是别人无法奢求的明天”。

那么,如何知道你到了何种层次,需要学什么呢?我们先从一个比较通俗的比方看起。

有这样一串数:

1,1,2,3,5,8,13,21,……

请问这一串数中的第255项是多少?

在做mod的时候经常会遇到问题而卡住,而解决问题的过程……我们就用解决上述问题的过程来举例子吧。

如果你的数学在小学奥数、或者正常初/高中理科数学的水平,你应该能看出这串数的规律:从第三项开始,每一项都是前两项的和。即:A+B=C, B+C=D, C+D=E,以此类推。

此外,如果你见多识广,你应该记得这叫斐波那契数列(Fibonacci sequence)。这个词我在小学就听说过了,那时候我们戏称它为“肥不拉几数列”。当然,我的读者里也有人不知道。

本文就是因为这句话才写的

诸位就算记不住这数列名字,或者没看出这规律,也没什么好羞愧的。人总有不知道的东西,不同地区教育资源质量不同,更何况一个小学生不知道大学知识,那只是因为他还没到那个阶段而已,未来不一定谁懂得多呢。你知道我的生日是哪天吗?我知道,但这也没啥好自豪的,对吧。

诸位就算知道这规律……也没什么好自豪的。

很多人都知道这数列可以靠循环做加法计算,却不知道这数列有一个通项公式,可以直接算出第N项,而无需计算中间步骤。

对,就是那个里面有黄金分割率的公式,忘了的话用不动点法解个方程组就能求出来具体的系数。你知道我在说什么吗?知不知道都无所谓,因为就算不知道这个,也能用编程的手段计算足够多的数列项目了。

我不是来讲数学的,更何况我数学烂的一批,没有资格跟别人讲。对,我数学很烂,如果有我其他学科的平均水平我差不多就进清北了。

好了,回到这个数列问题。如何求解它的第255项呢?

既然已经看出来了规律,只要足够有耐心,我们直接手动计算就行了。加到天荒地老,总能加出来,反正只是简单的整数加法。笔算嫌累的话,我们还有计算器。

然而,这并不是最好的方法。如果你会计算机编程,你应该能轻易地写一个程序计算出来。不管是第255项,还是第2555项,使用的程序都是一样的,计算时间也不会差太多,都在一秒之内。如果你做不到,那么,你需要去学编程。

编程不一定是Java。

举例来说,我在小学六年级的时候学习了Logo语言,初中学习了一点VB,上大一的时候学习了C、C++,大三时学了一点基于Unity的C#,工作后花了两天速成学习Lua,接触做mod后稍微学了一点Java。

这些都是编程语言。他们使用的思想有一大块是共同的,还有一大块(面向对象)是一半语言共同、另一半语言所没有的。它们的语法不太一样,以及有一些小特性有区别,但最基础的思想是共同的。用这些语言去解决上述的斐波那契数列问题,写出来的代码长得不同但都是一个意思。

现在,请你用Python/Java写程序解决该问题。

如果你发现你恰好不会这两种语言,但可以用其他语言做到,你就意识到Java和编程的区别了。Java只是编程形式之一。

另外,学会Java语法和学会Java编程也是两码事。学会了java的for循环、while循环、if语句后,不见得每个人都能求解上述问题。

上述问题算是编程里入门级的题了,可能有的人不理解为啥做不出来,那我再举一个复杂点的例子吧。

1 1 3 2 5 3 7 4 9 5...

这个数列的规律是:1、3、5、7、9…… 和 1、2、3、4、5……交叉在一起,请编程输出它的前100项。

这个就需要结合if和循环语句来写。虽然不用if也不是不行,但使用if算是比较自然的想法。即使都用if,不同人写出来的也会有所不同。有的人会分别计算50项,都算好后轮流输出;有的人会一边输出一边判断下一个到底是奇数还是偶数,从而输出对应的结果。

好,如果你能看懂上述内容,你应该对编程有了初步认识了。我们继续讨论Mod的话题。

Mod制作难度的深湖分级法:

  • 【普通级·能抄】能听懂话,能抄下来代码就行。深湖示范求解第100项斐波那契数列的代码,你抄下来之后知道改哪能变成求解第255项,但是要求解一个别的数列就不会了。有时候也叫“入门级”。

  • 【专家级·能写】自己会写代码解决斐波那契数列这样的问题,以及更多更复杂的问题,看到一个数列知道如何转化成计算代码。可以借助百度等工具和翻阅其他人的代码,这也算达到了专家级。

  • 【大师级·能调】能发现并解决底层代码带来的问题。举例来说,你发现Java的整数太短(32位整数只能存到2的31次方左右),在计算第21亿亿亿亿亿亿亿亿亿亿项的时候,本来好使的程序就不好使了。你研究了一阵后,设计了一个方法,解决这个问题,这就是大师级。

需要注意的是,很多东西在实际制作之前并不能看出是否为专家级。

比如,在1.12.2里,“把一个音频的音调抬高到4倍播放”、“让两把铁锄合成为一把铁镐”,看起来非常简单,似乎是普通级,但我实际做了才发现是大师级。

前者是因为MC的底层音效系统会把音调系数截取到[0.5, 2.0]之间,“4”的输入系数无效,会被强制变为2。后者是因为MC自带一个抽象配方,两把铁锄徒手合成会变成一把新的铁锄,你试图加入的配方会被这个抽象配方覆盖掉。

这种事情在实际制作之前,如果你没有听前辈说过,几乎不可能发现原本的方法突然不好使了,往往需要慢慢研究为什么以及怎么办。这就像原本你在使用牛顿力学计算问题,突然发现公式在某些情况下失效了,然后自己研究出了相对论和量子力学。嗯,这就是大师级。

Harbinger和土球球的书都是专家级教程。它们默认读者有基本的编程知识,知道根据例子如何发挥。我看这俩教程的时候觉得没什么问题,但有些人评论说,看得就像天书一样。

我的《边睡觉边开发Mod》系列视频则是普通级,在做的时候都是按照普通级难度设计,只能做一些很简单的效果,但是门槛极低。如果说有什么门槛,基本上都是在部署开发环境上。

当某人提出了一个设计却不知如何制作的时候,深湖往往会给出一个评论“这是普通级”“这是专家级”,并且会对不会编程而试图作专家级需求的人进行劝退。

毕竟,学编程没那么容易。回顾一下你当年学习微积分或者三角函数的过程——或者随便什么数学课的过程,这玩意很抽象,掌握它并不是人类生物本能,是后天努力学习和理解的成果。

并且,这过程往往挺费劲的,如果只是为了心血来潮或者业余爱好,为啥不找点乐子,而是花费一个月给自己补习?如果你真的想学,那当然也好。加油吧,别半途而废。

去哪学?

如果你以前学会了其他面向对象型编程语言,直接去菜鸟教程学习Java语法就得。

如果你不会编程……我的天,你需要依次学习编程、Java和Mod。去B站搜“Java教程”,然后随便找个播放量高的看看吧。祝你好运。

学多少?

知道if、循环语句怎么写,知道什么叫函数(方法),知道什么叫字符串、数组,知道父类子类、多态是个什么以及怎么写。这就是最低限度了。遇到什么不会可以再抱佛脚,直到你觉得差不多了为止。

思考题:

请写出以下数列的第100项:

1,4,2,7,1,5,3,9,235,1024,... ...


Java,编程与Mod的评论 (共 条)

分享到微博请遵守国家法律