• 聊天版
  • 通过Ren'py入门Python是否可行,以及从哪里入门编程比较好? #2038

如题,我之前从未敲过代码(除了Clickteam Fusion系列的那点可视化游戏编程,会点皮毛而已,而且连个滚动条都不会加了),但是我觉得好歹得学一招。

我除了《心跳文学部》之外还很喜欢玩马里奥系列游戏(请不要再把Mario翻译成“玛丽”!),并且喜欢为我最爱玩的《新超级马里奥兄弟Wii》制作自制关卡或者修改其他内容。而游戏修改工具大部分都是拿Python编写的并开源在Github上。出于兴趣我想试着入编程的坑,说不准哪一天我也能给DDLC写一个漂亮的好结局Mod出来,正如莫妮卡说“这个游戏不愿意给我一个好结局,所以我亲自动手”。顺便入门一种编程语言,给那些修改工具增加功能,亲自改bug(而不是提出issue坐等大佬修)就更好了。还能顺便把命令行操作和Git操作研究下。之前注册个DN42网络必须用命令行,被Git各种情况搞得一头雾水,反复删库重下push推送,像个小白一样。

技多不压身嘛,听说有不少人希望Python纳入高考……可以看出它确实很强大。

不过话说回来,任天堂Wii软件底层貌似是PowerPC的,想要实现游戏内核级的修改,可能得研究C艹。但是听说C艹很难,而Python相对来说简单点。Python我一开始也摸不着头脑,之前用的最多的就是把那些开发版软件的源代码下载下来,然后编译成Windows的可执行文件,因为直接执行似乎总是不成功。

pip install pyinstaller

pyinstaller reggie.py(mod工具的名字)

就会这两句,现在一把梭成功了,之前不知道怎么搞的,两条命令都搞不定,被自己蠢哭(笑),然后看着大佬们改MAS的bug的时候,满屏幕的代码,感觉好高大上。

另外下点东西真不容易啊,电信下国外快卡炸了,好在现在我初步实现上网自由,不用被网络问题引起的失败而头疼了。(例如编译Openwrt路由器固件源代码,需要下一大堆东西,国内网总是下不动而error)

Act1结尾,莫妮卡删除纱世里的文件时,游戏弹出那个traceback报错,和我运行某些py程序失败的报错一个格式,我觉得有必要把这玩意研究下了。

(这是真崩了,把游戏文件拆包,放在根目录就无法启动,挪走就好。不是莫妮卡干的)

如果Ren'py和Python我都要,那么应该先从哪入门比较好?

我觉得我如果会python了,第一个项目就是从某个文件中加载诗歌,并且像游戏中那样播放音效,显示在电脑屏幕上的示例,方便自己写了诗,打包分享给别人啥的?随便玩玩,图中这个是用Clickteam Fusion花了十几分钟瞎搞的,搞好了我会把工程文件开源。

