【外刊IT评论】我6个月的学习编程经历:从”大齿怪“到“狂欢者”

标签: 心得体会 Cocos2d 游戏 object-c | 发表时间:2011-04-26 00:07 | 作者:admin blacktulip
出处:http://www.aqee.net
本文是从 My First Six Months of Programming: From Man-Rodent to Partyman 这篇文章翻译而来。

我是菜鸟

几乎刚好是6个月前,我决定开始从事一项新的职业。2010年10月之前,我从未接触过编程。要说有,那也只是在6年级时学过了大概一周的非常基 本、基本、基本的编程知识。就这些。我不知会学成什么样。2010年10月9日我在微博上写道:“我究竟想干吗?我决定学习编程,我没有任何的基础。唉, 兄弟们,我有些担心。”这是一段生涯的开始,我很高兴能走上这条路。我不会回头。

开端

我将只快速简单的给你们讲一下我前几个月的学习过程,因为这段时间非常的枯燥。我从Invent with Python这本书开始,这是一本对新手来说非常不错的教程。为了让你们知道它是如何的初级,我向你们展示这本书里的一段话:

+ 这个符号是来告诉计算机把2和2相加。做减法用这个符号 -,做乘法用星号(*)。

在我学会了一些非常基本的知识后,我随意的做了很多文本形式的小游戏,比如刽子手,jotto,猜数字。我的第一个比较大一点的小玩意叫做“大齿怪”。这个游戏的情景是关于一个大齿怪(就把它想成一个怪物吧),祸害村里。它藏在什么地方,你需要去猜它在哪:

也就是在此时我收到了我的第一张珍贵的粉丝画的作品。我把这个游戏发布在了Reddit上,Michael Hussinger为它制作了这张令人惊叹的封面画:

接下来,我转移到了我的第一个半图形游戏:”扫雷“。在此时我才开始真正的理解构造一个灵活的游戏引擎有多么的重要(没错,就像我开发的这个游戏引 擎)。这个游戏仍然是文本形式的,但已经有相当的灵活度了,在这个游戏里,我可以指定布景的大小和地雷的数量。这样一来游戏就可以从头再玩,你可以把地雷 数量设置很小而很快能看到游戏的结果,这样有趣多了。下面就是这个游戏:

欢迎使用苹果iOS

此时,我已经感觉到应该转向真正的图形游戏了。我感觉陷入了僵局。我根本不知道从哪里入手。我研究了一下SDL,这个东西超过了我的接受能力,我很快放弃了。因为我知道最终我想做iPhone应用程序,我请教了Matt Rix (Trainyard),他给了我一些很好的建议。他建议我从学C语言开始,然后学Objective-C,然后Cocos2d。今天说起这些我很快高兴,这三种语言我都学会了,虽然很基础。

在学习C和Obj-C时,我遇到的大量的挫折,我没有做出多少游戏。很多次,我真的怀疑是否能渡过难关、找到出路。很多东西当我第一次看到时愁得我挠掉了很多头发:结构体,数组,多维数组,属性,表现层,控制层,协议和代理,内存管理,还有很多。很多东西我目前仍然无法理解领会。但是我坚持继续下去,我对很多人都说:让自己进步的唯一方法就是不断的做游戏。我十分清楚,想成为钢琴家,练习时根本,所以,这也是我需要的(我就持续这样下去)。

欢迎使用Cocos2d

一旦我最终把iPhone应用的基本知识攻克下,我立即开始研究Cocos2d。我很紧张,也很兴奋。现在,我不知道自己是太挑剔还是太笨,我感觉 Cocos2d的文档写的不太好。所有的类,方法,属性都列出来了,但却很难让人读懂,它们解释的不太清楚。一个例子:每个”node“(Cocos2d 的主要元素)都有一个”(BOOL) isRunning“属性。看起来非常的简单,但它似乎能够表示任何意思。所有的文档对这个属性的解释都是:”标志这个node是否在运行。嗯,ok … 不用说,Cocos2d里面有很多东西我都十分的困惑。

