作为一个程序员,常常会有身边的人问我,写代码的具体工作是如何进行的。所以我想写一个系列,以现在手头的项目为例,向对这一行完全不了解的人来解释编程。
然后你就会发现,只要掌握了恰当的思考方法,编程非常简单,可以说小学生也有可能比大人做的更好。
以一个啫喱球的实现开始吧,这个啫喱球是我现在项目中需要出现的一个弹性的可变形的球,要求弹起来duang duang duang 的。如下图:
作为一个又经验的码农,当然首先要思考如何实现这个东西,并且要坚信,世界上没有码农无法实现的东西。既然有弹性,那显然和弹簧有关。所以我首先需要建一个辅助的简化模型。象这样:
程序要做的就是实现四根弹簧,然后把四个弹簧上绿色的点连成曲线,就构成了最终的啫喱球:
那首先需要实现的是一根弹簧,还记得初中物理学过的胡克定理吧,哈哈哈,忘记了可以百度下,就是一个乘法,通过公式,我们可以计算弹簧在压缩到某个点后它受到的力,从而最终得出绿点的速度是多少。这个时候,有经验的程序员会考虑先写一个弹簧零件的代码,然后组装四根弹簧形成上图的十字零件,然后再根据十字零件,加工一个啫喱球零件。对!这就是行话“面向对象”, 也就是说你考虑问题的时候不是考虑如何实现,而是考虑场景里都有些什么东西,然后把这些东西都组装起来。
所以现在的思路很简单: 1:)写一根弹簧 2:)把四根弹簧组装成一个十字弹簧 3:)把十字弹簧组装成一个啫喱球。
下面我来详细解释,如何用代码来实现这些,你会发现,编程语言其实压根不重要,我总体设计占开发时间的90%, 然后用编程语言来实现也就10分钟不到。但是如果是一个没有总体设计的程序猿,也许需要一周的时间来实现。
首先,实现一根弹簧的设计。对于编程来说有个好的套路,按这个套路走就能又好又快。这个套路就是:对于一个部件(行话就是“对象”啦)的设计,你首先要问自己,这个部件工作的时候,需要设置什么,最终得到什么。比如一根弹簧,你肯定需要设置它的弹性系数,固定点的位置,弹簧放置的方向,摩擦力(如果摩擦力为0,那就停不下来啦),它放松时候的长度,你要把它压缩或拉长的长度。
比如我已经写好了一个部件,名字就叫"弹簧", 我或其他人就可以象下面这样使用这个“弹簧" 的部件了。
使用代码如下:
做一个 “弹簧 ” 名字叫 t1
t1 的 弹性系数 是 0.003
t1 的摩擦系数是 5.3
t1的固定点坐标是 ( 100,100)
t1的方向 是指向点 ( 100, 0 )
t1 放松时候的长度是 50
t1现在的长度是100
真正的代码其实也差不多啦,比如用现在苹果开发语言oc写就是这个样子的
Spring* t1 = [Spring new]; //创建一个Spring ,名字叫t1
t1.k = 0.003;
t1.resistance = 5.3;
t1.fixPoint = pt( 100, 100 );
t1.directionPoint = pt( 100, 0 );
t1.relaxLength = 50;
t1.currentLength = 100;
瞧,语言真的不算啥,一般小学生,如果单纯学一门开发语言,最多需要3天左右吧。
这是生活的常识,缺少了其中任何一项,弹簧就无法工作了。那这个名字叫t1的弹簧创建好,它需要做什么呢?也很简单,当然是需要:1)把弹簧两端画出来 2:)让弹簧根据现在的状况动起来。比如上面的设置,放松的长度是50, 现在被拉长到100。 那一松手,这个弹簧就应该自己动起来。
--------未完待续/每天持续更新---------