游戏开发充电。转型


偌大一个中国,却无书可读 [选自 szwaiwai 的 Blog]
@ 2005-05-09 09:53

在论坛里,经常看到有些网友说中国的游戏开发别的都不缺,就缺好的创意策化.其实,中国游戏开发什么都缺,游戏程序设计开发,美工,3D,AI都很落后.

  目前国外流行的都是3D游戏(如半条命2),开发该类游戏的重要基础之一就是计算机图形学,而且是real-time rendering(实时绘制).因此游戏程序开发与一般程序设计不同,有一定的门槛,不象写信息管理系统程序,无论谁学几句SQL语句,便能操刀上阵了.

      我不知道大家有没有深入地研究过计算机图形学.  要真正理解计算机图形学,必须灵活地运用高等数学,线性代数,计算数学等知识,还要有较好的英语(因为资料大部分是英文的),  当然还要学习大量的图形学算法。(很多算法并不是一成不变的,在真正实现时有很多的技巧).  所以我说搞计算机图形学,要求的门槛较高,要求理论与实践并举。

  要开发3D游戏,首先要学习计算机图形学,但由于各种原因,国内现有的计算机图形学书籍都比较初级,没有深入的.而且都是比较传统的.2000年左右,随着显卡技术(GPU)的革命性突破,实时绘制大行其道,国外这方面的书籍很多,可在中国却看不到,我国没有把外版书直接放在书店卖的传统(怕太贵卖不掉,一本书要五百人民币左右);要等翻译吧,国内一年在这方面也翻译不了几本,而且等到翻译出来了,有些技术也成昨日黄花了,再说翻译的水准也不行(估计翻译的人员自己也不太懂);等影印版吧,便宜,可国外出版社哪肯把能卖大价钱的畅销书贱卖给我国.
  国内学术界的杂志关于计算机图形学的文章很少,不象国外有很本多专门的计算机图形学杂志,而且高水平的很少.于是国内这方面的印刷资料基本上没有.国内也有些人编过3D的编程书籍,但太小儿科,这样的书没什么帮助.

     大家都看过水世界,泰坦尼克号,我们都为电影中那些以假乱真的电影特技深深地折服.那些计算机生成的高度真实感的海洋让人看不出破绽.国外的计算机图形学研究和实际的应用贴得很近,电影特效、动画中所用到的都是最新的研究成果。反观国内,学术界和CG界就像是两个陌生人一样。从无来往,也从不关心对方的存在。
      而且还有一个奇怪的现象,学术杂志,书籍很少提到那些国际上知名的图形学研究专家,新的技术,在非技术性的CG杂志上却有介绍,在CG杂志上有不少图片来自于SIGGRAPH(世界图形学年会).再看看国内学术界编的那些图形学教材,在"正文"里根本不提到SIGGRAPH这几个字.为什么有这种现象???
  常看英文文献的网友,会去国外下载高水平论文(如SIGGRPAH),但由于这些论文都需要一定的背景知识,否则很难看懂.这些背景知识散见于以前的论文和书籍.前面说过图形学外文书籍国内是不容易找到的,有些论文在网上只有会员才能下,一般人只能看个摘要.当然还有一个途径,花钱还是能买到的,贵啊.(国内的一些大图书馆有这项服务)

      所以,在国内一个业余爱好者研究计算机图形学的环境很差,  由于资料的限制,学习中充满着艰辛.  对于一些深入的课题,比如说绘制具有高度真实感的水流,海洋,高山,火焰,烟雾,布料,没有相关的系统性资料.  有一些图形学中相当经典的图书,论文,作业余爱好者,是看不到的.  由于3D知识不普及,周围很少有人与你有同样的兴趣.  说到3D,就知道3DMAX,MAYA,很少有人去想一想这背后的图形学原理.永远只能跟在外国人之后亦步亦趋.有些网友虽然会依葫芦画瓢写VERTEX SHADER,PIXEL SHADER来达到特殊的效果,但对于这些程序背后的原理却一点儿不清楚,direct3D下有很多例子,能理解的人又有几个,HDRI,Subsurface Scattering,PRT这些术语背后后技术更是很少有人涉及.可能有人会说,既然你想学,可以直接去AMAZON买原版书啊.可是一个人处于学习能力最旺盛时候,往往是在学生时代,但那个时候也是最缺钱的时候,一本原版书需要五六百…

  由此造成国内民间对计算机图形学的认识很肤浅,没有普及,大部分计算机专业的学生都不太懂,运动员都是从群众中选拔出来的,群众体质较差,运动员也好不到哪儿去.可想而知专业的3D游戏程序设计水平会高吗?--- 空中楼阁.

  而国外不一样,一个业余爱好者占有的资料会比大学教授都多,水平也就更高.(看看国外那些个3d引擎)国内大部分的游戏开发论坛都没有实质性内容,很肤浅.

  所以希望出版社或相关部门能意识到这个问题,出版社最好能直接引进高水平,有深度的计算机图形学图书(不要老是VC,VB,JAVA),语言是工具,只有运用到各个专门领域才能发挥更大的作用.

  这些都是高水平的real-time rendering书籍,看看国外有这么多,那儿的业余爱好者多幸福.这些书国内基本上没有,国内的业余爱好者有多悲惨.(其中部分书籍有英文电子版,但一些经典的好书往往没有电子版)