尽管这些的不满,我还是非常喜欢Cocos2d。一旦掌握了一些基本知识,我就开始研究它如何能够容易的做出一个简单游戏,让它马上能跑起来。我已经知道了如何做音乐和声效,我还知道一些Photoshop,我就真的开始要让它输出一些很酷的结果了。起初我对Cocos2d很困惑,我从Ray Wenderlich的一些非常棒的教材开始学习。

我开发的各种暂且算是游戏的游戏

下面的是我的第一个Cocos2d游戏,它是我直接按照Ray的教材开发出来的(我在里面还加上了我的音乐和当一个敌人被消灭时的很傻的音效!):

接着,我仿制了一个Pong。这个游戏还可以多人参与!:

Pong之后,我受到了鼓舞,决定开发Tetris。这是个巨大的错误。我根本没有准备好。我遇到了各种让人懊恼的错误和问题,当我最终把框架搭起来后,我在微博上写了这样的话:“我很骄傲。我为我的Tetris仿品开发了一个真正复杂的类/子类系统。”Noel Llopis很快的告诉我,说我的决定十分的错误。我搜集了一些教材,试图好好的修改一下这个仿Tetris游戏,但太困难了。我决定放弃,但有一天我会打败你的,Tetris!

这次Tetris失败的尝试之后,我受Tilt to Live的启发做了一个游戏初始原型,我计划在这个游戏里,你需要去收集红点来获取积分,而不是像其它游戏里去避开它们。现在做的这个里面并没有加入真正的游戏里面会有的音乐:

学习了更多的Cocos2d之后,我突然来了灵感要做一个循环的褶皱纸样式的背景。于是把一张纸做出褶皱型,以循环方式填充背景。然后我在上面放了 一个小圆片,你可以用加速器让它在上面滚动。当我弄明白如何让这个小圆片滚动后,我为自己能做出这个东西很自豪,因为这牵涉的一些数学知识,我并没有用很 久的时间就把它能明白了(尽管只是一个很简单的几何问题)。背景很难看 —— 但很好用:

接着,当我看到了即将发布的游戏Bumpy Road的令人惊讶的海报后,我受启发,心想是否能够也做一个跟里面的高高低低的路面相似风格的游戏元素。很显然,我的做图水平很有限,你可以比较一下。

Bumpy Road:

我的版本:

这之后,我想在真正的动画上试试身手。以前从没有做过动画,先在Photoshop试试。人物的制作很乏味冗长。即使是画一条很傻很短的线条也很费 劲。但我还是完成了,我把他称作“狂欢者”。他能做的就是一遍遍的张开和闭上他的大嘴,每次都随机的发出一些哼哼声。你还可以在屏幕上移动他。背景闪动不 同的颜色。当你触碰屏幕时,他只能哼哼和张嘴:

然而,“狂欢者”有了一小队粉丝。这些粉丝的头像图标里包括Mario, Link, Samus,等等。事实上我把这个游戏发给了Touch Arcade的Jared(嘿,是他向我要的)。之后,让我大吃一惊和无比高兴的是,Retro DreamerCraig Sharpe创作了我的第二张正规的粉丝的艺术作品!下面就是Craig为“狂欢者”创作的杰作:

他的作品是如此的优秀,我甚至把它放入了我的下一个游戏里。但起初,我突发奇想,要做一个跳杆子的游戏。起初的出发点只是为了使用一个简单的游戏技 术测试一下视差背景的效果,但做下来就做成了这个游戏。最终的游戏有一个小屏幕,有记分功能,有重玩功能,有音乐、音效,各种跳跃高杆,有一个高度指示 器,甚至还有一个鸣谢页面!它是我的功能最全的一个游戏。我在游戏里画了一些非常丑陋的精灵,就像你下面看到的:

因为画的太差,我询问Michael Hussinger是否愿意为我做一些简单的修改,他同意了!他在二十分钟内就画出来一个让人惊叹的匹萨伙计。我估计花几个小时也画不出这么好的作品来。他还为游戏中的视差效果画了一个漂亮的山作为背景。下面的就是在他的帮助下游戏的样子,我加上了标题和鸣谢页:

游戏运行中!