“我给你写了一首EXE格式的诗(发送文件),拿电脑点开看看吧,没有病毒的哦”

    快来注册!

    *即使不注册, DCC也会展示所有知识性和分享内容

    #2 8天67t9 这个我稍微看过一点,但是目前还不知道Ren'Py和Python的语法是否完全一致,怕两边不一样造成一些错误。

      通过Ren'Py入门Python是可行的,但我不建议你这样开始。我会把这个入门渠道打分为“及格”。如果你想在Python上有所建树,最好不要从Ren'Py开始。

      Ren'Py运行的就是Python的代码——你通读过Ren'Py的底层吗?可以去读,它是开源的。虽然Ren'Py有一套自己的语法,或者说自己的脚本,但是说到底它还是Python.

      最后,我要说的是,你为什么要学习Python?你真的想明白自己的开发方向了吗?Python这低贱的语言,怎敢与C系相提并论?你想做什么,说明白一些。说明白以后我才能推荐你学什么。

      打赏

      • 20 分 来自: Sir.P
        评论: 好!

        #5 NingActually 为何说Python“低贱”呢,我看它还挺火的,而c系据说很难,因此被调侃,比如那个21天学c++,然后穿越回过去咔嚓当时的自己的梗图。

        我觉得我可以把对ddlc的兴趣利用在这上面,因为我到目前为止完全不会敲代码,觉得好歹入门一门编程语言才行,虽然到底学哪个也不确定,但是Python应该是相对简单的吧?而且我接触过好几次,想入门试试。而且弄不好还要在评论区掀起腥风血雨(XXX大佬说自己学的XXX语言不好,YYY才好,YYY 大佬又说这玩意不是给人看的,推荐小白去学ZZZ……然后吵翻天了,只留下小白楼主原地瑟瑟发抖)

        #5 NingActually 只能说可能大部分人更倾向于学个大概,有个感觉就行,没有那么多想要深入的想法。
        而Python也如你以前所说的那样,确实简单,也确实适合初学者去了解编程这个概念,虽然当要深入的时候就要开始考虑去学习其他语言了,我想这些就是后话了。


        闲话几句:
        这让我想到我小时候不懂音标,不会读英语的时候用的方法——用中文来替代,比如说Bus是八四,Water是沃特,Panda是潘der等...
        这些中文谐音看起来如此低劣,但却让我度过了最初那贫弱的英语口语环境,后期的学习让我现在不看音标也能读出个七七八八来。现在自然也抛弃了这样的谐音方式来纠正读法。
        说它不好吗?当然,实际上是一种错误的学习方式,中文谐音不一定能标正确,更别说还有各种“口音”,但这确实多多少少帮助我入门口语了,成长之后自然就抛弃了这样的做法。再回到这里,我想两件事都有一个共同点——关键还是要看一个人愿不愿意提升自己

          #7 涂梦良丶 不不不这口音一点也不低劣,语言是拿来交流的,对方能听得懂就OK,不需要特别追求完美。关于那样标注方便理解的问题,日语里面的片假名都是日本人把外来语音译+自己缩写的产物,比如电视叫テレビ(terebi),这不就相当于空耳嘛,我小时候也干过类似的事,英语老师看到会狠狠吐槽半天,然而这在日本却很常见。

          就不说外语了,中文里面一大堆语法,考试考的挺难,甚至汉语母语者去做也不一定能全对,但是日常能用的上哪些?只要词义接近,基本都能听懂,就比如一个老外问“我该怎么办?”,说成“我该如何办?”,也不影响我们理解一样。而且词语的意思是会改变的,比如“独乐乐不如众乐乐”一开始是说音乐的,因为多音字问题,现在衍生出新的含义,也不能算错。还有“呵呵”这个词,互联网刚出现那会是表示微笑,现在是阴阳怪气。

          很多人就是看到外语初学者哪个语法/单词说错了,就装出一副高大上的样子,非得把人奚落到怀疑人生才肯闭嘴,学语言得离这种人远远的,影响自信心。当地人都没说什么,还轮得到那些门外汉来颐指气使,那太扯淡了。就按照感觉来,说的多了找到感觉了,自然就把口语水平练上去了。

          居然扯到文学上了,啊哈哈,果然是文学部啊。

          关于编程的问题,我觉得好歹有个基础,至少知道一些常识才行,什么变量字符串之类的。问起来也知道,不会犯最最基本的错误就行,至于精通与否,那得看个人了。

          像网络方面,复杂的什么二层三层交换机,VLAN就不说了,基础的有IP地址,DHCP协议,DNS,子网,不管咋样小白都得会一点,要不然新买个路由器都不知道怎么换,为什么上网的必须是WAN口,之类的。某电脑制造商官方把关闭Windows自动更新的软件卖几十块钱,还有大量小白购买,殊不知对于有点电脑基础的人来说,就是组策略里面改两处设置的问题。所以我觉得编程同理,我就是怕Python 和Ren`Py的某些语法不一样,然后我先入为主养成坏习惯,就不好改了。

            #8 SayoriMyLove

            #8 SayoriMyLove 不不不这口音一点也不低劣

            不是口音低劣,而是用这种方式应付口语的方式真的是不行的,要去找其他方法对比才行,就像对比音标之后就知道这种标法太过于野蛮了。我推测如果我死守在这种方法下,估计一辈子也做不到看到英语单词后,就大概了解一点点关于这个单词能怎么读的这种情况。

            就像学了一个编程语言之后就守死一个编程语言,根本没有机会看到其他编程语言的优势所在,又或是被这种编程语言带的太偏,在学其他编程语言的时候始终觉得困难就放弃。
            估计还是最后那句话,要看愿不愿意精进自己了。

            #8 SayoriMyLove 我就是怕Python 和Ren`Py的某些语法不一样

            我去问了问,有朋友跟我说:学了Python后死守在这个编程语言真的不太好,会容易带偏,对未来精进自己有阻碍,因为Simple。但确实适合初学者入门了解编程这个概念,因为Easy。

            20 天 后

            #1 SayoriMyLove 我是会一些python的,按我的感觉是不大建议,renpy的代码格式和python其实有很大差别,至少和python2有很大差别,它基于python之上新建了很多语法,比如以下语句是所有角色对话都要用的语句

            但是这个在python2的解释器里直接报错了()所以我担心按照ddlcmod的源代码来学习这个容易导致用那些比较方便的语法用惯了之后有误导效果,干扰你以后正常编程()

            如果想要系统学习python编程的话,推荐一本书,《python项目案列开发从入门到实战》(这是我目前看到的最适合新人入门的书,且非常全面,想做简单的开发的话这个书的内容几乎覆盖一切需要的了)

            (顺便一提,因为renpy代码的新格式,我这个python编程爱好者看blue skies的代码还被搞晕了半天…最后好不容易才看懂)

            #10 群阿巴阿巴 哈哈这个后遗症现在有时还折磨我,不过我是同时学python和java(java也不能忘分号…)我问题不是java忘分号,是给python语句加分号()

            #5 NingActually emmmmm,各有所长吧,我有个很厉害的朋友,他是c和python的大佬,不过他也觉得python比起c有很多好处,比如效率高,方便,确实c在硬件领域的地位无可匹敌,效率太高了,但写ai这样超高难度的算法的话用c这样的语言还是挺难受的,或者你只是做个计算器,没必要用c追求绝对效率,那么python也是个更好的选择

            我们要先说明计算机语言的一个基本哲理:抽象,提升编写速度,降低运行速度。此处抽象的含义与其本义一致:从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。


            计算机语言差不多可以分为三级,从底层到高层依次是机器语言、汇编语言、高级语言。什么叫底层?底层就是抽象程度低,高层就是抽象程度高。

            机器语言差不多长这个样子:

            100011001010101111100111110000011100111110011

            这一级几乎是没有经过任何抽象的。机器语言仅仅只是将“开”和“关”转化成了1和0. 可以说机器语言根本就不具有阅读意义。但是,机器语言是仅有的、可以被机器直接理解的形式,其余任何形式——比如汇编语言和高级语言——都是要经过转化,或者说解释的。这就意味着机器语言的执行无比之快。

            汇编语言抽象的程度更高,它长这个样子:

            S_T:
                MOV AX,C_S
                MOV DS,AX
                LEA DX,P_S
                MOV AH,9
                INT 21H

            虽然对于现代的很多程序员来讲,这种写法或多或少还是令人费解的,但它终于有规律可循了——但它也同时有代价。万事万物,都有代价。此处说的不只是计算机语言,说的是这个世界的任何东西。汇编语言虽然提升了可读性,但是它不是机器能直接理解的形式,它需要经过一次转化。

            高级语言,是很多人现在最主要接触,乃至唯一接触的语言,C、Python、Java、Rust,你现在能听到的语言基本都是高级语言。以一个很多人都很熟悉的C++程序为例,高级语言长这个样子:

            #include <iostream>
            int main(void)
            {
                std::cout<<"Hello World!"<<std::endl;
            
                return 0;
            }

            比起汇编语言,高级语言显然又“有人文色彩”了不少,事实上高级语言也往往确实比汇编语言更好理解。但是,当然,这是有代价的。比起汇编语言,它又进行了一次抽象,它需要更多转化才能让计算机执行。

            这就是计算机语言的基本哲理:抽象,提升编写速度,降低运行速度。你提升了可读性,你往往要降低运行性。
            高级语言之间的抽象程度不一样,C的抽象程度低于Python的抽象程度——这是C比Python困难的一大原因,这是Python比C运行速度低的一大原因,而我现在要问的是,Python带来的抽象程度和Python带来的执行效率降低相比,值不值得?

            我们活在这样一个时代——一个计算机性能过剩的时代:除去少数优化声名狼藉以至于天下人皆知的游戏之外,当你的电脑跑不起某一款游戏时,大家往往会说“快换个显卡吧”、“加个内存条”,而不是说“没办法,游戏优化太烂了”,即使有时候游戏优化确实大有精进之处。大家会因为什么去购买游戏呢?在“游戏优化很好”和“游戏内容很多”之间,大家一般会选择“游戏内容很多”,而后,在“游戏内容很多”的前提下,大家发现它的优化还做得不错,就会将“游戏优化很好”作为添头加上去。不仅是游戏如此,很多常用的APP也是如此。这就是我们的时代。
            我不是说这种时代有错。它没错。我只是说,在这样一种时代之中,追求性能的优先度确凿无疑地下降了,但是它绝对不是无关紧要的。比起C、Java等语言,Python的抽象程度高了一些,难度低了一些,但是性能到底下降了多少?下降得太多了。当然,Python有Cython这样的支流,但是Cython比起C,又抽象了多少,性能变化了多少?这是一个找到平衡的问题,而我给出的平衡答案就是C++这一级的抽象较为可取,Python这一级较为不可取。

            上文说的是C(系)和Python这两种语言的一些本质问题,我们下面再谈谈我为什么坚决反对让新手先学Python.
            Python的很多功能,很多为人称道的“便利性”,或多或少地像是某种甜口毒药。“不要重复实现轮子”的预期之一是术业有专攻,可能甲就是不擅长数据处理,乙就是不擅长UI界面,那么大家互相把自己擅长的东西拿给对方就好,这样才能团结人类的智慧——“不要重复实现轮子”的预期,不是说不要去写已经有过的东西,而是不要白白去写已经有过的东西。Hello World的写法早已不可计数,但新手程序员还是常常会第一个写它,因为这样一个小小的程序包含了“输出”的概念,在有些案例中还会包含“输入”,写它是一个学习的过程。Python有海量的库,这很好,这也很不好,说到这里,大家已经明白为什么它既好又不好了,而且尤其对有上进心的新手不好。让新手大量使用库的最终结果,就是社会上多出了一批脚本小子,而我不喜欢这样。

            最后,我说Python低贱是有个人因素在的。看着Python开发团队将自己当年所讥讽的C系拥有的一些feature重新加回Python,我总是觉得趣味十足又余韵悠长。

            其实我挺好奇你们对微软从VB6到VB.NET的变化的看法

            无人输入