Essential Mathematics for Games and Interactive Applications, Jim Van Verth and Lars Bishop, ISBN 1-55860-863-X
GPU Gems, edited by Randima Fernando.
Collision Detection, by Gino van den Bergen (table of contents)
Game Physics, by Dave Eberly (companion web site)
ShaderX2: Introductions and Tutorials with DirectX 9, edited by Wolfgang F. Engel (table of contents)
ShaderX2: Shader Programming Tips and Tricks with DirectX 9, edited by Wolfgang F. Engel (table of contents) note that this is a separate volume from the previous book
Essential Mathematics for Games and Interactive Applications, by Jim Van Verth and Lars Bishop, Sept. 2003
Graphics Programming Methods, edited by Jeff Lander, July 2003
Real-Time 3D Terrain Engines Using C++ and DirectX 9 , by Greg Snook, June 2003
3D Computer Graphics: A Mathematical Introduction with OpenGL, by Samuel R. Buss, June 2003 (sample code, etc.)
Advanced 3D Game Programming with DirectX 9.0, by Peter Walsh and Adrian Perez, April 2003.
The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics, by Randima Fernando and Mark J. Kilgard, February 2003 (Sample chapters and more, Gamasutra excerpt)
Game Programming Tricks of the Trade, by Lorenzo Phillips, Sept. 2002
Direct3D ShaderX: Vertex and Pixel Shader Tips and Tricks, by Wolfgang F. Engel (Table of Contents and more; Introduction; Samples 1 & 2), 2002
The OpenGL Extensions Guide, by Eric Lengyel (table of contents and sample, in-depth table of contents)
3D Games, Volume 2: Animation and Advanced Real-Time Rendering, by Alan Watt and Fabio Policarpo (their Fly3D SDK is online), 2003
Game Programming Gems 3, edited by Dante Treglia and Mark DeLoura, 2002 (see the series web site for upcoming volumes)
Geometric Tools for Computer Graphics, by Philip Schneider and David Eberly, Sept. 2002 (companion web site)
Focus On 3D Terrain Programming, by Trent Polack, Dec. 2002 (comes with CD; Publisher's description)
Vector Game Math Processors, by James C. Leiterman, Dec. 2002.
3D Math Primer for Graphics and Game Development, by Fletcher Dunn and Ian Parberry, Dec. 2002. (more information at their site)
Fundamentals of Computer Graphics, by Peter Shirley, July 2002
Real-Time Shading, by Marc Olano et al., July 2002
Level of Detail for 3D Graphics, by David Luebke et al., July 2002 (companion web site)
Advanced 3D Game Development with OpenGL, by David Byttow and Ryan Parker, 2002
Real-Time Shader Programming, by Ron Fosner, Dec. 2002
Jim Blinn's Corner: Notation, Notation, Notation, by Jim Blinn, July 2002
Software Optimization Cookbook, by Richard Gerber, March 2002
Real Time Rendering Tricks and Techniques in DirectX, by Kelly Dempski, 2002
Texturing & Modeling: A Procedural Approach, 3rd Edition, by David Ebert et al., 2002 (companion web site)
Special Effects Game Programming with DirectX 8.0, by Mason McCuskey, 2002
Non-Photorealisting Computer Graphics, by Thomas Strothotte and Stefan Schlechtweg, June 2002 (companion web site)
Mathematics for 3D Game Programming & Computer Graphics, by Eric Lengyel, 2001
Game Programming Gems 2, edited by Mark DeLoura (Table of Contents and introduction), 2001
OpenGL Game Programming, by Kevin Hawkins and Dave Astle (source code), 2001
Subdivision Methods for Geometric Design: A Constructive Approach, by Joe Warren and Henrik Weimer, 2001 (companion web site and publisher's web site)
Non-Photorealistic Rendering, by Gooch and Gooch, 2001
Computer Animation: Algorithms and Techniques, by Richard Parent, 2001
Practical Algorithms for 3d Computer Graphics, by R. Stuart Ferguson, 2001
Game Programming Gems, edited by Mark DeLoura (Table of Contents and code updates), 2000
Game Engine Design: A Practical Approach to Real-Time Computer Graphics, by Dave Eberly (his code is online), 2000
3D Games, Volume 1: Real-time Rendering and Software Technology, by Alan Watt and Fabio Policarpo (their Fly3D SDK is online), 2000
3D Graphics Programming: Games and Beyond, by Sergei Savchenko, 2000
Computational Geometry: Algorithms and Applications, by deBerg, Van Kreveld, Overmars, and Schwarzkopf, 2000
Computer Graphics Using OpenGL by F.S. Hill, Jr., 2000 (Table of Contents and sample chapter)
3D Game Engine Design, by David Eberly, Jan. 2001 (companion web site)
Essential Mathematics for Computer Graphics Fast, by John Vince, Oct. 2001
Computer Graphics Through Key Mathematics, by Huw Jones, May 2001
Mathematics for Computer Graphics Applications, by Michael Mortenson, 1999

国内无书可读的环境一日不改变,说什么提高中国游戏开发水平都是空谈.

   中国人很聪明,为什么在学术上一直落后?一个很重要的原因是,一个人大学本科毕业,研究生期间,教师便没有更多的东西教给他了,他即使想自学,图书馆里也没有什么新的,深入的图书可供阅读.而国外就不同,研究生期间,有大量令人兴奋的知识在等着他来学.

No one knows,and each person can have a significant effect on the way the future turns out.There is no one future,no course that must occur.You create it.
 摘自的最后一句.
 
 You create it.我很欣赏这句话.
 国内的学者,是吝啬这句话的,好象学术只是大学里的专利.

 最后我还是以You create it.来结尾.


 
[译]图形学和游戏中的数学基础(by Fletcher Dunn & Lan Parberry)
超级飞鱼 @ 2005-04-28 22:26

[译者(以下皆用中括号表示):前次翻译完<游戏编程入门>,感觉很哈批!决定更高目标挑战自己!
注意:本人只负责原文翻译,主要目的是方便大家学习,和广大游戏开发爱好者共同进步。鉴于时间关系,中间会省略一些不必要的东西,一些地方也会意译,但尽量忠于原著,翻译质量也请放心,有任何问题请发邮件或站内讨论,欢迎指正,欢迎交流,欢迎转载,但由此引起的任何后果本人概不负责。
闲话休说,去掉一大堆目录-----演出开始了!]
    第一回:简介
    1.1何乃3D数学
   [此处删去废话100字]3D数学与计算几何相关,就是用算法解决几何问题。3D数学和计算几何在各领域都有广泛应用,比如图形,游戏,仿真,机器人,电影等等。这本书是用C++语言举例。[此处删去废话100字]无非是说,如果你不属于以上两类用户,这本书还是值得一看!
    1.2为什么要读这本书
   [此处删去废话若干]这是本好书!
    1.3在读本书前你要知道些什么
   基本代数、几何[就是中学学的那种]
   C++基础[牵涉高级特性的本书中会解释]
    1.4各章简单介绍
   [慢慢看吧]
    第二回:迪卡尔坐标系
    2.1一维数学
   你可能会觉得奇怪,我们明明是讲三维数学,为什么要谈到一维。好,因为在进入3D之前我们要用到计数或者整数。
   首先是自然数,发明于n年以前,当初是用来计算死羊的数目[为什么不是活羊。。。]。然后,就产生了“一只羊”,“两只羊”,“三只羊”。。。[Zz...恩?起床了]很快,人们就发现这样数太累了,他们就省去其中一些,开始用“许多羊”。根据不同文化,人们不同的耐性,产生的数量单位也不同。最终,文明的延伸使得一部分人从整天杀羊的工作中分离出来,开始思考如何数羊。这些伟大的思想家使得0的概念(没有羊)永垂不朽[鞠躬]。同时,他们发现不能为所有自然数命名,于是就发明了不同的计数系统,比如“1、2、3”,或者罗马数字等等,数学就这样产生了!
   他们习惯于把羊摆成一排,数起来比较方便,这样,就产生一条带数字的直线。我们在等间隔处做上标记,原则上,直线可以到达无穷远处,但是我也没有耐性画,干脆再摆个箭头表达一下。当然,原始人在死羊身上不可能想到无穷远等概念,除非做梦或发高烧!
   然而有时候可能一个快嘴的人,把还不是自己的羊先卖给了别人。那么,欠债和负数的概念就同时产生了。把这个假想存在的羊卖掉之后,你就有了“负一”个羊。整数的概念也随之产生,包括自然数和他对应的负数部分。我们的数字直线也得到扩展。
   贫穷可能比负债来得更早,也许有人只能买得起半只羊,甚至四分之一,这就是分数的萌芽,也就是一个整数除以另外一个整数,数学上称之为有理数。当然,有的懒人发明小数点符号来写3.1415而不是很长的31415/10000。
   很快,人们就发现了一些数不能用有理数表述,经典的例子就是圆周率----派。加上这些数字,我们就有了实数!有理数和自然数能一一对应,实数却不行。自然数和整数的研究称之为离散数学,而实数的研究称为连续数学。
   [此处删去200字]说明离散数学已经够用,我们的电脑就是离散的,有限的。C++中就用不同的形式来计数,比如“short、int、float、double”。区别他们的只是精度问题,最后还是用离散数表示。旧的图形学书中常建议用整数,因为浮点型硬件比整型慢,但是现在已不是这回事了。那么你该如何选择呢?
在这里,我们给出图形学第一定律!
    图形学第一定律:如果它看上去是对的,它就是对的。
   在本书中,我们会大量涉及三角学,也包括实数,还有实函数。实数看上去很抽象,但我们还是要用它,因为他是对的,因为有笛卡尔坐标系,因为他有意义。
    2.2二维迪卡尔数学
   你很可能已经用过二维迪卡尔坐标系却还没听说过他的名字。如果你见过房屋设计图,用过地图,看过足球比赛,玩过象棋,那么你就来到了二维笛卡尔坐标空间。
    2.2.1例子:迪卡尔假想城
    2.2.2任意二维坐标空间
   在迪卡尔假想城没有创建之前,那里只有一大片荒地。城市设计者随便定了个中心,开辟一条条道路。与此相同,我们也可以随意建立二维坐标空间,在白纸上,棋盘上,黑板上,水泥板或足球场上。
   每一个坐标系都由两个量定义,一个是原点,另一个是坐标轴。整个坐标轴也可以随他们的改变而平移。比如计算机屏幕坐标,按照惯例都是以屏幕左上角为原点,x轴正向向右,y轴正向向下。
   然而,说不定当初城市地图的绘制者是从别的地方请来的,粗心的绘制者忘记标明地图方向,城市居民只能列出所有可能的情况,最终由委员会决定,把(左上角)的图作为正向。由于还是有很多人有意见
,为了避免摩擦,将上面一行的都列为可接受。因为只要旋转相应角度就可以相互转换。要不是达芬奇15世纪发现了背刻技术[不就是印刷术吗,小样!],这个城市的居民可能会在21世纪的今天,哪天看电视的时候才发现,原来从背面看的话,上图第二行的四个坐标看上去也是一样。当然这是后话。
   总之,在平面内经过任意旋转(当然要保证坐标轴垂直),能使得x轴正向向右,y轴正向向上的,就是正向坐标。
    2.2.3用二维笛卡尔坐标表示
   我们用两个数表示二维坐标空间内的一点(三维的就是三个),分别称为x坐标和y坐标。每个数都表示在原点的哪个方向,合离原点在某方向上的距离,精确的说,是相对于坐标轴的有符号的距离,以同坐标轴平行的直线来测量。听上去似乎很复杂,事实上很简单。如图。某点的x坐标表示他离y轴的距离,相反的,点的y坐标表示他离x轴的距离
    2.3从2D到3D
   从二维到三维,有些概念可能要从新考虑。
    2.3.1多了一维,多了个轴
   多了一个轴,确定正确的方向似乎更加复杂了。不急,慢慢来。首先,x轴和y轴是垂直的,我们已经知道了。第三个轴,我们称为z轴,和他们都是垂直的,也就是说和x轴,y轴所在的平面(我们习惯称之为xy平面)垂直。那么,相同的,x轴和yz平面垂直,y轴和xz平面垂直。
    2.3.2三维坐标
   在三维空间中,点是用x,y,z三个数表示,分别表示点到yz,xz,xy平面的距离。这个距离也是以平行于坐标轴的直线来测量的。
    2.3.3左手坐标系,右手坐标系
   大家看到了二维平面的坐标轴有8种摆法,三维的有48种。但是一共就分成两类。[此处删去200字]左手坐标系就是:伸出左手贴在显示器上,大拇指往右,是X轴正向,其他四个手指往上,是Y轴正向,手心方向(正前方),是Z轴正向。右手坐标系:伸出右手贴在显示器上,大拇指往左,是X轴正向,其他四个手指往上,是Y轴正向,手心方向(正前方),是Z轴正向。然后其他46种都是由这两种旋转产生的。[手抽筋了。。。]
    2.3.4本书惯用坐标系
   左手坐标系[!!!我用惯了右手的,不翻了!!!]
   观众无语。。。汗。。。
   2 b continued...
   
   
   


 
[译]游戏编程入门(by David Astle)
超级飞鱼 @ 2005-04-28 21:38

   经常有人问我,没有编程经验的人该如何开始开发游戏。在此之前,我总是一个个的尽力回答。然而,后来提相同问题的人数增长到难以处理的地步。我决定,是时候把我所有的建议写成文章,作为一个大概。
   这篇文章是针对那些想要开发自己游戏,但几乎没有编程经验的人。事实上,我假设读者没有任何编程经验。我主要讨论游戏开发的程序和设计方面,而不是艺术性。我也不准备讲述如何进入游戏行业(这方面已经有足够的资料),而只是让你逐步的开始开发自己的游戏。最后,我所指出的这条道路也并不能作为唯一的,或是最好的路径来学习开发游戏,但至少对我和一些人很有用。
    选择一门语言
   你要做的第一件事就是选择一门开发语言。你有很多选择,包括Basic,Pascal,C,C++,Java,等等。也经常会有人争论对于初学者那一门语言是最好的。对于这一系列流行语言的讨论,你可以参看John Hattan的著作,What Language Do I Use?(我用什么语言?)
   我的建议是以C和C++开始。有些人会说这些语言对初学者来说太高级了,但因为我自己就是学C++,我并不同意这一说法。而且,C/C++是当今使用最广泛的语言(译者认为应该是汉语。。。),所以你可以找到大量学习资料和帮助。你先学C或C++都无所谓,因为只要学了一个,再学另外一个就很容易。但是,如果你先学C++,请保证在学习面向对象编程之前能理解和使用过程编程(等编程熟练再去学习类)。(译者:C是过程性语言,C++是面向对象语言)
   如果你开始学习C/C++,发现太难,那再学一个简单一点的也没关系,比如Basic或Pascal。但是我真的认为,如果你坚持努力,而且有好的资料,学C/C++应该没有太大问题。
   你的下一个问题可能会是:“我该怎么学C/C++?”我很高兴你这样问。最好的办法是上课。有老师可以回答你的问题,帮助你产生很大进步,编程练习作业也可以保证你能用到所学的东西。
   如果你不觉得上课是个好主意,那最好的办法就是买一些好书。不要花太多时间去选一本什么“超级宝典”或“万用全书”,因为你最终可能会买几本。我建议你去一家书店,然后拿几本比较入眼的C或C++书看,直到找到一本或几本你能看懂,并且可以拿来学习的。同时,你可能会想要一些更深入的,或者一些材料,但是你一旦对于这门语言有了一些了解,我相信你应该有自己更好的选择。
   在这里,我有必要花一些时间,来说我看到很多初学者所关心的一个事情,特别是年轻人:没有钱买书和其他东西。首先,有很多免费资源可以利用,图书馆,Macmillan Computer Publishing( www.mcp.com/personal),有成千上百的编程书籍。但是如果你真的想要成为一个好的程序员,还是应该投入一部分资金。应当想方设法(合法的)帮助你弄到一些钱。
   网上也有很多C/C++的学习指南。但是我认为那只能作为补充而不是你自学的主要资源。
    选择正确的编译器
   你写的程序,或者代码,是以文本方式储存的,你甚至可以用记事本写C/C++程序。但是总需要有东西把他们转换成为可执行文件。对于C和C++,那就是编译器。
   可用的编译器有好多种,包括很多免费的。选择一款自己适合的编译器很重要,免费的编译器就有这样的好处,你可以把它们试个遍,然后从中选择自己最喜欢的。然而,免费编译器比起商业版,可能会缺失一些功能和大部分服务。幸运的是,多数商业版编译器也兼售介绍版或学习版,这要便宜得多,通常功能却不见得少,唯一的限制是你不能发布用它编译的程序(短时间内你也根本用不着)。
   总之,选择编译器取决于你能花多少钱,用什么操作系统,和为什么平台开发。如果要为windows开发,我强烈推荐Microsoft Visual C++。他强大的开发环境使得很多事做起来更方便,毫无疑问没有其他编译器更适合开发windows应用程序。如果你是个学生,你还可以折价买到。(译者:爽!)如果你在DOS平台开发,你最好的选择可能是DJGPP,免费的哦~。
    选择开发平台
   尽管最终你很可能为好几个平台开发,总要先选择一个来学。当你在学这门语言,还没有接触到图像的时候,你可能会想使用非图形用户界面的操作系统,比如DOS,Unix.这样可以避免接触高层,比如windows编程,让你集中精力学习语言本身。
   一旦你做好开发游戏的准备,那么,应该考虑是否改变平台,让我们来看看每个选项的特征。
    windows:如果你想成为游戏行业的专家,或者如果你想让许多人来玩你开发的游戏,那么,这就是你要选择的平台。因为多数你的用户使用windows,而且现在我也看不出有什么改变的迹象。当今大多数的windows游戏都是由一种你可能听说过技术---DirectX---开发的。你可以DirextX这个库直接访问硬件,这意味着你可以开发高性能的游戏。
    DOS:DOS过去是占统治地位的游戏平台,但是已经一去不复返了。尽管可能有一些特殊爱好者还在为DOS开发游戏,现在没有一个为DOS开发的商业游戏,他也将继续衰落,直到微软不再支持。如果你只是想开发游戏,还是不要选择DOS,如果你非要这么做,也不要太久。记住:由于存在大量DOS游戏开发的书,可能还有人辩护从这些书中学习DOS游戏开发。但是,windows游戏开发的书越来越多,那些辩解也变得越来越无力。
    Linux:Linux是Unix的一种,由于很多原因后来变得流行,包括稳定性,价格,和反微软情绪。尽管Linux用户还是相当少,但是围绕着他的热情和不断增长的市场潜力使其也成为不错的选择。
    Macintosh:MAC有大量忠实粉丝并不能说明什么,几乎每一个和我讨论的MAC狂热者都需要更多更好的游戏。我没有见过多少MAC游戏开发资源,但我相信还是有的,因此这也是一个选择。
    consoles:console(就是PS,N64,DC等等)的游戏市场十分巨大,当然console游戏开发的前景也不错。然而以非商业的形式开发console游戏,出于各种原因,在现在似乎行不通。如果你开发console,很可能是在被商业游戏开发组雇用之后。
    开始进入主题
   现在是时候讨论开发游戏了。简单起见,我假设你选择用C/C++在windows平台开发,可能你选择别的,但大多数我说的还是有用的。
   首先,甚至在你打算开始开发游戏之前,你必须很好掌握C和C++.你应该懂指针,数组,结构体,函数,可能还有类。如果你精通他们,就可以开始做游戏了。
   这篇文章可能不能教会你所有关于开发游戏的东西。幸运的是,也没有这个必要。这方面有很多书,网上也有很多指南。GameDev.net应该有所有你想要的东西,这里我建议你怎么开始:
    找一本或几本书。对于windows游戏开发初学者,Tricks of the Windows Game Programming Gurus是个完美的开始。除此之外,在我们的?????还有许多好书.读透这些书,试试所有的例子,不懂得部分多读几遍。
    网上指南作为补充。除了弄清书上读到的,他们还涉及一些书上没有谈及的主题。
    向专家寻求帮助。如果你不能在书上或指南找到问题的答案,好好利用我们的论坛和聊天室。那里有好多专家愿意帮助别人。
   这并不是要你按照顺序执行的,而是可以同时并且不断的重复执行。
    光学习还是不够的,你必须运用你所学到的。从一个小游戏开始,然后在这个基础上前进。你可以看一下Geoff Howland's 的著作: How do I Make Games? A Path to Game Development.
    开始,自己独立工作。不要急着加入团队,那样只会减缓学习过程。而且一旦你有了自己的几个游戏,你可以为团队做出更大的贡献。
   还有关于书,你应该不仅仅看游戏开发的书。为了能够开发出你看到商店出售的游戏,你应该钻研比大多数游戏开发书籍更高级的一些主题。有一些可以在网上找到,但你也应该选一些图形学,人工智能,网络,物理学等方面的书。计算机科学学位看来唾手可得,但因为你被迫上这些课的时候可能认为他们和游戏开发无关----你错了!
    包装
   这里有一些提示很有用
    不要只积累知识,用它
   你永远不会知道会理解一些东西知道你是用他们。用你学的东西作些演示。做作书上的练习。
    多玩游戏
   这样做会使你做出更好的游戏。而且可以减轻编程的枯燥。
    帮助别人
   能帮别人的地方尽量帮助别人,教别人的过程中自己会学到更多。
    有始有终
   不要有这样的想法:“我能够完成这个游戏了,但是我又有一个新的想法,那就直接做下一个。”你可以学得更多如果你完成他,你也可以用事实证明你不是只会空谈。所以,尽量不要做很大很复杂的游戏,直到你有了一定经验。
   开始吧!你现在可以开始准备QUAKE4了。可能你不是不是很了解,但是至少应该知道如何开始这条道路,找多些资料,加上多年努力工作,他一定会实现!





















 
最颓废的和最消极的
@ 2005-04-19 16:41

从小到大
为什么每次都要努力
我只想偷懒一次
哪怕只是一次也好
为什么每次都要靠自己
给我一点运气
哪怕只是一点也好

但是
我用了二十多年
终于证明两件事情
一,我不会偷懒!
二,我没有运气!


 
引擎
@ 2005-04-19 16:31

是个好东西!
我确信毕业前能做成一个很土的三维引擎
一年之内做成强大的三维引擎
三年之内,也就是2008,做成伟大的游戏引擎!


 
飞鱼
@ 2005-04-15 11:16

我,25岁
直觉很准、运气很差!
因为瘦显得高------清高!
因为自信显得帅------坦率!
很善良,像水,哪里需要去哪里。
很随性,像风,吹到哪里是哪里。
喜欢打游戏,各种各样的游戏,尤其是休闲类游戏;
喜欢运动,各种各样的运动,尤其是奥运会比赛项目;
喜欢看电影,各种各样的电影,尤其是能让我觉得人生更完整的电影;
喜欢音乐,各种各样的音乐,尤其是能改变我性情的音乐;
喜欢看书,各种各样的书,尤其是掺杂着复杂情感和闪烁着智慧的小说;
喜欢和人交流,各种各样的人,尤其是幽默的人;
总觉得,人的生命实在有限,尽量多尝试吧,多快乐吧。


 
OpenGL(未完成)
超级飞鱼 @ 2005-04-15 10:11

OpenGL
OpenGL是以SGI的GL三维图形库为基础制定的一个通用共享的开放性三维图形标准。
采用者:Microsoft、SGI、IBM、DEC、SUN、HP等。
开发软件:动画制作 Soft Image、3D Studio MAX
              仿真       Open Inventor
              VR         World Tool Kit
              CAM       ProEngineer
              GIS        ARC/INFO等

OpenGL 功能
1。建模 2。变换 3。颜色模式设置 4。光照和材质设置 5。纹理映射 6。位图显示和图像增强
7。双缓存 8。消隐算法
OpenGL图形库共有一百多个函数,其中包括核心函数115个,前缀"gl".
OpenGL实用库(OpenGL utility library, GLU)的函数功能更高级,共43个,前缀"glu".
OpenGL辅助库(OpenGL auxiliary library, GLAUX)的函数是一些特殊的函数,共有31个,前缀"aux".
另外还有六个WGL函数,用于和Windows系统连接。
作为一个与硬件独立的图形接口,OpenGL不提供硬件设备操作函数,同时也不提供复杂性体的图形操作函数。用户必须从最基本的图形单元构造三维模型。

OpenGL基本几何图元绘制
1.点、线、多边形
glBegin(GLenum mode);
glVertex{234}{sifd}[v](TYPE coords);
glEnd();
其中mode可以是。。。。。。其中一种
注意:多边形必须为凸多边形,否则必须进行剖分。
2.设置点、线、多边形属性
glPointSize(GLfloat size);
glLineWidth(GLfloat width);
glLineStipple(GLint factor, GLushort pattern);
glPolygonStipple(const GLubyte *mask);

glColor();
glIndex();
glNormal();
glEvalCoord();
glCallList();
glCallLists();
glTexCoord();
glEdgeFlag();
glMaterial();

Windos环境下的OpenGL编程机制
一般Windows绘图通过GDI和设备上下文DC(Device Contexts)实现;
OpenGL绘图是在渲染上下文RC(Rendering Contexts)和设置了像素格式的DC一起作用下进行的。

由PIXELFORMATDESCRIPTOR结构描述

一个线程只能同时拥有一个当前的渲染上下文RC。用户如果在一个线程内对不同设备作图,只能通过调用函数wglMakeCurrent更换与RC对应的DC来完成,与此对应,一个RC也只能属于一个线程,不能被不同线程同时共享。

OpenGL变换
几何变换
glLoadMatrix{fd}(const Type *m);
glMultMatrix{fd}(const Type *m);
glTranslate{fd}();

投影变换
正射投影、透视投影
OpenGL 投影分为正交投影和透视投影。

正交投影即将 3D 模型平行的映射到平面上。函数:

glOrtho(xleft, xright, ybottom, ytop, znear, zfar);

透视投影将 3D 模型映射到相对某个观察点的平面上。 函数:

gluPerspective(fovy, aspect, znear, zfar);

 OpenGL 几何变换可以:平移, 旋转, 缩放。
glTranslatef(x, y, z);

glRotatef(θ, x, y, z);

glScalef(x, y, z);

为了维护几何变换和投影变换, OpenGL 维护两个栈: 投影变换栈, 几何变换栈。 每次投影或者几何变换, 都是用相应的矩阵乘对应的栈顶元素, 并替换掉上次的栈顶。 每次要计算屏幕输出时, OpenGL 采取这样的方式进行:
屏幕坐标点 = 3D 模型点 * 几何变换栈矩阵(n...1) * 投影变换栈矩阵(n...1)。
上面的 n...1 表示从栈顶到栈底。 更复杂点的流程是:
屏幕坐标点 = 3D 模型坐标 -〉 (几何变换矩阵) -〉 人眼坐标 -〉 (投影变换矩阵) -〉 正则设备坐标(相对于 OpenGL 屏幕坐标原点) -〉 校正成窗口坐标(相对于窗口坐标)
一般的, 如果想变化观察模型的角度, 可以在切换到几何变换栈的时候进行:
glMatrixMode(GL_MODELVIEW); // 模型视图矩阵
glLoadIdentity();
gluLookAt(6.0, 8.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 旋转视点


变换细节。 OpenGL 使用状态机的思想。 我们可以用两个函数切换当前栈。
切换当前操作的栈为投影变换栈:glMatrixMode(GL_PROJECTION);

切换当前操作的栈为几何变换栈:glMatrixMode(GL_MODELVIEW);

其中可以使用下面的函数来清除当前操作栈的内容:
glLoadIdentity();

对于几何变换栈, 还有下面两个操作可以使用:
glPushMatrix();                         // 保存当前坐标系

glPopMatrix();                          // 恢复当前坐标系

glPushMatrix 复制当前栈顶, 并把复制的内容再次放到栈顶上, 能够保护栈上以前的内容。
一般的,我们可以这样操作栈:
glMatrixMode(GL_PROJECTION);             // 切换到投影变换栈

glLoadIdentity();                        // 初始化投影变换栈

gluPrespective(30.0, aspect, 1.0, 50.0); // 压入透视投影矩阵

glMatrixMode(GL_MODELVIEW);              // 切换到几何变换栈

切换到 GL_MODEVIEW 时, OpenGL 自动清空几何变换栈的内容。

裁剪变换

视口变换

显示列表

帧缓存和动画

OpenGL纹理映射
纹理定义
纹理控制和滤波

OpenGL光照
设置光源

明暗处理
材质
void glMaterial{if}[v](GLenum face,GLenum pname,TYPE param);
face可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK,它表明当前材质应该应用到物体的哪一个面上;pname说明一个特定的材质;param是材质的具体数值,若函数为向量形式,则param是一组值的指针,反之为参数值本身。非向量形式仅用于设置GL_SHINESS。pname参数值具体内容见表:
参数名                                 缺省值                                 说明
GL_AMBIENT                        (0.2, 0.2, 0.2, 1.0)                材料的环境光颜色
GL_DIFFUSE                         (0.8, 0.8, 0.8, 1.0)                材料的漫反射光颜色
GL_AMBIENT_AND_DIFFUSE                                             材料的环境光和漫反射光颜色
GL_SPECULAR                      (0.0, 0.0, 0.0, 1.0)                材料的镜面反射光颜色
GL_SHINESS                          0.0                                     镜面指数(光亮度)
GL_EMISSION                      (0.0, 0.0, 0.0, 1.0)                 材料的辐射光颜色
GL_COLOR_INDEXES             (0, 1, 1)                               材料的环境光、漫反射光和镜面光颜色
     材质的颜色与光源的颜色有些不同。对于光源,R、G、B值等于R、G、B对其最大强度的百分比。若光源颜色的R、G、B值都是1.0,则是最强的白光;若值变为0.5,颜色仍为白色,但强度为原来的一半,于是表现为灰色;若R=G=1.0,B=0.0,则光源为黄色。对于材质,R、G、B值为材质对光的R、G、B成分的反射率。比如,一种材质的R=1.0、G=0.5、B=0.0,则材质反射全部的红色成分,一半的绿色成分,不反射蓝色成分。也就是说,若OpenGL的光源颜色为(LR、LG、LB),材质颜色为(MR、MG、MB),那么,在忽略所有其他反射效果的情况下,最终到达眼睛的光的颜色为(LR*MR、LG*MG、LB*MB)。
  同样,如果有两束光,相应的值分别为(R1、G1、B1)和(R2、G2、B2),则OpenGL将各个颜色成分相加,得到(R1+R2、G1+G2、B1+B2),若任一成分的和值大于1(超出了设备所能显示的亮度)则约简到1.0。
     最后,材质是单个物体的属性,对于不同物体,应该分别设置。
注意很重要的一点:不管是单个还是多个光源,LIGHT0和其他光源如LIGHT1、LIGHT2等等效果是不一样的,默认设置不同,在相同条件下得到的结果也不一样。具体原因不知道为什么,但是测试一下就会发现确实有很大差别。


OpenGL字体


 
策划书的样式[转载]
@ 2005-03-29 13:34



某天在网上乱搜艘出来的帖子,也不知道这个是否通用,反正拿来供大家参考,总比什么格式都不会没方向下不了手的好。不过这个好象一个策划报告,更适合部门企划。。。。。。。。

立项阶段:(先送上一小堆废话)
产品的立项事关重大,所以立项前期的准备工作非常重要,千万不能单从“我觉得……”“市场上还没有……”“这个项目肯定……”的个人喜好来进行产品的立项。(除公司不属于商业运做模式或是独立制作小组的)
对于产品的立项,一定要有朝前看的思路,“跟风”的作风虽然让很多人觉得厌烦,但是“跟风”的行为在商业上有一定的保证性,所以并不排除可能“跟风”的项目成立。
一个游戏制作公司要有一个风格,切忌那种什么都想做,觉得什么都能做的思想,这其中的利弊是不言而预的,同时要最大限度的利用已有引擎来制作游戏,同时不断升级引擎(如果该引擎有升级的必要)。这是一个技术风格的确立,
同时还要有一个游戏风格的确立,这种风格如同企业文化的风格类似,如暴雪就属于欧洲神话和超现实风格,中国目标主要以中国古典风格等,确定了这两个风格,为以后公司在确定发展方向中确定了定位。

一、 市场调研(根据公司风格来进行针对性的资料收集)
市场调研期间需要制作的文件有“销售资料”“项目信息”

a) 收集市场的资料包括市场部门提供的销售资料和收集的反馈信息及从销售商处取得的其他游戏的销售记录
i. 包括个人经验,各类游戏的销售数量、销售商对市场的需求意愿、
ii. 可由市场人员进行整理,并根据市场人员的工作记录来整理资料
iii. 资料名称:市场调研-销售资料
iv.
b) 其他厂商正在制作的项目(做一定的了解即可)

c) 将要引进的游戏项目
i. 包括项目类型、预定运营方式、上市时间、价位、市场定位,技术成分、宣传方式等

