作者 主题: 写给画画好的孩子看的编程介绍———Processing是个好东西  (阅读 6505 次)

Tealeaf

  • Newbie
  • *
  • 帖子: 18
本人文科艺术生,游戏专业,大一开始被c语言,高数,离散等等一通专业必须课猛灌,去年四月份意外接触叨processing,发现很有趣,想给画画好又想学编程的孩子们写一我的感受

1,Processing的历史,网上有,自己google或者维基百科,你要是第一反应是百度之,下面你可以不用看了,因为土鳖才用百度

2 先普下常识,人类语言,也就是人话,叫自然语言;写程序要用的语言,有固定死板的语法,写起来读起来都非常拗口,天书一样,叫编程语言;让计算机硬件运行起来的语言是二进制编码,由每个编程语言的complier(通常编程都是在一个编程软件里写代码(或者编码,英文叫code),这个编程软件通称Integrated Development Environment,著名的IDE有微软的visual studio,苹果的Xcode,IBM的eclipse,Processing的IDE也叫Processing,complier也是IDE的一部分,虽然中文叫编译器,但是它不是个实体的硬件),编译器来把编程语言转换成二进制代码,这种转换后的计算机硬件才可以接收的二进制代码,跟鬼话一样,非正常人类也很少能看懂,叫机器语言。基本上编一个程序然后让程序在机器上运行的过程,就是不太正常的神神叨叨的人类———程序员(就说一个著名天才程序员卡马克吧,他比较神叨的业余爱好是在自己家后院造火箭玩儿。。。。),把人话写成天书,然后被编译器翻译成鬼话连篇让计算机来运行。而编程语言和编译器,是更早些时候有一群更神叨的程序员(那个年代这种人基本都是科学家)直接用二进制代码这种鬼话写出来的。。。。。。。





3 再普及一下几个概念(咸湿版,口味略重,但是很好理解,装纯的我只能表示遗憾你只能去看枯燥编程书咯),Fuction,constant,variable,state,define

数学上fuction叫函数,就这么说吧,他是个自己定义的数学公式,数学家傅立叶可以定义傅立叶变换公式,现在我来定义一个计算高富帅啪啪拍的高富帅函数,比如一盒Durex超薄装是200块(我淘宝来的,不是买多了熟记于心,我也没钱买这么贵的),一盒5个,那么一个tt就是40块,我们在这个数学公式里只计算这个40块每只的价格下高富帅每月花多少钱买tt,所以这个价钱就是固定的,所以叫constant,第一个翻译的人管它叫常量。