我的下一个游戏受Trainyard的启发。我想看看是否能做出 一个地图,上面画些网格道路,卡车能跑在上面。看看,制作“狂欢者”有了很好的回报。所以我称这个为“狂欢大巴”。游戏的玩法就是点击地图上的一个地方就 设定一个聚会点(一个闪烁的,颜色变换的点,伴有音乐),然后图上会画出一条路,通向这个点,“狂欢者”会把他的“狂欢大巴”开到那里。不用说,这是一个 非常简单的游戏。但里面很酷的东西是,当他到达目标地点后,音乐声会变大,卡车会开始跳舞,Craig画的作品会出现在开车上面左右摇摆!

代码写的很乱,有很多问题。我让弟弟试玩了一下,他式了三次,什么都没干成,他总是每次都是在错误的时间点击到错误的地方,这样游戏根本就不能正常 玩下去。每次我都要从头开始玩这个游戏,因为我没有给它加入“重新开始”的功能。但我还是挺为这个Trainyard的复制品感到自豪的。Matt应该为 此感谢我。

我的下一个项目是要做一条蛇。我发现了这个如何用flash做出一条蛇的教程, 我只需要把它移植到iPhone上。这个教材让我明白了很多如何做这种游戏的内幕。之前,我计划让蛇每一帧移动一次,但在如何让蛇尾和蛇身保持一致的问题 上遇到了很多的麻烦。我本打算建一个数组存所有历史动作,蛇尾将按照这个数组里的信息做它的每个动作,但这样一来它动的太快,让人很不舒服。这个教程整个 颠倒了我的思维,我意识到蛇其实根本没有动。这种看起来在移动的视觉效果其实是简单的在帧上添加和移去一小段蛇身产生的。这样,当你捡起一 个苹果,所需要做的只是告诉程序不要删除任何片段。事实上我需要重新写这个程序,因为界面太难看了,控制的也不好。因为我是移植过来的,代码写的很乱。但 事实上作为一个基本的游戏来,它还是很不错的!

在完成这条蛇之后,我打算制作“狂欢大巴2”:“狂欢者”的周末狂欢。我把上一版升级了一些。我在里面加入了一些Trainyard里面的速度条, 一个车站,车可以从里面开车,一些声音特效(当他被碰着时会出现很大的汽车相撞的声音,而且会喊出“今天没有活动!”),程序也整理的更整洁了。但没多 久,程序又开始变乱,当我要纠正一个问题时,另外一个东西又出现了问题。最大的问题是当我把速度设成最大时,卡车会在路上某个点崩溃。这是因为更新调用的 太频繁,程序来不及在下一次调用前更新完。尽管我知道这个问题的原因,如想修复这个问题需要重做大量的东西。我想我需要升级到“狂欢大巴3”:最后的狂 欢。

我最近的目标是重做Doodle Jump。目前为止一切进展顺利。里面很多小平台,移动速度会约来越快,一个会跳的小人,一些其它物品(目前为止只有一个弹簧),自定义音乐和声效,以及完全从原作里拷贝的背景。目前为止我对做出的东西很高兴。我会继续往里面增加很多的东西。

结论

练习给人带来的进步是惊人的。每次当写出一个新程序,我都会遇到大量的无法预知的问题和bug。当遇到挫折时,我一般是将问题移到下一次升级时解决。这让我感觉自己就在走一个while循环:

while (编程技术仍然很糟) {
      练习时间++;
      程序 * 新程序 = [程序 程序类型:游戏];
      if (新程序.做的很好吗 == 是的 && 练习时间 >= 大量) {
          编程技术仍然很糟 = 否;
      }
  }

我会一直这样制作下去,一转眼就到现在了,我几乎等不及想知道再6个月后会是什么样。请下次当我来述说如何给Casey’s Contraptions制作音乐(和一些声音)时,请记住一定来看看!


本文原始地址:我6个月的学习编程经历:从”大齿怪“到“狂欢者”

相关 [it 学习 编程] 推荐:

推荐编程学习路线图