d) 市面上正在流行的游戏项目
i. 游戏名称,排名、类型、玩点

e) 玩家对项目的建议和意见收集(去弊求实)
以上B、C、D、E统一制成表格文件:市场信息-项目信息

二?研究分析
研究分析期间需要制作的文件有“立项报告”“项目初期策划文档”

a) 当资料收集完毕后,根据公司风格和资料进行分析,期间需考虑公司现有的技术资源和技术能力的影响。

b) 完成项目立项报告:内容包括项目名称、立项人、立响时间、基本玩法玩点、故事背景,消费群等,可以同时交付多个立项报告用来挑选。

c) 某立项报告一旦通过,则需要对该报告进行深入内容的工作。命名为项目初期策划文档
项目初期策划文档内容包括:游戏类型、世界观设定、玩法玩点总结、开发计划、资金预算、工作量预估、人员预估

d) 审查敲定:定义游戏中的各个元素,并确定可行性。
注:次此的最终审查将确定整个游戏

三、 设计阶段:
a) 可行性分析报告(开会决定所设计内容是否完全可以实现)
i. 报告内容有,
1. 功能技术要求:会议敲定可以制作的内容
2. 开发预估
a) 包括人员、机器配置、所需资金、办公条件、所需时间的内容

b) 规则脚本:
i. 项目名称类型:
ii. 规则:
iii. 脚本或故事情节确定
iv. 游戏因素:如技能、物品等