每月用多少盒,这个数量,不太可能每个月都一样吧,比如这个月老婆或者炮友来事儿了,得有一周用不了,还有一周不需要用(你懂的,不懂去问维基百科什么叫Calendar-based contraceptive methods,再比如,有一个月突然发现新的粉木耳,多了一个要宠幸的,那消耗量又不一样了,所以每月TT用量就不是固定不变的,程序里不是固定不变的数据叫variable,字面意思是会变化的东西,暂且叫变量吧。 每月TT用量,MonthlyConsumptionOfCondoms,我习惯缩写成MonthlyCOC(这样方便看代码),那在processing的代码里可以写这么一句话

程序代码
int MonthlyCOC; 

来告诉complier,现在给大爷我在内存(内存这个概念就不需要解释了吧,不懂问维基百科)里安排个位置存储一个数据,数据名字叫MonthlyCOC,数据类型是int(一般数据类型就是int整数型,float带小数点的数,叫浮点数,bool,布尔值,是还是不是,true,1就是是,false,0就是不是;

不管函数还是变量,常量,在内存里都是占据一定的空间的数据,比如要用一个变量,就得先告诉complier,给我安排一个地方放这个数据,这个数据叫什么名字,这个动作就叫state,声明或者宣布。给这个声明好的数据赋值,叫define,比如

程序代码
MontlyCOC = 10; 

就把MontlyCOC变成10了,这里=不是等于,是把右边的数值赋给左边的变量;

如果不赋值只是声明,complier会给这个数据一个默认值,通常int的默认值是0;

打个不恰当的比喻,内存就是后宫,程序员就是皇上,complier就是总管太监,现在皇上闲的没事儿招一个民女进宫当妃子,就得先跟太监说下令,在后宫给安排个房间,给这个妃子取什么名字。如果皇上没跟总管太监说特别照顾,那这个妃子就跟其他妃子一样的待遇,这个待遇可以理解成默认赋值。

扯远了,现在声明另外一个变量,每月花销,MonthlyCost

程序代码
float MCost; 

那么计算一个月滚床单的tt花销的数学公式就是MCost = 40 X MontlyCOC。在Processing程序代码里javascript的语法来写成一个叫CodomCast的function就是
程序代码
float CodomCast(){ 

float MCost;

int MontlyCOC;

MCost = 40*MontlyCOC;

return MCost ;

}

前面提到过,fuction在内存里也是存储的数据,也有数据类型,这里定义的类型是float,可以理解成函数运算完了得到的那个数的类型。 fuction都有return value,返回值,从哪儿返回到哪儿呢,其实就是内存里之前给这个函数存储的数据,函数执行完了,这个数据可以是函数运算的结果,有可以是其他什么(比如我定义成 return 40.0,再运算多少次返回的也是40.0这个浮点数),上面这个函数,我定义的是运算结果,就是MCost,运算结束后,再从内存里取出来回到程序里,就是返回值。

如果你不想用返回值,那么可以把函数类型定义成 void,意思就是没有返回值,在内存里给爷存个固定的数就成,不用调用会程序里。但是这样怎么取得运算结果呢,可以用global variable,全局变量。在代码里这两个括号{}是用来当函数的边界的,如果在这个括号里声明定义的变量,都是local的,仅限于这个函数里,其他函数里要调用这个变量,就被边界括号给挡住了,要用就只能把这个变量声明在代码首段,不在任何的{}里,就是全局变量了,就可以调用了。刚才的函数就可以写成

程序代码
float MCost; 

int MontlyCOC;

void CodomCast(){

MCost = 40*MontlyCOC;

}


4, 用同一个计算方法去实现同一个功能,不同的编程语言按照调用计算机硬件资源的直接程度也就是执行效率大概可以这么排个序,汇编——C语言———C++——Java——Javascript,但是如果按照编写起来的费劲程度来排序,基本是倒序。如果牵扯到图形编程,就拿最基本的说吧,画个圆,如果用c语言,可能就要先去看计算机图形学,写一大对的函数来获取像素位置,写一些算法来提高改变每一个像素的颜色时候的效率。用processing会很简单,因为这个过程已经被创造processing这个东西的人写成一个函数集成在processing里了,直接ellipse(0,0,10,10); 就是在坐标(0,0)的位置画一个半径10的圆圈。所以这极大的解放了创造力和想象力,用代码来画画不再是那么写天书的事儿。而且,用代码画出的图形,全是矢量的,可能你在AI里要画一个星期的东西,学会编程以后,十来行代码加一个savepdf()函数就ok了



5, 说点实在的学习资源

官网:http://processing.org

用processing做的牛逼作品: http://v.youku.com/v_show/id_XMzY5NzE0Njc2.html

开源作品分享网站: http://www.openprocessing.org

书: http://ishare.iask.sina.com.cn/f/34617014.html
« 最后编辑时间: 六月 29, 2013, 09:09:24 下午 作者 vinjn »

vinjn

  • SuperManager
  • Hero Member
  • *****
  • 帖子: 586
Re: 写给画画好的孩子看的编程介绍———Processing是个好东西
« 回复 #1 于: 六月 29, 2013, 09:10:21 下午 »
非常有趣的介绍方式,主贴我增加了对代码块的风格,更方便观摩。

Tealeaf

  • Newbie
  • *
  • 帖子: 18
Re: 写给画画好的孩子看的编程介绍———Processing是个好东西
« 回复 #2 于: 六月 29, 2013, 09:11:45 下午 »
谢V大

小雍子

  • Newbie
  • *
  • 帖子: 20
Re: 写给画画好的孩子看的编程介绍———Processing是个好东西
« 回复 #3 于: 六月 29, 2013, 11:59:28 下午 »
processing里全局变量可以不赋值 局部变量不可以~

Tealeaf

  • Newbie
  • *
  • 帖子: 18
Re: 写给画画好的孩子看的编程介绍———Processing是个好东西
« 回复 #4 于: 六月 30, 2013, 07:43:39 上午 »
哈哈,好提议

Tags: processing