- - Starming星光社最新更新
对于一些没有编程经验的人来说,一开始就学习web开发会让人觉得非常困难. 因为你的能力处于初始阶段(你根本不知道你缺少哪方面的知识),所以在你能够建立一个任意复杂的网站之前,你可能会认为你需要大概几个月的时间来夯实计算机方面的基础知识. web开发和CS是不同的,你完全可以在没有太多计算机基础的情况下开发学习web开发.

谈一谈网络编程学习经验(06-08更新)

- Leo - C++博客-首页原创精华区
PDF 版下载:https://github.com/downloads/chenshuo/documents/LearningNetworkProgramming.pdf. 本文谈一谈我在学习网络编程方面的一些个人经验. “网络编程”这个术语的范围很广,本文指用Sockets API开发基于TCP/IP的网络应用程序,具体定义见“网络编程的各种任务角色”一节.

编程语言教程书该怎么写: 向K&R学习!

- kapster - 为之漫笔
原文地址:Lax Language Tutorials. 每年在评审Jolt Awards图书的时候,我都会被一些语言教程类图书弄得心力交瘁. 从这些年的评审经验来看,这些语言类教程的写得都不错,但除此之外,少有亮点. 换句话来说,这些书都很严谨、很精密,如果读者有足够的定力,通过它们掌握一门语言的编程技术还是不成问题的.

学习不同编程语言的重要性

- 蒋冰 - 伯乐在线 -博客
  注:本文转载自flyfy1的博文;.   引子:今天选了下学期要学的一门课,叫做编程语言. 据说是两周学习一门新的语言,很有挑战性. 以及这门课的课本是MIT出的《Concepts, Techniques, and Models of Computer Programming》(一下简称《CTMOCP》),今天看了一部分它的前言部分,联系我以前读过的《黑客与画家》里面有两章对编程语言的讨论,发现学习不同的编程语言还是相当有必要的.

用Codecademy学习编程,简单又有趣

- 可可 - 36氪
为了学习编制程序,很多人买了一堆相关书籍,并参加了很多网络课程,甚至花了几百块钱买了一套教学光碟,到头来还是不会编程,非常不值. Codecademy是一个刚推出的网站,它为用户提供了一种学习编程的新方式. 它是一种基于网络的互动编程教程,手把手帮助用户了解JavaScript的一些基本原理,更重要的是,使用Codecademy学习编程充满了趣味性.

谈一谈网络编程学习经验(06-08更新)

- Fenng - 陈硕的Blog
PDF 版下载:https://github.com/downloads/chenshuo/documents/LearningNetworkProgramming.pdf. 本文谈一谈我在学习网络编程方面的一些个人经验. “网络编程”这个术语的范围很广,本文指用Sockets API开发基于TCP/IP的网络应用程序,具体定义见“网络编程的各种任务角色”一节.

我是如何学习计算机编程的

- hi3w - 伯乐在线 -博客
  注:本文转载自外刊IT评论,国外程序员Feross Aboukhadijeh分享的经验.   我在很小年纪的时候就开始学习编程,我学习编程的方法是创建大量的不同的网站. 下面列出的是我创建的主要的网站,其中最早的一个是我11岁时开发的. 我希望读者能从我这些复述中获得的信息是:如果你想学习编程,做大量的练习性的项目是非常必要的.

7个免费的从头开始学习编程的方法

- - LuckerMe.com
我们曾在一篇文章中讨论过不会编程算不算是文盲的问题,虽然有人认为这样有点说过头,但同时也不可否认如今编程确实显得越来越重要. 比如作为设计师,懂一些编程可能会帮你更好地理解自己工作内容;而如果你想从头开始创业,技术创始人的身份则会让你的很多工作显得更容易. 无论想学什么,也无论出于什么目的想学,都需要你保持好奇心.

2014年值得学习的编程语言

- - 编程 - 编程语言 - ITeye博客
经过数据分析和研究Jobs Tractor的45000个开发人员招聘职位数据,我们得到了上图的结果: 自上一年,主要的变化如下:. PHP和Java换了位置,但是仍旧是高居不下. Java的Android已经取代了SQL并且接近Objective-C. Javascript已经超过了Ruby. ActionScript下降了2位.