c) 美术工作总表:(制作的数量和要求)部分内容后期填写,
1. 场景:需要的场景
2. 物品:包括道具、货物、装备等
3. 动画:包括特效、片头、片尾、过场等
4. 人物:包括行动、攻击、静态图、状态
5. 界面(后期填写)
6. 按钮(后期填写)
(所有美术工作由美术总监把关,程序人员可以进行引擎的设计工作)

四、 界面流程及详细说明
a) 界面规则说明:
i. 内容有各种界面中使用的表现形式,如什么是界面、什么是显示区域、按钮……
ii. 什么是拖拽、点击、漫游等与界面文档相关的名词解释。
iii. 命名规则

b) 界面(所需内容如下)
i. 因素
1. 界面因素:整体界面的大致布局,如界面中的按钮布局及显示区域的格局
2. 文件名要求统一,如有风格要求需注明
3. 显示区域:要求说明美术风格,如是否透明处理等
4. 按钮因素,按钮规格大小,按钮属性文件名要求统一,如高亮或按下等效果的文件命名
5. 目录存放地址说明,包括更新目录和备份目录地址
ii. 制作说明
1. 界面部分是主要提供给美术制作人员的指南部分
2. 界面必须依据游戏的最终规则来制定,不然对界面的改动将会影响很大
3. 开始创建了界面文档时,需要与主美确定界面的整体风格,再确定了美术风格后,由策划进行合理的布局安排
4. 建立美术工作目录,包括存放目录及更新目录等
5. 提供了界面文档后,美术人员必须按照所提供的目录进行存储和按照要求更新
6. 美术制作的界面在进行备份时,不要合层,但是要提供合层后的界面图片给程序人员。

