童年像一张巨大的拼图。
我从一个个故事 ,一张张照片中寻找碎片,想要将其补全。
然而被遗忘的不只是童年,而是整个过去。过去像风一样从我的世界中流走了。
我像考古一样,从一段段文字,从一项项文件中寻找过去的蛛丝马迹。
想要找到最初的记录,记录着一切的起点。
与编程的初次见面
2015年左右,我接触了RpgMaker XP,它是一款低代码的Rpg游戏开发引擎。开发游戏!这是多么酷炫的一件事情?我清晰地记得那个星期六(五)的夜晚,我从晚上一直研究到第二天中午,只为搞明白一个词——”变量“!利用变量和它的变种”开关“(其实就是个bool变量),就可以做出基本的游戏逻辑了。接触npc,触发事件,击败怪物,继续剧情,这就是一个简单的rpg游戏拥有的。
我用Rpgmaker XP做了许多尝试,包括种田类游戏。但是在不会RGSS3(Ruby的扩展库,Rpgmaker XP的内部语言)的情况下,想要管理众多的田地实在是太困难了。原因是,Rpgmaker XP中只有”独立开关“的概念而无”独立变量“的概念。用更常用的话来说,就是所有的非bool变量都是公有变量。因此在编辑器中,只能为每块田地都单独创建一个公有变量,这显然是一个难以管理和维护的办法。
我尝试做出一款传统的Rpg游戏,但很显然地失败了。技术低下是一方面,更致命的原因是没有美术。所以我每每地感觉到美术对于游戏而言是多么的重要——没有人会因为高超的程序技术去记住一款游戏,但人们很容易被惊艳或者独具特色的美术风格所折服。
(所以就有了我不忍直视的绘画史,这就记在另一个文章里了。)
邂逅C语言
那个时候网上的资料还没有这么铺天盖地(也许是搜索引擎的问题),想要找到学习资料并不十分容易。我在”我要自学网“找到一个教c语言的课程(不知道为什么,现在这个课程在网站上已经找不到了)。然后到网上找半天下载了一个c语言的编译器,这个编译器叫什么我记不清楚了,只记得是以一个姓谭的人为名的。它自带的手册和一些其他功能都要充值才能使用,所以我就只用了最基础的功能。
我顺着课程学习,只是到了”指针“是无论如何也学不明白了。后来到县城里上学,电脑在乡下,没有电脑可用。我就在手机上下了个编程软件,想着做一点什么。当时尝试做一个”聊天机器人“,其实就是根据输入的关键词随机回复一点消息;还尝试做一个回合制卡牌对战游戏,不过都失败了(技术力低下的表现)。
Unity与C#
我学习c语言是有挫败感的,因为我用c语言无法做出一个完整的东西,最多就是解决一点极简单的算法。所以为了完整地做点什么(比如游戏),我下载了Unity3D。
同样在”我要自学网“找了一个课程(课程里用的还是2012年版本的Unity……),照葫芦画瓢熟悉了一些基本的操作和简单的方法。之后就是不少的关于C#代码的学习,比如”继承“,”多态“这些,对于学习c语言的我来说是颇有挑战性的。
当时尝试做一个2D平面的回合制对战游戏(这种回合指的是类似于文明系列游戏的”下一回合“,不同的是所有的操作在点击后”下一回合“后才会执行),为了把玩家的操作都存储起来然后一键执行,我把所有玩家可能执行的操作写为一个基类的子类,然后分别设定优先级,在一个处理类中统一处理。现在看来,这就是一种命令模式的运用。这个游戏因为无法解决地图的问题,没能成功做出来。
后来也尝试着做了不少东西,比如横板战斗,地图策略类游戏,但基本都死在了地图上。
一个比较完整的实现
我的程序设计课程设计是做一款游戏,最初规划是用C++写一个控制台游戏。课设有要求要写到三千行代码(很蠢),但我写到700多行就已经感到吃力了。首先还是关于地图的实现,我是用”*“表示一个格子,然后将所有格子表示为一个二维的数组。我实现了地形、兵种这些基本功能,但是再往上添加新功能已经变得十分地困难。
于是我向程序设计老师询问能否使用Unity引擎,得到肯定后我立马放弃了之前的方案,转而用Unity重新设计。这个游戏的设计很蠢,就是一个”做选择题“的黑盒游戏,玩家不知道选择之后会发生什么,但玩家确实能感觉到自己带来的影响。另外,我希望玩家能够自己制作地图和剧情,这就是这个游戏要实现的目标了。
一个比较惨痛的教训是,我在没有充分地设计时就立即开始了功能的实现,导致我的类之间相互耦合,总是牵一发而动全身。不过好在该有的功能,比如存档功能,游戏外编辑的功能都基本实现了。其中关于地图的制作,我的想法是让玩家通过PSD格式的文件将各个地区分为不同图层,然后游戏将不同图层转为不同的GameObject,并自动适配Collider以接受检测。但我实在没查到一个易于理解的解析PSD文件方法的文档,因此未能实现。
现在想来,也许我应该尝试放弃”游戏外文档编辑“的想法,而是通过制作编辑器让玩家能够无代码地发挥。关于编辑器的制作,又是一个技术问题……我的能力还是不足的。
文章版权归作者所有





- 最新
- 最热
只看作者