查看“我想做游戏”的源代码
←
我想做游戏
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[分类:小霸王学习机]] [[分类:文曲星]] =缘起= 我记得自己很小的时候(大概3岁还是4岁),我爸喜欢用红白机玩坦克大战和魂斗罗。但是我妈不喜欢,她认为打游戏会影响休息,而且伤眼睛,还减少电视机的寿命。我印象里面他们为此吵过架,我妈赢了,还把游戏机摔坏了,我们就没得玩了。 [[文件:我想做游戏-1.jpg|frame|none]] 直到再后来我快10岁,我爸以学电脑、练五笔打字为由,又弄回来一台小霸王学习机。放假的时候我们爷俩终于又可以一起通关魂斗罗了。但是平时我妈依然不让我玩,而且这次我爸也跟她站在同一边了,因为玩游戏影响学习。 我最恨别人跟我说玩游戏影响学习。 [[文件:我想做游戏-2.jpg|frame|none]] 当自己没得玩的时候,看别人玩游戏也是很有意思的。而比没游戏玩更痛苦的事情,则是连看都没得看。 我爸平时玩得少,而我小时候特别听老师的话,从来都不去游戏机厅,真正的是连看都没得看。实在没办法了,我只好反复看小霸王游戏机的说明书解馋。那本书其他部分都很简单,只有最后一部分讲G-BASIC的内容让我难以理解,所以我就看得特别仔细。 [[文件:我想做游戏-3.png|frame|none]] [https://www.zhihu.com/question/24298389 谁知道这是一条不归路啊!] [[文件:我想做游戏-4.png|frame|none]] 很快我就完成了自己的第一个游戏“猜数字”,然后迅速迷上了这个新玩具。 <pre> 10 A = RND(5) 20 B = RND(5) 30 C = INPUT() 40 IF C=(A+B) THEN PRINT "NI YING LE!" ELSE PRINT "NI SHU LE!" 50 END </pre> 这个“新游戏”的玩法跟以前完全不一样。以前都是别人做好的游戏我来玩,现在则完全是由我自己来定义游戏的玩法。 这意味着我可以有数不尽的新游戏可以玩! 当时的我就是那么想的,认为自己可以创造无穷无尽的新玩意。那年我多大?10岁?反正还在上小学。 当我了解了G-BASIC的语法规则之后,即使没有机会玩游戏也不那么难受了。我在脑中设计程序,在草稿纸上把程序写下来,然后推算程序的运行结果。那种感觉就仿佛拥有了一个只属于自己的世界,规则明确,没有限制,充满了可能。 =插曲 - 精灵= 初中时期,网易代理了一款韩国游戏,精灵(Priston Tale)。这是国内出现的第一款3D MMORPG。 [[文件:我想做游戏-5.jpg|frame|none]] 只看了一眼我就被她的3D画面征服了,整个初中我都在玩这个游戏。 [[文件:我想做游戏-6.jpg|frame|none]] 别人的初恋是人,我的初恋是这个游戏。 [[文件:我想做游戏-7.jpg|frame|none]] 然后她死了。 <blockquote> 关于停止收费运营暨合并服务器的致歉信 致全体亲爱的精灵玩家: 时间过的飞快,《精灵》在中国已经运营两年了,八月是一个喜庆的日子,因为《精灵》她两周岁了!可是八月也是个伤心的日子,因为《精灵》她被“外挂”这个病魔折磨的快要失去了生命! 由于《精灵》的在线人数已经达到了一款游戏正常运营的最低谷,虽然我们有一千个一万个的不愿意,我们也只能无奈的“正式停止《精灵》在中国的收费运营”,我们感到非常的遗憾,同时也对做出这样的决定给玩家造成的不便和困扰感到深深的歉意,在此我们给两年来一直支持和热爱《精灵》的玩家致以最真诚的谢意,感谢广大玩家对《精灵》游戏的支持,同时为了给予喜欢和热爱《精灵》的玩家一个继续游戏的空间,我们将合并现有的8组服务器到一组“追忆世界”,提供给玩家们免费游戏。 《精灵》正式停止收费运营的时间是2004年8月23日,届时之后将进行服务器的合并工作,并在8月26日重新开放服务器。如果您是《精灵》的忠实玩家,请您登陆合并后的服务器“追忆世界”继续游戏,并且我们也请您互相转告您身边的精灵玩家这一消息。对于停止收费运营和合并服务器给您带来的不便和困扰,我们再次致以深深的歉意。 精灵运营小组 2004年08月04日 </blockquote> 我曾经最大的理想就是开发一个这样的游戏,后来我的理想是靠自己的力量让她复活。 然而讽刺的是她根本就没死。 这个游戏只是被网易放弃了,它在韩国运营得很好。网易之后“易当”公司获得了国内的代理权,改了名字叫做“精灵复兴”。 =推波助澜 - 文曲星= 另一个契机是在高中的时候,当时我爸为了奖励我的月考成绩,给我买了一台“文曲星NC3000”电子辞典,目的是学英语。 (我的文曲星不在手边,下面的图都是借用闲鱼上某卖家的贴图。) [[文件:我想做游戏-8.jpg|frame|none]] [[文件:我想做游戏-9.jpg|frame|none]] * 在绝大多数同学眼里,这是个电子词典+计算器+游戏机+小说阅读器; * 在老师眼里,这是个作弊的工具+游戏机; * 在家长眼里,这是个电子辞典+游戏机。 他们都错了,这是台移动智能电脑。 关于它的历史,感兴趣的人可以读读这篇文章:[http://wqx.lugede.cn/history.htm 星界历史] 它的外观设计类似现代的笔记本,只是更加小型。除了内存小一点,芯片性能弱一点,不能直接上网(需要连电脑),其他功能和现在的智能手机没有什么本质区别,甚至还要强一些。 * 超大屏幕(相对其他电子词典) * 全键盘 * 使用2节5号电池 * USB数据线 * 红外功能,两台文曲星可以在一米内联机。 * 有麦克风,有MP3播放器 * 64KB闪存 * 6502 CPU 它的超前之处在于,从很早的型号开始就自带了一款名为GVBASIC的解释器,允许用户直接在文曲星上编写BASIC程序,并可以保存程序文件。 用户可以通过数据线,将电脑上的文件传输到文曲星中,也可以将文曲星中的文件传输到电脑上。比如我就把精灵的LOGO做成了文曲星的开机启动画面。 [[文件:我想做游戏-10.jpg|frame|none]] 这让文曲星变成穿越到了10年前的树莓派,用户自发打造了专属于文曲星的AppStore + Steam,而且还是免费的! 当年的星迷(包括我)都是一帮狂热分子,各种有趣的、有用的、让人瞠目结舌的应用层出不穷。 比如可以在文曲星上运行的IDE,EWayWriter+GVMaker编译器。没错确实是IDE,可以编写代码、语法检查、编译程序。编译后可以直接在机器上运行。 比如RPG游戏“黄金英雄坛说”、“神洲”、“我的世界”、“龙之传说”;即时战略游戏“星际争霸”。你能想象在160*80象素分辨率的机器上怎么玩星际争霸吗?? 感兴趣可以点击下面两个链接进去看看,这只是其中一小部分。 * [http://wqx.lugede.cn/games.htm 游戏] * [http://wqx.lugede.cn/tools.htm 工具] 让我列举一下高中时,我通过文曲星学会并实践过的技术。 '''1. GVBASIC编程''' 文曲星自带BASIC解释器,对我来说简直太完美了。除了部分函数和内置图片以外,其他都都GBASIC没有什么本质区别。以前我只能拿着纸写程序,现在有了文曲星简直如虎添翼。 '''2. 6502汇编''' 当我开始尝试做一些复杂的游戏时(包含过场动画),BASIC的执行效率开始让人无法忍受。而且文曲星上的BAS程序有最大8K的限制,程序内容太大的话,一个文件保存不了。 文曲星采用的是6502单片机,于是我自学了6502汇编,开始用下面这种方式写程序。 <pre> LDA #$82 STR X LDA #$83 ADD X STR #$82 </pre> '''3. 编译原理''' 对,你没看错,是编译原理。这门课一般大学本科3年级才会开,专科一般都不学。在学了6502汇编之后,我就开始尝试根据大神的指导,使用debug模式侵入文曲星系统内部,逐字节地阅读GVBASIC解释器的程序,看看它是怎么工作的。 虽然当时并不懂什么词法分析、语法分析、语义分析之类的概念,但是我大致明白了这个解释器是怎么运行BASIC程序的,然后自然领悟出了注入攻击和内存溢出攻击。 '''4. 内存溢出攻击''' 我当时并不明白知道这是一种攻击方式,只是想到了一种让BASIC程序突破8K限制的方式。 基本思想是在解释器执行到BASIC程序的下一个语句之前,读入一段超长的数据,使内存溢出。这段数据要计算好偏移量,让溢出部分覆盖掉后面的语句。通过这种方式就可以动态改变内存中的文件内容,在8K的内存中运行超过8K大小的程序! 后来更进了一步,直接让溢出的数据覆盖掉解释器本身,使用汇编代码重写GVBASIC解释器的函数,从而改变或增加新功能。 再后来,通过大神的指点,我又做了一点优化:用文件编辑器将汇编代码直接接在BAS文件的尾部,然后在BAS程序中以中断的方式来调用汇编代码。这样可以把一些执行起来非常耗时的代码用汇编来写,然后在BAS程序中通过函数接口来调用,从而提升程序性能。 '''5. Java语言、C语言''' 虽然6502汇编的性能提升是显著的,但是编程的过程太蛋疼的,而且把程序移植到不同型号的文曲星时非常痛苦。 有大神(LEE)借鉴了Java语言的特性(字节码)和C语言的语法,为文曲星创造了一种名为Lava的编程语言,从跨平台和效率两方面同时获得了大量进步。 [[文件:我想做游戏-11.jpg|frame|none]] 于是我又自学了C语言,用Lava来编程。大学后应为Lava这个名字的缘故,又自学了Java。 .lav格式的文件,曾经极多的应用。游戏、音乐、电子书不胜枚举。 [[文件:我想做游戏-12.jpg|frame|none]] '''6. 计算机图形学''' 高中那个时期最难的课程是数学,各种解析几何、不等式、排列组合的问题。考试的时候我喜欢偷偷用文曲星把函数编程图形,并通过观察法和暴力法直接得到答案,然后再写推导过程。 那么问题就来了,如何在一个只有80*160像素的屏幕上,用汇编代码画线、画圆、画椭圆、画三角形,还要尽量标识精确? 输入函数表达式,自动生成图形,计算最大值、最小值、交点坐标。是不是很像MATLAB? 我自己做了一套功能类似的学习(作弊用)工具,甚至还尝试利用灰度不同来实现抗拒齿。 =挫折 - 大学= 高考前夕,我对未来的职业方向发展没有任何犹豫,我想做游戏。 游戏是复杂的程序,一个人是很难完成的,需要以工程化的方法来团队开发。我认为自己的编程基础还可以,所以没有选“计算机科学”专业,而是选了“软件工程”专业。 我的填了3个不同的学校,志愿都是“软件工程”专业,后来就如愿了。 事后证明选什么都是白扯淡。软件工程专业直到大三才开始上软工的课程,此前的课程都跟计科没有什么实质区别,而且巨大部分专业课我都学会了。 太无语了。 更无语的是,学院根本就不上游戏相关的课程。大学里稍微沾边一点的专业应该是数字传媒,而这一点我是在毕业2年后才搞明白的。数字传媒也不学做游戏,而是平面设计、Photoshop、Flash、Max 3D建模。事实上大学里根本就没有做游戏这门课。 再加上我单相思的女生不喜欢我,导致我感情上受到了成吨的打击,一学期下来我的考试成绩全线飘红。 当时我的想法是,反正也学不到有用的东西,别人也不喜欢我,干脆打游戏好了。 然而我DOTA打得也不够好,总送人头/吐血。 于是我注册了一个WOW号,在网上找了个3天60级的攻略开始练级,花了4天练了个70级猎人,每天打副本。又注册了一个“洛奇”号,每周练级,修炼各种生活技能。又注册了N个精灵私服号,练级打宝PK。 总之就是各种玩,昼夜颠倒,浑浑噩噩,反正也没人能管我。熬到大三了,真正开始上软件工程课程了,我已经彻底失去了兴趣。 本来我感觉自己已经成了一条废狗,但是学校寒暑假搞了实训,还算有些意思。 先是和安博集团合作,把我们送到昆山的基地封闭实习,带我们做Java Web项目。要知道我最喜欢的就是写代码了和学新技术了,很快就把框架的用法记住了,并且投入了相当大的精力来制作当时那个电子商务网站项目。 另外几次实训学校是和软酷网合作,分别作了“数字图像识别”、“电商+搜索引擎”的项目,后一个项目成为了我的毕业设计。 我喜欢这种学习新知识时大脑飞速运转的感觉,更喜欢在开发项目时爆发脑力和集中心神的状态。尤其喜欢实训过程中完整的软件工程实践,这不正是我刚入学时想学而没学到的东西吗? 于是毕业后我加入了软酷网。 =穷极思变= 我在软酷网从事实践教学产品研发工作,这个工作需要学很多东西,还要熟悉很多学校的教学体系。我喜欢这个工作,这与我想做游戏并不矛盾,唯一问题是公司的发展方向貌似离游戏开发还有很远很远的距离。 现在国内的游戏市场完全处于野蛮生长状态,做游戏的公司眼里只有用户留存,唯一想的就是怎么从用户荷包里掏钱。有想法的游戏人要么是独立制作,要么还在挣扎创业,就算我想加入游戏公司也很困难,再说我也不打算离开公司。 我不能被动等着一家企业按我的意图来调整方向,然后再利用公司资源来学习。目前国内的IT市场主要发展方向依然是Web+移动端电商,教育是为市场需求服务,短时间内不可能转变方向的。 难道我就应该放弃梦想吗? 显然不是,想做我干嘛不自己做呢? 现在想想,大学时候我就做错了: * 高中的时候有那么多外部压力还能自学很多东西,凭什么到了大学因为没有马上教我想上的课自己就不学了呢? * 高中时期虽然我“会编程”了,但很多知识都不成体系。学校好几门专业课本来都是我很想学的,却恨屋及乌都不学了,这就没道理了。 '''学习从来都不是靠别人教的。''' 2015年的夏天,我又一次想通了这个问题,那就自学吧。 首先我选择的是Unity3D,我想把精灵的模型导入到Unity3D中,然后在这个引擎中重新编写游戏的逻辑。我进行了尝试,但是失败了,有很多原因。 # 精灵这个游戏太老,它的模型格式是ASE,高版本的3DMAX不识别,低版本的3DMAX没法把ASE转成fbx。 # Unity3D不开源,我没法搞清楚它内部的数据结构,直接写代码来进行数据结构的转换。 # 当时网上能找到的Unity3D教程都是傻瓜式的,他们的教学思路是让初学者通过Unity3D引擎的功能来开发游戏,各种资源从AssetStore买来用就好。把另一个引擎的数据结构转成Unity3D的数据结构,这个问题有点略复杂,绝大部分教程里面都没有讲。 # 它用的是C#语言,虽然我也会C#,但是没有Java顺手,很多库函数都不太熟悉。 我想到了更换引擎,就找到了jMonkeyEngine,一款纯Java的开源3D游戏引擎。 我花了大概1周左右熟悉这个引擎,再花了2周研究3DMAX的数据结构和ASE文件的数据结构,同时还花了2周左右学习3D图形学的一些基本概念。 我写了一个小程序来测试精灵的模型,可以正常显示了,挺让我高兴的,还专门总结了几个帖子:jME3的资源管理器 [[文件:我想做游戏-13.png|frame|none]] 然后就是更进一步,重制整个地图的场景。 [[文件:我想做游戏-14.png|frame|none]] 这个过程我重新学习了大学的线性代数,因为很多3D数学计算用到了矩阵(Matrix),那些表达式我看都看不懂,尝到了大学时期不好好学的恶果。 除此之外,我还学习了部分3D图形学、3D数学、着色器编程、建模、实体组件系统等,现在还在继续学。 在学习jMonkeyEngine引擎的过程中,我发现这确实是一个非常不错的引擎。我中间穿插着学习了libGDX、cocos2d、Unity3D等多个引擎,jMonkeyEngine再功能并不输给这些引擎,而且学习曲线更平缓。 唯一头疼的是缺乏中文资料。 我本人可以阅读英文源码和官方的教程。但我认识另外一些国内的jMonkeyEngine爱好者对英文很恐惧,因此我打算做一整套jME3的中文教程。 想要实现理想,靠的还是自学和实践。 与君共勉。
返回
我想做游戏
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息