Appearance
我真的想做一个lib库!——长谈我两年半的编程生涯
看着那本《C Primer Plus》,我的内心便十分复杂:两年半了啊!可我还是没有一个LTC的项目,这几年内,我不知道Create New Project了多少次,可却无一个项目能做到让我满意,包括UnlimitedLife这个项目,于是乎,我便想写个长谈,来记录或怀念我的项目,并希望这能鼓励自己,让我用心投入到UnlimitedLife当中。
项目放弃的原因
其实,我大部分项目失败的原因都是因为我设目标设得太远大了,从而丢失了极大部分的细节实现。以及因为我在这种思维能力上的欠缺,从而次次酿出了这种结局,举个例子吧,比如我之前在电脑上用C++做的编程语言C!(C Exclamation),开始写时,我还很高兴,兴致勃勃地做好了字符串转化,块读取,文字解块(decode,指的是我那程序按行为序列并以”,“为分界线切割语句,送往解释),解释器等等,本来那项目还行,做到1500多行代码时都支持变量定义,函数执行,条件与循环这些功能,但因我目标不清晰而最后放弃了该项目。实际上也正因为我目标不清晰让我在其上面摔了许多跤,此如我这语言目前的版本(C!8.0.4,我已经一年多没动这项目了,最新的版本应该是在2021年6月开发的)还存在的令人啼笑皆非的问题——我的程序语言到底是面向谁设计的,是用户,还是编程人员呢?比如out这个函数,其作用是输出一个变量的具体信息,包括其在Vector中的序号(在C!中变量以CeVariable的形式储存于一个vector中,以及它的限制等等......看似这功能还行,给出了变量的具体信息,当然,如果没有我的智障操作,我是不可能提起它的:你要想用out,要么加个修饰关键字OUTTABLE,要么用#pragma提权,否则你是不可能用它的,强行使用会引发权限不足这个错误......我当时还真把编程语言当成了一台脆弱的电脑了啊!连这种东西都要限制......以及我前面整的API:to_real关键字函数,用于连接外部输入与内部机制,但是,它真的太恶心了以至了我整它时重写了百分之十的代码,最后实在重写不动了删掉了这一个设定。拿这个设定举个例子:
js
var a = "123";
var API:to_real(a + "4") = "456";
上述两行垃圾依次定义了"a","1234"两个变量。其中,变量a会做命名审查,而API:to_real则不会。除了上述两个垃圾之外而还有一个东西——extern。看到它名字你是不是想到了导入外部变量?没错!因此我在我的语言里面让其成为global的标识(在我那个语言中,变量如果在一个块中被定义,脱离块时程序会扫描一遍内存并移除块标识过期的变量,变量里的内部数据[不公开。C++内实现,但用out可看到它的值]int depth便是其块标识)。瞧瞧,哦,我的天呐!到底是谁那么聪明给extern下了个如此好的定义,由此看出,我的准备与知识域并不到位,从而导致了我放弃了这个项目。但我这里在说并不代表我会接着做,因为我一想到那项目中过于滥用的Trim函数头就大了,我也并不会不去做,我会计划做一个新的语言:CSF(C++SaFe)。
我的项目观
由于我是一位自由编程者,因此我的目标不是做出个项目(简陋的)便立马发到B站,此如火山哥哥等人在B站发的那种梗杂糅的儿童游戏,我想做的是像GoldenEggs,-FM2-,CodingDaniel那种真正有心的游戏。我做的游戏也不一定要赚到钱,此如如果UnlimitedLife做好了RealWorld:Release1.0,我会发三份,一份到itch.io,价格为0,另两份分别到Steam与EpicGames(如果可以如双平台同发的话),价格为一元,同时给出游戏在itch.io上的免费链接。对我来讲,即使Steam与Epic会抽成一些,加个Steam转卡的国内利润帐单,到我手上时可能一份游戏只赚了1分(不加上itch.io上的捐钱),但那又怎样?我做项目的目的是"Challenge myself,stand up from where you fell."而不是“Fulfil myself,get money from what people tell"。因此,人们看不到我在背后的付出,因为我根本没有在前端上付出很多(除了游戏主界面)。总之,这就是我目前的项目观,挑战自己,做自己能获得快乐的事
我的回忆——所做的项目及编程历史
2019年4月左右,一本书送到了我手中,名叫《C Primer Plus》,这本书真可谓一本好书,简洁的名字中包含了C语言80%的语法及利用知识,不像那些所谓的“xxx从入门到精通”“xx天学会xxx”。由于我对电子知识极感兴趣,因此,再难的书也阻挡不了我看书的道路(尽管那本书写得是真的易懂且C语言本身难度不大(难度:C++ > Java > C >Python),故C语言最后还是被我学进了。由于当时我并不知道怎么装C语言环境且书本的介绍不多(书本上讲了讲Clang与GNU GCC,但没讲怎么下),又因为我上网能力不太行,因此我便也下不了IDE。故C语言仅停留在纸上。到IT课时,发现一个叫Flash的东西,我便在那里看到了第一个可能启蒙我的语言——ActionScript2.0,它的语法类似JavaScript(借鉴了能不像吗?),也很简单,因此我上网查了查便上手了,之后做了很久的actionscript人。由于小学上直升班第一个学期时我选了美术素描社团,第二个学期才转了IT,故第二个学期我才开始力学Actionscript。是个人都能想到,如果我一直学ActionScript那我不是该成为flash小游戏入门人了吗?因此,事情在2020年出现了转机。
2020年,新冠肺炎爆发了,全国推迟了放学,我在家玩电脑的时间也长了,也就是1月左右,我阴差阳错地遇到了Unity并下载了2017.b4版本,开后了我的Unity之路。其实在Unity之前,我发现自己买的书:《Java从入门到精通》(明日科技的书,内容一般,仅作入门的话,也算可以,从其中我了解了面向对象的思想)教了我怎么装环境,我便装了Java,制作了一个真正意义上的 Hello World!
真正意义上的HelloWorld! : Java Hello World!
为什么说真正意义上的呢?因为我之前用as中的trace写过。这个HelloWorld代码极简(虽说Java本身很麻烦orz.),如下:
java
public class Hello{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
之后我javac Hello.java再java Hello,看到了令我震惊的一幕:
txt
Hello World!
然后我尝试改下字符串内容,发现输出变了(不过有一次没变,因为我忘了用javac,后面我直接java xxx.java来避免这种情况。之后,我攻势一转,用了Scanner获取输入并复读(即输出输入内容),最后又转了一次,直接继承class JFrame并做出了一个窗口(因为我当时己学完了Java 60%内容了(基础中的内容)。之后我便按书本安装了Eclipse并用它进行Java学习,这是我第一次接触英文IDE,而JavaEnvironment则是程第一次接触出英文软件,ActionScript是我第一次接触英文的编程语言(指编写)。虽说因为Eclipse是用Java写的,导致用的时候格外卡,但我还是坚持用着(找不到其他IDE),从而学会了些皮毛(较深的内香只有jar2exe与其打包程序为jar)。从用Eclipse开始,我在语法层面知识诸备足,技术方面弱的格局开始移动,也是在Java中我知道了双缓冲并用BufferedImage消除JPanel或Canvas clear后绘图的闪烁。我也知道了多线程,即使我对线程安全毫不关心。之后某一天,我看百度百科看到了cs这个东西。哦!我遇到C#了!我又开始学起了C#,并装了VisualC#6.0(用了静态密钥,唉!现在没有VC#6.0,VC++6.0啦!只有VisualStudio了!)在这之前,我用Java与Eclipse写了一个2D版的沙盒游戏,目的是做出类似我的世界的游戏,最后做了个2D版,取名Minecraft2D,在那个游戏中,我学习到的技术我都砸在了上面,并自己琢磨了地图生成,其地图分为两 层,地面及地表,地面的背景继承自一个类并标识了自己的ID,生成树时判断底下的地图是否为沙子,如果是则不生成,树的绘制我记得折磨了我很久,其原因在于人物到树后会穿模,我记得我应该是没修这个BUG.QAQ.我做好了树的掉落,以及背包,树苗掉落及手特物品。做好后,我用格式工厂的录屏工具录下了它,并上传至了B站,这也就是我的第一个视频。其实我当时抱有些炫耀的心态去上传的,但也要感谢我的上传,让我有了现在的美好回忆!这便是我要缅怀的一个项目:Minecraft2D.
Minecraft2D
视频发出后,其实我也关注了会儿播放量,但其实我又不在乎,因此我便在后两天发出了Minecraft2D-2,在此Minecrat2D告一段落了。此时,地图会生成1024×1024个方格,然而屏幕只显示百分之一不到,因此我让人物可以“推”动图(不同于绑定在角色上的Camera,你得先到地图可视区极端才可以“推”),以及简单的种树及树会长大,还有简单的物品掉落时抖动及放置方块,总之,我自己玩的时候觉得还行,就是单调了一点。之后,我便遇到了C#,并用其.Net框架做了些把戏,之后便是Unity。到了Unty时我的视野域或一下从2D到了3D,我开始学3D了,尽管我一点理论知识都没有,学了会才知道一个三维坐标系。之后我便在学习Uhity中,并从中又做了一个项目:RunGame.这个游戏可谓又注入了我学习Unity的所有知识。
RunGame
不用想,由于有了3D发展空间,我自然想做个Minecraft,结果最后仅是做出了个RunGame,其以跑酷为去,生成用Pefab叠出的关卡,后面被我整得还支持播放视频(由于Unity特性,2017仅支持Webm视频在打包后的程序中播放。这个特性我在网上也查了好久,才查到。也就在那时,我遇见了格式工厂(等等,和Java那边的时间线错乱了),并将MP4转为了WebM,被转码的视频有:MixAndJam,老八吃屎实战,老八作死断孙。也在那时,我学会了简短地写日志,然后一夜之间,U盘坏了,一切的努力徒劳,我没有哭,因为没用。因此我便随它,又开始了自已接下来的旅程。之后便在断断续续的C#,Java中徘徊,以及摸鱼。直到我搜到了CFree与DevCpp.在Code::Blocks停了下来......下了Code::Blocks后,我的时代进入了C/C++与C#的时代,由于CB项目默认为C++,因此我便阴使神差地用上了C++,加上IT黑马的C++教程视频,我又学起了C++。不知为何,学C++对我好像没什么感觉,就好像一缕轻风拂在脸颊上一样,这难道是这么多门语言沉积的知识的作用吗?从此以后,我便大部分时间与C++接触也喜欢上了这门语言。在我的C++功底到了些位以及我那坚定不移的决心,我决定用C++做一门编程语言——Ce.
Ce(C!)
C!让我第一次体会到了做真正中型项目的感受(Java也有那么多是因为它屁活多,C#也一样,故轻松1000+),我花了许多精力在上面,也感受到了C++带来的乐趣,同时在其中,我也接触了一些WindowsAPI。之后,我的重心到了WindowsAPI与在乱翻ProjectType时看到的OpenGL上。之后,我便尝试起用Windows函数放音乐,便接触了MIDI,学了点DC后,我便用了用自己的脑袋做了个病毒(无害型)winSave|virusWin,它们互相保护,然后用DrawIcon简单地恶心人。到了学校后,我便加大了力度(学校的机子会自动复原),最终搞出了一定时间后蓝屏这一设定(我偶然在BiliBili上看见了NtRaiseHardError以及注册表LOCAL_MACHINE写入(我最后取消了这个代码块,因为我当时没装虚拟机)。之后,学习傅之叶级数时我做了个fft(OpenGL立即模式),及很后面用Win32API加纯C语言写了个窗口(程序可执行文件大小10个KB)。之后某一天,我在看CB时发现了SFML......之后,SFML便贯穿至今。我用SFML做了极多项目,这里不再例举。总之,时间来到了现在,回忆就此停止。
Cheers!
2025/9/28日誊写