c) 界面说明(目录名):
i. 因素
1. 界面流向:界面的子父级关系,包括界面来源
2. 按钮说明及流向:按钮的指向界面及按钮的基本功能
3. 显示区域内的详细内容:包括文字内容或图象要求(如小地图)
ii. 制作说明
1. 界面说明部分是提供给程序使用的
2. 在制作界面说明前,先提供一个游戏的整体界面流程图,方便了解游戏的整体界面流程
3. 需要建立一个界面格式说明文件,程序在使用界面说明前应该了解界面说明文件中的格式内容
4. 界面说明的制作前提是在规则确定合界面文档完成后进行

d) 按钮功能(介绍界面中各个按钮的功能及指向)
i. 因素
1. 按钮来源:按钮位置,按钮编号及按钮状态(如不可选状态或高亮等)
2. 点击效果:点击后的文件的调用或数据库的调用说明,
3. 操作过程:按钮功能的实现过程流程,实现过程流程中使用的其他界面或按钮的说明
4. 相关变动:实现按钮功能时的数据变动说明
ii. 制作说明
1. 按钮功能文件提供给程序
2. 程序应该完成编辑器的工作,在编辑器中确定具体的文件位置等

五、 模块部分:
a) 模块的分类要准确,具体根据游戏设计的内容以程序的工作性质来划分

b) 模块内容
i. 因素
1. 设定说明,也就是基本设定
2. 分类说明:按类型分别描述规则
3. 相关设定说明:与该模块相关属性及内容的说明
4. 公式数据:数据记录内容,公式算法,
5. 一些数据的最小最大限制
6. 所需如技能或道具等的数量
7. 各类所能被影响的属性内容

ii. 制作说明
1. 模块工作是规则设计工作中最后的一环
2. 模块工作中大多数据都是要进行后期调整的
(此时程序人员的引擎应该准备完善)

c) 编辑器文档:这里把编辑器也放在模块部分内,以便于理解,制作时,编辑器部分需要单独处理
i. 因素:
1. 提供后期的编辑功能
2. 说明各个编辑内容的可编辑内容
3. 提供编辑器对各类数据的分类和规范
分类内容有父子级关系的说明,并按照商定格式填写。
(此内容规范格式需按照游戏来完成)
4. 按照模块将各内容接口制作成一个功能强大的编辑器,编辑器可编辑场景、NPC、人物属性、道具、任务、事件、关卡等
例:人物属性中包括装备属性,道具属性,任务属性等
5. 提供编辑格式,以便数据库的导入和直接在编辑器中添加数据
(编辑格式)

六、 后期阶段:
a) 库建立:库的建立与游戏设计的内容相关,以下内容为临时内容
i. 物品库
1. 内容有:编号、名称、使用效果、文字信息及编号、影响属性内容、使用限制、使用要求、使用图片的编号等
ii. 事件任务库:
1. 内容有:编号、名称、使用效果、文字信息及编号、影响属性内容、使用限制、使用要求、使用图片的编号等
iii. 文字信息及对话库
1. 包括对话文字、提示文字、帮助文字、过场文字等
iv. 音乐音效库
v. 以上内容的属性分类,并将各类内容制作放到数据库或编辑器内

b) 测试:
i. 测试说明书
1. 包括测试内容
2. 管理说明
3. 项目名称
ii. 测试模版
1. 包括项目名称、测试内容、测试日期、测试编号、测试人签名、测试结果

c) 调试记录:按照测试所测试出的内容进行分析,研究改动的可行性
i. 每次进行的测试和调试都要被保留下来,以文本或表格的形式放在调试记录中
1. 内容有,出现的问题、测试的时间、上报时间、测试编号、修改意见、修改日期、修改结果、修改人签名

d) 宣传文档:
i. 准备多篇不同内容风格的稿件,字数不等
1. 如给报纸和给专业杂志的文章所要求的就不同

e) 广告词及建议的促销计划
i. 如此部分市场部实施,则需要向市场部提交游戏的设计资料和详细游戏资料

f) 网站维护管理说明;填写需要维护或管理的内容

g) GM管理规范
i. 内容有GM权限、工作内容、GM管理内容

七、 最后
a) 文档整理文件:
i. 将所有资料重新整理并保存,作为以后游戏的信息资源,
ii. 指出所有文件的存放地址,及简单的文档说明
iii. 如有时间,可以做文件的连接

b) 作品整理文件:将所有程序及美术资源刻盘保存
i. 指出所有文件的存放地址,及简单的文档说明
ii. 如有时间,也可以做文件的连接



 
给C++初学者的50个忠告[转贴]
@ 2005-03-29 13:26


  1.把C++当成一门新的语言学习(和C没啥关系!真的。);
  2.看《 Thinking In C++》,不要看《 C++变成死相》;
  3.看《 The C++ Programming Language》和《 Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;
  4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;
  5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;
  6.会用Visual C++,并不说明你会C++;
  7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;
  8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;
  9.看Visual C++的书,是学不了C++语言的;
  10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?
  11.浮躁的人容易问:我到底该学什么;——别问,学就对了;
  12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;
  13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!
  14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;
  15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;
  16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;
  17.C++不仅仅是支持面向对象的程序设计语言;
  18.学习编程最好的方法之一就是阅读源代码;
  19.在任何时刻都不要认为自己手中的书已经足够了;
  20.请阅读《 The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;
  21.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;
  22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;
  23.请看《 Effective C++》和《 More Effective C++》以及《 Exceptional C++》;
  24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;
  25.和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;
  26.请看《 程序设计实践》,并严格的按照其要求去做;
  27.不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;
  28.C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;
  29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;
  30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;
  31.学习编程的秘诀是:编程,编程,再编程;
  32.请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《 设计模式(Design Patterns)》《 The Art of Computer Programming》;
  33.记住:面向对象技术不只是C++专有的;
  34.请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;
  35.把在书中看到的有意义的例子扩充;
  36.请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;
  37.经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;
  38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;
  39.C++语言和C++的集成开发环境要同时学习和掌握;
  40.既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;
  41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;
  42.当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);
  43.别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;
  44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;
  45.每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;
  46.记录下在和别人交流时发现的自己忽视或不理解的知识点;
  47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;
  48.保存好你写过的所有的程序——那是你最好的积累之一;
  49.请不要做浮躁的人;
  50.请热爱C++!



 
美国畅销书《对生活的一点小小建议》[转贴]
@ 2005-03-29 13:25

1、开最便宜的汽车;但买最好的房子--在经济实力允许的情况下。
2、永远不要抛弃朋友,永远要选择朋友。
3、在向朋友泄露私密前,要三思。
4、永远不要说发你薪水的人的坏话。
5、找女朋友时千万要小心,因为她对你今後一生的幸福与否起了90%的作用。
6、要提防那些永不吃亏的人。
7、每天抽空散步三十分钟。
8、学会急救。
9、学会替那些爱你的人考虑。
10、学会原谅自己和别人。
11、要做到让你的孩子一想起公正和完美,就想到你。
12、即使困难重重,也要设法与家人一起度假,随著时间的流逝,这类回忆将 成无 价之宝。
13、外出旅游时,在钱包上放一小张写有你姓名、私人电话、朋友的电话及身体状 况的卡片。
14、每天喝六杯水。
15、要学会发现并永远相信人世间的真、善、美。
16、当某人将你拥入怀抱时,千万别让他(她)松手。
17、获得成功後,一定要静下心来考虑内心是否平静,人是否健康和充满爱心。
18、每年春天植一棵树。
19、好好想想,婚姻的成功取决於下面两点:找一个好人;自己做一个好人。
20、当你想指责双亲、妻子或孩子时,要学会克制。
21、每天做点家事,以巩固和改善婚姻。
22、当你对别人说好话时,要让自己的孩子也听到。
23、永远不要低估一句友善的话,或一桩好事的作用
24、要懂得:幸福并不取决於财富、权力和容貌,而是取决於你和周围人的相处

你可能感兴趣的:(技术文章,游戏,图形,语言,编程,windows,编译器)