如果以后从事游戏编程基础课需要掌握哪些知识,我现在知道的只有c++,物理,数学

物理在我们生活中随处可见贯穿我们生活的每个角落,要想先学好物理就要先对物理产生兴趣。苹果从树上掉下牛顿发现了万有引力定律;两个铁球同时落地,伽利略发现了自由落体定律;因浴缸里的水位会因自己身体浸入而上升阿基米德发现了浮力定律。我们身边隐藏着许多有趣的物理定律和規律等着各位同学去探索

物理是一门逻辑性很强的学科,学好物理既要有一定的数学知识为基础更要有较强的逻辑思维能力。平时佷多学生感到物理难学。实际上只要抓住物理学的特点,掌握正确的学习方法是完全可以把物理学好的。

一、学好物理首先要重视基礎知识的理解和记忆

基础知识包括三个方面的内容:即基本概念(定义)基本规律(定律),基本方法

同学们一开始学的几乎都是自然现象,三態的互化很多问题一下有些饶人,但理清知识点后就容易进入状态了到了光学章节, 如:对于“凸透镜”一节的概念的理解“透镜”就是可以让光“透”过的光学元件,所以是用玻璃等“透明”材料制成的。

关于“凸透镜”“凹透镜”的定义则从透镜的形状和“凹、凸”两个字的形状上找相似点而关于“焦点”则是利用凸透镜会聚太阳光可以把地面上的纸“烧焦”这个角度去考虑,可以和望远镜、远视镜及近视眼镜结合了理解

在理解的基础上,用科学的方法把学过的大量物理概念、规律、公式、单位记忆下来,必要的死记硬褙原理等还是有必要的成为自己知识信息库中的信息。前面学过的知识是后面学习的基础。

反复自我检查反复应用,是巩固记忆的必要步骤所以每次课后的复习,单元复习解题应用,实验操作章节复习等,都应有计划做好安排才能不断巩固自己的记忆。

二、 掌握科学的思维方法

物理思维的方法包括分析、综合、比较、抽象、概括、归纳、演绎等在物理学习过程中,形成物理概念以抽象概括为主,建立物理规律以演绎、归纳、概括为主而分析综合与比较的方法渗透到整个物理思维之中,特别是解决物理问题时分析综合方法应用更为普遍,如下面介绍的顺藤摸瓜法发散思维法和逆推法就是这些方法的具体体现。

(1)顺藤摸瓜法即正向推理法,它是从已知條件推论其结果的方法这种方法在大多数的题目的分析过程都用到。

(2)发散思维法即从某条物理规律出发,找出规律的多种表述这是形成熟练的技能技巧的重要方法。例如从欧姆定律以及串并联电路的特点出发,推出如下结论:串并联电路的电阻是“越串越大越并樾小” ,串联电路电压与电阻成正比并联电路电流与电阻成反比。

(3) 逆推法即根据所求问题逆推需要哪些条件,再看题目给出哪些条件找出隐含条件或过度条件,最后解决问题

三、重视课堂上的学习上课

开动脑筋勤于思考,没有积极的思考、不可能真正理解物理概念囷原理我们从初中开始,就要养成积极动脑筋想问题的习惯

上课要认真听讲,不走神或尽量少走神上课以听讲为主,还要有一个笔記本有些东西要记下来。知识结构好的解题方法,好的例题听不太懂的地方等等都要记下来。课后还要整理笔记一方面是为了“消化好”,另一方面还要对笔记作好补充笔记本不只是记上课老师讲的,还要作一些读书摘记自己在作业中发现的好题、好的解法也偠记在笔记本上,就是同学们常说的“好题本”辛辛苦苦建立起来的笔记本要进行编号,以后要经常看

四、重视对所学知识的应用和鞏固

要及时复习巩固所学知识。对课堂上刚学过的新知识课后一定要把它的引入,分析概括,结论应用等全过程进行回顾,并与大腦里已有的相近的旧知识进行对比看看是否有矛盾,否则说明还没有真正弄懂这时就要重新思考,重新看书学习.在弄懂所学知识的基礎上要及时完成作业,有余力的同学还可适量地做些课外练习以检验掌握知识的准确程度,巩固所学知识

时间是宝贵的,没有了时間就什么也来不及做了所以要注意充分利用时间,而利用时间是一门非常高超的艺术

比方说,可以利用“回忆”的学习方法以节省时間睡觉前、等车时、走在路上等这些时间,我们可以把当天讲的课一节一节地回忆这样重复地再学一次,能达到强化的目的

物理题囿的比较难,有的题可能是在散步时想到它的解法的学习物理的人脑子里会经常有几道做不出来的题贮存着,这些都是正常的这是任哬一个初学者走向成功的必由之路。

学习物理要重视物理过程的学习要对物理过程一清二楚,物理过程弄不清必然存在解题的隐患题目不论难易都要尽量画图,有的画草图就可以了有的要画精确图,要动用圆规三角板,量角器等以显示几何关系。

画图能够变抽象思维为形象思维更精确地掌握物理过程,有了图就能作状态分析和动态分析状态分析是固定的,死的间断的。而动态分析是活的連续的。

2.整理自己的学习资料习资料要保存好做好分类工作,还要作好记号

学习资料的分类包括练习题、试卷、实验报告等等。作记號是指比方说对练习题吧,一般题不作记号好题、有价值的题、易错的题,分别作不同的记号以备今后阅读,作记号可以节省不少時间

3.向别人学习。要虚心向别人学习向同学们学习,向周围的人学习看人家是怎样学习的,经常与他们进行“学术上”的交流互敎互学,共同提高千万不能自以为是。也不能保守有了好方法要告诉别人,这样别人有了好方法也会告诉你在学习方面要有几个好萠友。

4.归纳知识结构要重视知识结构,要系统地掌握好知识结构这样才能把零散的知识系统起来。大到整个物理的知识结构小到力學的知识结构,甚至具体到章节

 5.要正确使用数学工具: 数学是研究物理的重要工具,在学习物理时我们一定要正确地运用好这一工具。应用数学工具学习物理要注意以下几点:

(1)要把概念、规律的数学公式,与用文字、语言叙述结合起来真正理解式子的物理含意,不偠单从纯数学关系上理解公式避免产生物理意义上的错误。例如求平均速度,并不是求速度的平均值要用总路程除以总时间,而不昰把不同的速度加起来除以几

(2)在进行物理计算、推理时,要把物理计算和简洁的文字说理结合起来才能使解决问题的过程物理思路清晰,方法简明严格计算得到的结果,也要明确它的物理意义

(3)要养成用作图来表示物理过程和规律的习惯,如画物体受力图简单机械嘚力图,晶体的熔解曲线物体的运动情况图,光路图等自觉学会按题画图,看图识义提高正确用图的能力,克服做练习不画图不鼡图的坏习惯。

学习物理就是:学知识学方法,提高动手能力 在初中物理课中,我们不但要掌握物理学的基础知识还要掌握一些研究自然科学的方法(科学观察),培养从事生产和探索未知事物的能力

只要按照正确的学习方法进行学习,在初二上的学习阶段可以学得赽而好,初二上的计算题较少可以为初二下及初三打下扎实的理论基础,后期学起物理轻轻松松

}

本人大约从20多年前开始学习及使鼡C++但仍未达到我认为「精通」的阶段,甚至对于C++11的各种新特性也未掌握然而因为我是在读书时自学C++的,也是游戏程序员(原问题中提箌题主想从事)觉得也许能提供一点意见供网友参考。

首先引一下2010年8月号《程序员》刊登的拙文《》最后一段:

C++缺点之一是相对许多語言复杂,而且难学难精许多人说学习C语言只需一本K&R即可,但C++书籍却是多不胜数我是从C进入C++,皆是靠阅读自学在此分享一点学习心嘚。个人认为学习C++可分为4个层次:

  • 第一层次,C++基础:挑选一本入门书籍如、、或Stroustrup撰写的经典或他一年半前的新作,而一般C++课程也止于此另外及可供参考;
  • 第二层次,正确高效地使用C++:此层次开始必须自修阅读过《()》、《()》、及等,才适宜踏入专业C++开发之路;
  • 第三层佽深入了解C++:关于全局问题可读、、、,要挑战智商可看关于模版及模版元编程基础课的书籍如、、;
  • 第四层次,研究C++:阅读、(含STL设計背后的数学根基)、C++标准文件、的提案书和报告书、关于C++的学术文献

由于我主要是应用C++,大约只停留于第二、三个层次然而,C++只是软件开发的一环而已单凭语言并不能应付业务和工程上的问题。建议读者不要强求几年内“彻底学会C++的知识”到达第二层左右便从工作實战中汲取经验,有兴趣才慢慢继续学习更高层次的知识虽然学习C++有难度,但也是相当有趣且有满足感的

如果题主认为的「精通」是指上述所指的第二层次,那么我估计一年全职时间也未足够「精通」首先,阅读这些书籍本身也需要不少时间而且对于一般人来说(指除了一些学习记忆能力超强的人),很可能需要阅读几遍才能记住一些细节另外,阅读后必须要练习除了入门的习题外,还需要做┅些工程向的项目才能了解各种语法、编程基础课范式的使用方法及时机,理想地建议参与一些开源项目然而,学习是需要不断思考並把结果沉淀方法包括与朋友讨论、写博客、写知乎答案等,这些都需要时间

如引文末段所指出,我建议不要把「精通C++」作为一个一姩目标应该要把学习语言作为一个持续的过程,同时要把语言运用在具体的应用场合中

再讨论C++与游戏开发。

看到有不少答案讨论到有關C++是否游戏开发者所必须的技术我认为,这并不是完全必须的但许多游戏开发项目需要到C++。以下列举一些过往曾流行的游戏平台/类型:

  1. 掌上游戏机游戏(GB、GBA、NDS、PSP……)
  2. 智能移动设备游戏(iOS、Android)
我们会发现除了J2ME和网页游戏外,大多数的平台都支持(或只支持)原生编程基础课而原生编程基础课最常用的就是C/C++和汇编。这种现象并不难解译再次引用拙文:

哪些程序适宜使用C++?

C++并非万能丹,我按经验举出┅些C++的适用时机

  • C++适合构造程序中需求较稳定的部分,需求变化较大的部分可使用脚本语言;
  • 程序须尽量发挥硬件的最高性能且性能瓶頸在于CPU和内存;
  • 程序须频繁地与操作系统或硬件沟通;
  • 程序必须使用C++框架/库,如大部分游戏引擎(如Unreal/Source)及中间件(如Havok/FMOD)虽然有些C++库提供其他语言嘚绑定,但通常原生的API性能最好、最新;
  • 项目中某个目标平台只提供C++编译器的支持

按应用领域来说,C++适用于开发服务器软件、桌面应用、游戏、实时系统、高性能计算、嵌入式系统等

很大程度上,游戏──或说游戏引擎都是C++非常适合的应用时机。

一些人认为游戏开發者使用现成的引擎,就不需要使用C++了过往,业界有一个普遍常识就是用C++开发游戏引擎,而游戏引擎提供脚本引擎供编写游戏逻辑代碼但这个观点被Unreal Engine 4的决策改变,UE4放弃了维护多年且被大量使用的UnrealScript脚本语言而改用原生C++作为游戏逻辑编程基础课的语言。此决策背后有多個原因但这里只想举出这例子展示C++在游戏开发中的用途及潮流,具体原因分析就不详细展开了

除了自行研发游戏引擎需要使用C++,我们鈳以看到大部分游戏引擎都提供了其C++原代码(Unity算是例外),这让我们可以

  1. 深度剖析、优化游戏的性能
  2. 修改现有引擎以适应项目所需
在专業的游戏开发中这些都是很常见的工作任务。所以即使并非自研引擎,并使用脚本语言开发游戏逻辑也有很多机会需要使用C++。

最后「还需学习什么」是一个很难简单回答的问题,因为游戏开发涉及的知识面很广建议可参考本人译作。

【毛星云的回答(248票)】:

强烈反对 功利性太强的高票答案!

这是在把一个能成为业界top 1%的顶级游戏开发技术大师的黑马往能傻乎乎地受你们压榨的IT民工的火坑里推,你造吗

这让我想起了乔帮主关于“卖糖水”的那句经典话语,而我们的版本是:

你是愿意就这样学点皮毛混口饭吃随波逐流还是成为真正的游戲开发业界顶尖技术大牛,推动业界的发展去改变世界?

关于上面这句话的两个抉择我们来做个选择题。

A. 如果你是想从事游戏行业当個二流的民工打打杂一辈子就这样过去请去看兄有些对现实妥协之前排名第一的答案。(不带人身攻击的只是对事不对人而已呢) 这種太依赖IDE和游戏引擎所谓速成方式,到最后只能是二流的民工打杂的,混饭吃的知道其然,不知道其所以然遇到真正的专业性问题僦卡壳了,比如如何优化渲染质量之类的问题或者开发的项目就是那种2D的小儿科,或者山寨跟风赶进度赶上市的快餐游戏而不是画质精美,设计精良堪称经典,为国产游戏长脸推动全球游戏业界发展的革命性大作。

B. 如果你是志向高远想制作出改变世界的革命性游戲,或者推动游戏产业的发展成为游戏开发业界top 1%的技术领军人物。请熟练C++请修炼好内功。 兄 兄的答案是极好的且正如萌萌的V大 所言,就算你的志向是开发crysis这样的游戏其实也只需要用到C++的一小部分就够了。C++各种范式是发明来解决所有问题的游戏只是其中的冰山一角,你没必要精通没必要学会C++的所有部分。我们这里所说的是了解原理,学C++只是其中的一小部分与其说去不断的学C++的更多高级特性,哽好的学习方向是熟练利用C++配合DirectX或者OpenGL来制作Windows小游戏对数据结构设计模式有一定的认识,且能够准确针对问题选择你的数据结构研习计算机图形学blablabla的。

(PS:不要轻易用“精通C++“这个狂妄的词眼后文有一些关于这个梗的解释)

正如我之前在自己博客里面所转载的文章《》中說的:

“对所做的事情的理解越深,你就会做的越好”

既然题主都提到要走熟练C++,以后开发游戏这最正统的技术道路了他内心渴望的應该是志向高远,做个强者而不是去当IT民工打杂做技术含量不高的事情。

即我是不能同意更多 兄的观点

”题主还是学生,别用压榨it民笁的想法来教导!题主可以从cocos2dx和unity3d开始学游戏开发但是,如果想一直做编程基础课请别忘了必须同时修炼c++, 因为它可以给你认识到真正的編程基础课,让你懂得更多计算机编程基础课思想以后就算不写c++也可以迅速了解别的语言,别的工具的~而不会变成仅仅依靠IDE工具随便抄抄别人代码,完成山寨程序的It民工“

也不能同意更多 兄的观点。

兄在评论区说:那些不懂原理只是挑一个工具熟练掌握使用或许在當前游戏市场火热的背景下也能混得不错但是感觉很快会遇到职业瓶颈。这对自身而言就是一种风险如果一项技能你学三个月就能耍通常意味着可以轻易找到一个人代替你。

你学会这些可以让你比较容易找到一个工作但是几年之后会碰到你的职业瓶颈,要么继续学底層要么转行。否则公司会毫不犹豫地找人来替代你其实有一句话我很赞同:“程序员如果不学好底层,将毫无作为C++让你走向程序员這条路,编译原理和汇编语言等让你走得更好数学英语让你走得更远。”

大方向的话就如 兄所言,如果你是图形程序员那么最好的項目就是,自己做一个游戏引擎如果你是Gameplay Programmer,那么最好的项目就是自己做一个游戏项目。

兄在评论区说到“还是那个问题,是选择偏姠游戏(文艺方向独立开发),还是想做好技术(引擎开发技术研究,打工这个可能是大部分人的归路)。”

是时候引出游戏开发領域的两大流派了即 兄在回答中提出的气宗与剑宗。

独立开发者和小团队因为时间和精力的限制大多是以实现为目的,这也是情有可訁这就不难解释 兄所推崇的以快速实现为目的,依赖工具、引擎和不求甚解的剑宗流派有不少人的追捧(文艺方向另谈)

每个人切入這个行业的方法不尽相同,能选择最适合自己的入门方式就是最好但是入门后如果想有更好和更长远的发展,必须开始崇尚气宗一派叻解内部技术细节,修炼好内功不要流于形式,浮于表面依赖工具,而是要深钻进去了解得越深越透彻越好。最好是能自己了解游戲引擎的底层原理甚至是写出自己的游戏引擎来,这样才是更高的境界(当然这只是极少部分的顶尖高手能达到的境界)

总之,剑宗┅派适合入门这样有趣,有成就感能快速得到成果,但容易遇到职业瓶颈后劲不足。气宗一派注重内功了解原理,作为稀缺的高沝平人才资源能有更多选择的权力,有更长远的发展而且不难理解游戏开发领域是先有了气宗才有了剑宗,且了解原理内功深厚的氣宗境界更高一筹。

能找到自己的合适的方式就是最好并不是否定从引擎出发入门这条便捷之路,其实我的建议若决定走修炼技术为主的气宗一派,先学点C++然后配合着C++学一些底层API(DirectX或OpenGL),能写一些比较炫酷的三维游戏场景或者说自己实现一个小型的软引擎,再去真囸地接触引擎利用引擎做一点有趣的demo或者完整的游戏,阅读一些优秀开源引擎的源码(比如Ogreirrilicht,Unreal Engine4 cryEngine),甚至自己实现引擎或者做游戏项目这是重视技术的气宗流派比较科学的内功修习方式。

我们都知道气宗和剑宗的争执永远不会停歇,就像这个回答下的评论区永远鈈是一边倒,而是气宗剑宗的支持者平分秋色各有千秋。

我很欣慰的是这个答案写出来之后,一天之内就已经超过了当时排名第一的、已经在答案中被我@了无数次的kubisoft兄有些对现实妥协倚老卖老(不带人身攻击呢,只是对事不对人)的答案这证明大家的眼睛是雪亮的,内心还是不甘心的还是希望做个明白人,做个强者知其然并知其所以然,并且希望自己有能力站在更高的山峰去完成更大的事业。

(PS:这段貌似才算是比较理性的分析回答一开始写的有些小愤青了,但的确是肺腑之言)

既然提到了小愤青,就另外附一点我在写的┅篇年代久远带些小愤青的拙作中的一些观点:

事实如此现在市面上所有画质精美的单机游戏作品(鬼泣5,上古卷轴5刺客信条3,仙剑渏侠传5前传古剑奇谭等等……),所有的大型网络游戏(Dota2英雄联盟,魔兽世界龙之谷,剑灵等等等……)所有高性能的三维游戏引擎(虚幻3,Unity3DCry Engine3等等……),以及一些高性能的2D游戏引擎(Cocos2d-x等等),都是用C++来开发的

其实游戏引擎并没有那么神秘,说白了也就是那么回倳用类封装好功能的C++代码而已。C++写出来的游戏引擎自然能跨平台Unreal Engine3、Unity3D、Cocos2d-x等游戏引擎就是绝好的例子。

学好C++你可以亲手写出Unity3D,亲手写出 Cocos2d-X让大家都叫你大神,大家都用你写的游戏引擎做游戏等着你什么时候心情好了更新一下给引擎加更多功能;而不是只会盲目跟风,今忝大家说Unity3D火就都去学Unity3D,明天大家说Cocos2d-x热门就来学学Cocos2d-x。你学游戏引擎学的只是人家某引擎作者某C++大神按心情来定的函数调用方式,学的呮是如何调用一些别人写好的一些类一些API函数。这样在别人规定给你的一些rule中固步自封大家觉得有技术含量么?

我们是时候该该想一想了为什么现在全球范围内优秀的三维引擎,就是没有我们国产引擎的影子

所以,无论是哪个平台Windows也好,iOS也好Android也罢,如果你真正想在游戏开发领域有所作为混出个名堂,请学C++请学计算机图形学,请了解计算机图形API(OpenGL或者DirectX)而不是在跟风某种“热门”的游戏引擎的大潮中随波逐流,在某种移动平台的游戏开发中迷信某某引擎乐不思蜀,固步自封

咳,扯远了而且有些小愤青了,我并没有歧視其他编程基础课语言的意思浅墨只是想表达,无论是哪个平台(WindowsPlay Station,XboxAndroid,iOS, WindowsPhone WUII),在三维或者高性能游戏开发领域确实就是C++的天下。

答评论区 兄的一段话关于站在巨人肩膀上的一些思考。

首先对于这部分 在这篇回答的评论区,兄的文字是相当的深刻与一针见血推薦大家读一读。

1.我们并不是说支持完全去从头造轮子而是你理解的越深,就可以收放自如做个有选择权的强者。当没有合适你的轮子嘚时候当遇到技术瓶颈的时候,你自己完全可以制造个更好的前所未有的轮子,而不是懵在那边等待你所谓的巨人们心情好后的施舍,造一个合适的轮子给你用或者因为长久以来的太依赖工具而丧失了本来的能力。

我大家所希望的是能做一个真正的明白人,心中囿墨水心中有底气,然后无所畏惧遇到什么瓶颈都不虚。

我们站在巨人的肩膀上的同时不仅仅是靠业界巨人们写出来的库去实现自巳的东西,而是可以理解与吸收巨人们的思维、技术和实现方法当达到一定境界后,我们可以当下一个巨人推动业界革命。这大概就昰大牛与民工强者与弱鸡,最外在的区别与表现形式

太依赖所谓的巨人们的肩膀,太依赖工具如同井底之蛙,日复一日地调用让你崇拜的大神们写出来的类库以为只要能做到这样就天下无敌了,以为就是软件行业的全部了——这大概就是目前我们国内软件行业的誤区所在吧——依赖工具,浮于表面

2.能理解内部实现细节肯定是推崇的,这个看个人或迟或早,但是越早越好

我写这个答案只是希朢题主以及看到这个回答的朋友们能有更长远的眼界,立意更高远能有更宽的视野,能知道更大的世界而不是一辈子就这样炒炒现饭調用调用别人写的函数窝囊地就过去了。

人的一生精力有限作为一个聪明人,作为一个明白人入门的时候什么方式越快越好,但是入門之后呢如果希望自己有更好更大的发展,大方向千万不要错不要过分依赖拘泥于工具,浮于表面一定要跳出那个圈子,从井里爬絀来

即,如果希望自己变得更强不人云亦云随波逐流,最好的方式或许就是自己去理解细节也并不是咬文嚼字地要自己真正花大工夫花精力去做一款引擎,这个量力而行

人的一生精力有限,没有哪条路哪种方法适用于所有人但一个人只要能专注于自己认为值得事凊,能自得其乐那也是值得尊敬的。

3.直接用轮子并真正做出非常赞的作品出来,那也是值得尊敬的当今游戏引擎的发展,为我们提供了前所未有的便利我们可以合理的利用他,但千万不能太迷信太依赖他

但如果已经在某个领域花了10年甚至更长的时间,还没能有所突破那就得反省自己,是不是方法问题了是不是方向问题了,是不是之前研习的时候或进度太慢,还是走了很多弯路我们都清楚,并不是每个人都能有很好的技术天赋与底子当然也不是每个做游戏的人都要去理解和实现底层,要量力而行要有所侧重,要找到自巳最合适的角度我们只是从长远来看提倡将知识挖深,让自己打开眼界不做井底之蛙,不随波逐流让自己因为站得高看得远,而有哽多更广选择的权利

技术与创意,并不矛盾人生在世,有所为有所不为,游戏开发亦如此

以下算是一些关于C++的附加思考。

【关于“精通C++”这个字眼请不要滥用】

徐兄现在大三,从初一开始学习C++对这些有一定的了解,也有一定的发言权但是他从来不敢说他精通叻C++。因为徐兄的主管 15岁开始学习C语言,现在学习C++已经超过20年但是他对于技术非常的谦逊,抱着学习的心态去学习技术也没在我们面湔提过他精通C++。即使他已经是国内行业的领军人物

“我也做了两年c++了,也不敢说精通我们老大做了至少8年,也没敢说精通我认识的佷多大神,也都没敢说精通事实上我认识的很多大神都很谦虚,我跟他们学到了很多大家的简历上也都写着熟悉c++之类的字眼。”

即对於博大精深的C++业界的大牛们穷其一生去研习都不敢言能精通它。就算是天天去钻研C++一年也只能学个皮毛而已。

C++的精通细节与思考可參看萌萌的V大 的这篇回答:

至于快速入门,强烈推荐 其为C++业界入门必读《C++ Primer》的作者剥去繁杂,只讲C++核心的一本书

而后续的一些,可以參考这个豆列中的书单:

在结束回答之前感谢 兄在回答中的at,间接地邀请让我知道有这个讨论存在:)

总之,最后的最后还是那个抉择:

你是愿意就这样学点皮毛混口饭吃随波逐流,还是成为真正的游戏开发业界顶尖技术大牛推动业界的发展,去改变世界

在二十幾岁这段人生可塑性最强的时光里,我们应该是满怀信心志向高远,想让自己与这个急功近利、日渐扭曲世界有所不同的吧

题主本来問得很糊涂,不知道到底是问游戏开发呢还是如何学习c++。再说一遍结论吧游戏开发和c++的学习是两个方向,做游戏开发现在基本上不需偠学习c++以前做游戏开发不得不用c++但是现在已经越来越少,以后还会更少所以花大力气去学c++对以后做游戏开发没有多大帮助。

有人提到叻java, 其实java又不是用来做游戏的也从来不算脚本语言。

在此将c++和c#、javascript之类的脚本语言做一些简单的对比吧我的c++水平很低,遗漏之处难免欢迎指正。

内存管理: c++的代码容易产生隐藏的野指针等不容易发觉的内存管理问题而且不一定会爆,调试有点困难有人觉得这是水平不高嘚表现,心想只要成对申请/释放内存就可以了嘛!其实,我以前也是这么想的后来发现不是这样...... 实际项目会非常复杂,很多时候到底谁应该拥有这个对象、谁应该负责申请谁应该负责释放很难界定而使用c++就必须做出这样的界定,导致有的算法必须绕弯子写不少冗餘代码专门管理内存。

回调的时候用的闭包:这一点用objective c就比c++方便很多了,回调的代码可以跟调用的代码紧挨在一起书写而用c++的时候不嘚不在类里面另开方法,写起来很蛋疼名字难起还在其次,参数传输完全要靠成员变量或者void*, 然后强制类型转换这样也能写,但是可读性就差了很多维护困难。

unity给c#提供了协程用起来跟线程差不多但是不用考虑加锁解锁等问题,真心方便

几个脚本语言大多有map, filter等等函数式编程基础课的特性,考虑问题更加整体代码量会小很多,也更难出错

呵呵居然冒出一个高票长答案,吓我一跳啊不喜欢跟别人辩論,说下去没完没了啦只是看到“倚老卖老”之类的人身攻击的字样还是很不开心吧。这也就算了居然我被说成“压榨IT民工”,这个嫃让人伤心啊我忍住,无视后面写的东西,还是给旁观者看的吧希望能多帮到一些人。

游戏不仅是技术要发现更大的世界的话要開阔视野的话就不要沉迷于c++的技术细节啊。要做出有创意的与众不同的游戏也是要靠快速实现游戏逻辑然后快速迭代,多跟策划沟通啊如何快呢?就要在能够避开c++的地方尽量避开啊

c++还是很有用的,比如cocos2d-x目前还是很依赖c++;效率不够的地方也必须用c++来改写以进行优化。鈈过以后随着硬件性能的提升c++的应用范围会萎缩很多,只专注c++的程序员很容易被孤立的空间会越来越小。

关于批评我c++水平的部分不予答复关于后面一部分,工程越大越体现出脚本的优势c++的代码结构太容易混乱了。

c++更面向机器更考虑运行效率,为了运行效率不得不犧牲可读性大部分脚本在这方面就强得多,牺牲了运行效率换取了可读性

至于java, java的开发效率同样是被人骂得要死的,而且很少有人打算鼡java做游戏吧哪个引擎支持?

想做游戏开发根本就不需要精通c++根本就是南辕北辙。

你应该挑一个引擎熟悉起来3d就用unity,2d就用cocos2dunity支持c#和javascript,這两门语言你可以任意学只要能做出自己想要的游戏;cocos2d也是支持javascript和lua,能避开c++就避开c++的运行效率高而开发效率极低,学起来很累用起来哽累你要是专心学好了c++,作为老板我还真不敢要呢精通c++可能意味着过于重视运行效率而开发效率低,视野窄业务沟通困难,工资要嘚很高很高也喜欢埋头钻研但我要的东西就是很久出不来!

题主想好了是要学好c++还是学做游戏,还是要做游戏引擎

做游戏引擎可以参栲另一个问题,手机党不方便引用了大体上是“游戏公司开发自研引擎还有意义么?”

以前做游戏是只能用c++的以前基本上不管做什么嘟必须精通c/c++。现在不是现在大部分领域都有更合适的语言可以选择,做起来效率更高

脚本不只是做gameplay,所有部分都可以用脚本去做包括各种画面特效。特效其实大部分是美工的活程序员去认真考虑如何集成进来,如何在合适的地方调用而不是写代码去取代美工。粒孓特效模型,贴图你不用脚本你用c++,除了多写不少代码、多去自己管理内存调试野指针之外又能得到什么呢渲染,那是shader也不是c++。那么AI是否只能用c++了呢?当然不是否则epic搞那个unrealscript干嘛?

【王选易的回答(58票)】:

本来都不想更新了但是其他人回答的都太不靠谱了,其他人嘟是在说怎么当以个游戏逻辑开发人员但是你作为一个游戏引擎开发人员,你不会C++能行吗

游戏开发不止有一个开发游戏这一领域的。

先回答你的第一个问题一年是不能精通C++的,但是能熟悉C++的并且用C++做出一些Demo甚至一些游戏。但其实题主不是想问多长时间能学会游戏开發中的C++吧楼主想问的是如何进入游戏开发这个圈子,所以我要反对一下

不管怎么说还是要欢迎你来到的世界,游戏编程基础课是编程基础课中最小众的领域你身边的同学可能有许多的人都会各种前台开发,后台开发或者ACM算法但是做过游戏的人可以说用一个手掌就能數过来了。

但是很巧合的是我是个大三的学生,而且我现在做游戏开发那么我的经验对你来说有些价值。

然后我再尝试着回答第二个問题游戏开发还需要学些什么?

首先题主要做的是学好C++,为什么这么说呢因为不管是现在的图形引擎(如OpenGL)还是游戏制作引擎(如Cocos2d-x)都是把C++作为主力语言的。

那么我就先推荐几本C++的入门书籍吧:

楼主可以按照顺序依次看下来,由于都是我看过的书我可以完全保证這些书的质量!

接下来,楼主可以去 这些网站刷一些算法题,毕竟光说不练肯定是不行的 =_=

接着,摆在题主面前的是两条不同的发展路線

Gameplay程序员适合游戏策划紧密合作的一种程序员他们会编写游戏中的主要逻辑,为策划提供关卡编辑工具第一时间测试并玩到最新的游戲。

由于Gameplay主要集中于游戏逻辑的编写在这一块,我的经验是最好从使用一个游戏引擎开始考虑到你的C++和程序员背景,推荐你使用Cocos2d-x这个遊戏引擎下面是这个引擎的网址。

游戏逻辑部分你需要理解游戏中的场景管理,资源管理状态机,AI和网络这些模块的编写具体的操作可以查看我的这个答案:

首先,你要学习的是OpenGL首先我们要看的当然是这个红宝书了!

然后,就是读一些OGRE的源码了国内的许多“自研引擎”就是通过ORGE做出来的,所以作为一个Graphics Programmer读这个引擎的源码是非常必要的

最后呢?我们不管是当那种程序员我们最终都是要做出项目的。

如果你是图形程序员那么最好的项目就是,自己做一个游戏引擎

如果你是Gameplay Programmer那么最好的项目j就是,自己做一个游戏项目

比如说我朂近做个一个Demo类型的游戏项目:

那么题主你准备好加入游戏程序员的行列了吗?=w=

【伍一峰的回答(30票)】:

楼上如 和 前辈都答得很好

这个问題有点像剑宗和气宗。

游戏开发就是耍剑耍剑耍得好看了,观众就会赏钱

学习气宗,虽然能让你握剑更加有力耍上一天一夜也不喘氣,还能夹带一些紫气但对于耍剑来说,无关好不好看精通了C++,然后呢和游戏一点关系都没有。因为耍剑不单讲气最重要是讲艺。

因此自然是剑宗更加有效更加贴切。游戏开发里面有很多field specific的知识和技能虽相似,但和软件开发仍然不能一概而论更别以为学好游戲开发的知识容易,其实路途同样艰难只是难的地方不一样。

那么游戏开发来说剑宗和气宗是不是就一定不兼容呢?也不是有时候,你需要一些特别的机制或者特别的效果前人可能没有实现过,又无法从美术方面下手或者修改设计就需要你有扎实的编程基础课基礎来实现它。像游戏引擎就是这样想要更漂亮的画面、更好的运行效率、更方便的工作流程,才会推动引擎发展但游戏都没做过,又怎知道现有技术不能支撑你所想所要呢精通C++又解决了什么问题呢?

举个例子今年IGF学生组的最佳游戏,The Risk of Rain我一看,那么精致的画面、出銫的手感、完善的机制绝对是不简单啊,一看开发者竟是华盛顿大学机械专业和商学专业的两位年轻人开发的,用的还是GameMaker

从此我豁嘫开朗,游戏开发就是耍剑耍得好看才有饭吃,哪怕你华山掌门人

这个问题能引起那么多不同意见,很有意思

重新浏览了一遍大家嘚答案,主要有两种见解

一方是正好是我说的剑宗,主张一开始就以游戏开发相关知识为主要学习方向;

另一方是气宗主张一开始以計算机底层知识为主要学习方向。

而C++则是这一题目里两方主张的矛盾的外在表现

正如我答案的主体部分,我个人比较偏向剑宗

一个原洇是我没有进过AAA的大公司,以往两次实习都是在独立游戏公司他们的氛围都是以快速实现为主要目的。

所以我也耳濡目染将实现视为遊戏开发当中最重要的东西。

因此我较为主张初学游戏开发的话也以实现为目的,比方说选一款引擎,不断地制作游戏在这一个过程当中,我们会不断地接触到新的知识:

一开始我们在Update里面写代码,我们接触到了Game Loop

我们创建角色图像,接触到Sprite的概念

我们想用键盘控制角色移动,我们接触到了Input System

我们想让角色跳跃,接触到了Physics Engine的概念等等等等...

现在我们对Game Loop有了了解,对Physics Engine有了了解知道它们在游戏中的莋用,那么对我们学习这些领域是有莫大好处的。

正如最近关于很火的“设计模式”问答现在的观点主要是“你得遇到问题了,才真囸懂得某一个模式的好处”我觉得关于游戏开发的学习,也是这样的

当然,我不会说哪位在座哪位老师的意见是错的因为游戏开发夲身就是一个新生学科,甚至连学科也称不上自然没有对的和错的路。

【徐奕成的回答(22票)】:

我觉得可以过来再更新一次了

我说一下我莋游戏的历程吧,二年级的时候(我出生于1991.11)我开始接触电脑当时对电脑的画图工具很痴迷,为什么画图工具能够做出这么好看的东西所以我对这些所见即所得的东西非常着迷,因为我觉得很容易就开发出来一个东西炫耀

后来四年级时候,我的父母有接触一个游戏叫《传奇》我在他们没在家的时候偷偷创建了一个帐号,体验了十五分钟(没错小学生就是我)觉得游戏真的很吸引人,我是父母在我從小禁止玩游戏的所以我没有接触过任何游戏,包括红白机这应该也是很多人的童年。在那时候我的梦想就是未来能够做游戏设计師,做一个全世界的人都喜欢的游戏

慢慢CCTV某一个频道有一个栏目是一个教授开始了解有一样东西叫做powerpoint 2000.我开始拉一些图片进来,做了一个尛游戏你没看错,是ppt做了一个小游戏是类似大逃杀的游戏。点一下进一个地点有了最原始的交互。

从初一的时候我知道了有一个東西叫做VB,我也尝试用VB写程序同时开始学习一个编程基础课语言叫C,那时候我果断抛弃了C因为VB真的很容易做出一个窗口,然后写一个helloworld拿出去炫耀

兴趣是最好的老师,我爸妈说学好这些东西就可以做游戏了我就开始认认真真学C语言,当时效率也很高我现在一直觉得峩在吃老本。学C的基本概念,用控制台做一个打飞机游戏做一个RPG游戏,类似于

再到了高中,开始用VC++6来开发一些win32小游戏我觉得把游戲做好是一种使命,那时候也知道了国内著名的工作室:西山居1995 完美时空 2004 琳琅天上2004.

我的心愿就是加入他们成为真正的游戏开发者。

后来箌大学我学计算机图形学,数据结构自学编译原理,汇编语言才发现原本单纯的梦想发现是不可实现的,我不可能做出每个人都喜歡的游戏就开始学习游戏引擎制作。如果你希望能够从事引擎开发我推荐叶劲峰 @Milo Yip 大神的《游戏引擎架构》一书。

直到现在我如愿以償,成为了居士开发游戏引擎。这不是一年两年能决定的如果你要做程序,真的要多积累了

从始至终,我是抱着一种使命来学习來努力,来做游戏的当时面试的时候,面试官问我你为什么要做游戏,我说:“我一生就为了做游戏生活能够过得去就行。”我现茬也觉得我如果不做游戏,我还能做什么(我现在很局限了眼界很窄)。

我最近学校的课程是要用Objective-C开发游戏我从来没有学过oc语言,泹是我并不觉得他特别的难相反,我觉得他很容易上手开发iOS应用因为有C++的积累,我可能不知道具体的语法或者用法还有API但是我可以通过C++来融会贯通。

C++是一种潜移默化的东西当你了解他之后,你学什么都会容易觉得简单。

所以C++是重中之重!!!

吐槽完毕。只有20個赞,第一次这么认真回答的说 T_T

我不请自来了,因为我发现在这里面回答的人都在回答:“我想做游戏开发难吗?”而不是回答“峩想从事游戏开发,一年内能精通C++吗”。无视题主的提问实在忍不住。

对于题主的提问我比较赞同 的答案 ,也许大家都是技术人员並且也在大学中学习游戏开发

首先我回答题主的问题,作为大二即将升大三的学生由于你大一大二忙于社团活动。以致于你可能错过叻大学中打基础的黄金时期大三的一个学年里面,除去你的课程时间能够继续深入学习C++的时间也许并不多。所以一年内你说可以精通C++,我觉得不可能

我现在大三,从初一开始学习C++对这些有一定的了解,也有一定的发言权但是我从来不敢说我精通了C++。因为我的主管他是15岁开始学习C语言,现在学习C++已经超过20年但是他对于技术非常的谦逊,抱着学习的心态去学习技术也没在我们面前提过他精通C++。即使他已经是国内行业的领军人物

说一下精通C++这个吧,其实精通这个词真的很大争议至少在许多的社区都有人对这两个字吵的不亦樂乎,那么我来和你说一下熟悉的概念吧:

我觉得熟悉C++至少要能够做到这些:

1、你完整阅读过C++ Primer 第五版之后的书,这本书可谓是C++程序员入門必读的书(为什么我推荐第五版之后,因为第五版之后包涵的内容是C++11标准的内容你现在重拾编程基础课语言,那么推荐你看新的书)

2、你能够对面向对象编程基础课有明确的概念因为现在许多程序员用着面向对象语言,却做着面向过程的事情

4、对数据结构有一定嘚认识,能够准确针对问题选择你的数据结构

5、其他内容一下子没想到这么多,等以后更新

至于精通,精通C++不仅仅是C++的语法还有编譯的原理,那么又涉及到编译原理还有计算机的组成原理。调试的时候当你用release的调试,你又需要汇编语言的知识又涉及到汇编语言。再后来你需要设计比较大型的程序你要对数据结构,和设计模式有一定的认识

再回答下一个问题:你希望从事游戏开发工作,做游戲其实不仅仅是看着最近火热而是你要从一开始就对有游戏有接近疯狂的热爱,把做好一款游戏当做你的使命你才有动力继续学习。洇为程序学习起来非常枯燥

你需要学习其他什么,我觉得其实你需要做游戏不一定是C++,你可以选择另一个语言比如Objective-C开发iOS的游戏或者學习C#,可以开发wp8或者xBox的游戏

如果你单纯是做游戏,语言并不是问题问题是你对其他知识的了解程度和对游戏行业的热爱,为了工作而笁作可能并不会让你充满满足感与激情

至于苦逼软件的作者的回答,我反对并且我认为这不是合适的答案。

不是所有的人会为你“工莋十几年游戏项目超过十年而买单”

“想做游戏开发根本不需要精通C++,根本就是南辕北辙”

》游戏开发不需要精通C++,甚至说不需要会C++但是你至少要熟悉任何一门开发语言,并且充分了解数据结构这根本不是南辕北辙,而是取向问题

“挑一个引擎熟悉起来”

》这是峩看到最不负责任的回答,这位同学问的是未来的路现在让一个学生直接选一个引擎,没有错这样可以让他更容易找到小公司,但是會使用不懂一个引擎的原理,在日新月异的今天公司换了一个引擎,要重新去学习如果掌握最基础的东西,那么无论任何引擎都鈳以迅速上手。

“游戏开发就是耍剑耍得好看才有饭吃”

》游戏开发实质就是程序员不仅要练剑,也要练气

ps:以上纯属个人观点。

说嘚对想做游戏开发根本就不需要精通c++,根本就是南辕北辙不过理由我跟他不一样。就算你的志向是开发crysis这样的游戏其实也只需要用箌C++的一小部分就够了。C++各种范式是发明来解决所有问题的游戏只是其中的冰山一角,你没必要精通没必要学会C++的所有部分。

【知乎用戶的回答(11票)】:

一句话想做独立游戏,请看顶楼几位;想以游戏开发作为一份职业请看我的和 的答案。

ps题主问的是怎么学C++,那么多人茬那空树个靶子乱打是几个意思

被点了好多反对+没有帮助么o(╯□╰)o

之前手机上的,回答了题主第一个问题现在试着回答下第二个问题。建议题主修改下问题把精通改成掌握,免得问题被偏向题主不愿看到的方向「精通C++」一直都是一个很无聊的槽点,吐槽的人和被吐槽的人都很无聊

翻译一下,可能这样问比较合适:

如何用一年的时间在C++天赋上加点

如果说阅读一遍《C++ Primer》是根节点的话,接下来的天赋點只有这样两种类型:

1. 继续阅读C++相关书籍

整明白《C++ Primer》对C++有一个感性的认识之后,你可以去看侯捷翻译/写的几本书比如Effective系列、《STL源码剖析》甚至对于没什么人用的MFC,你也可以看下《MFC九(shen)浅(ru)一(qian)深(chu)》看下上个世纪的业界的C++程序员都是怎么样来用C++这门语言的。然后可以看看《Inside C++ Object Model》,深入理解下C++然后,对C++已经有了一个理性的认识之后就可以再拿回来《C++ Primer》,顺便再翻翻《Thinking In C++》查查C++标准什么的,仔细琢磨琢磨自己究竟能用C++干什么至于模板元、FP什么的,题主看完这些书自然会知道自己有没有兴趣接触的

题主说想从事游戏开发等工作,那我就大胆揣测一下题主并不是想做一名独立开发者,而是打算以死程作为职业生涯的第一份职业

这样,做项目的话就需要多一点针对性想要囿快速产出结果的项目,你可以先用D3D写个小玩具随便复刻一下你记忆中的FC游戏即可。想要接触OOP那就找几个小伙伴,想办法参加个软件仳赛做个代码量至少上万的项目,语言不仅限于C++这样你才能不会觉得书上那些OOP啊泛型啊都是扯的有的没的。做项目的时候写代码写累叻翻翻《设计模式》之类的书。没错我没把读《设计模式》算作「阅读C++相关书籍」。

反对目前第一@Kubisoft的说法题主还是学生,别用压榨it囻工的想法来教导!题主可以从cocos2dx和unity3d开始学游戏开发但是,如果想一直做编程基础课请别忘了必须同时修炼c++, 因为它可以给你认识到真正嘚编程基础课,让你懂得更多计算机编程基础课思想以后就算不写c++也可以迅速了解别的语言,别的工具的~而不会变成仅仅依靠IDE工具隨便抄抄别人代码,完成山寨程序的It民工

我觉得学习c语言会更合适一些可以避开c++的语法陷阱,又能够快速地书写程序了解指针内存管悝,io以及字符串的操作真谛

通过6个月左右的c语言学习后,可以考虑学习一些面向对象的语言和lisp语系的语言例如python和lua。这大概需要3个月左祐的时间这期间可以阅读一些优秀的代码,我推荐学习的源码有两个一个是lua的源码,一个是vim的源码这两者都能提高你对计算机底层系统对内存管理,以及字符串处理的理解并且对函数指针有一个深刻的认识。

最后3个月可以试试采用c和lua结合的方式去实现一个简单功能嘚程序

恭喜你,毕业了!你也许还不懂图形渲染不那么理解gpu,不懂得网络通讯多线程,操作系统和其他计算机科学知识只是初略對cpu,内存和文件存储有所了解但这已经不妨碍你成为一名合格的程序员甚至游戏程序员。由于你的选择你避开了c++学习过程中的诸多陷阱,直接用一门简单的系统级语言c快速地理解了计算机程序的真谛这比你学会使用c++更重要,也为你今后的发展铺下了坚实的基础

1年肯萣无法“精通”,但是如果认真学能让你基本了解这玩意是个怎么回事而且最关键的,能够帮助你进入游戏的行业

上面各种大神的回答,居然milo大神都炸出来了虽然都很有道理但是我觉得答案依然因人而异。

这个东西没有什么答案而更加取决于你想做什么。

你想成为┅个程序员还是更想成为一个游戏开发者,游戏设计师或者或是只是喜欢游戏而想呆在游戏的圈子里。。

游戏是一个很大的产业烸个环节都是可以做到最大最强从而改变世界的,而且每个环节都是密不可分没有什么孰优孰劣的

上面不少回答角度是从资深程序员的角度来说的,但我个人认为开发一个好的游戏编程基础课技术的重要性其实并不是最最重要的美工,设定故事背景,营销和项目管理方面都是非常重要的环节相比之下程序的重要性有的时候并没有想象的那么重要。 这也是为什么很多人认为不懂编程基础课也能做游戏嘚原因有的游戏比如卡牌游戏,甚至不需要任何程序

并且另一方面,对于玩家来说他们只知道这个游戏是不是好玩,爱不爱玩对於用的什么引擎,

你c++写的多厉害根本都是没有直接影响的比如说minecraft这样的游戏也没有用到高大上的引擎,dota这样风靡世界的游戏当初也是用嘚魔兽争霸编辑器那个自带的脚本编辑器完成的

另外涉及到游戏引擎的方面,也并不是如某些人所说直接用别人的引擎的人就没有任哬技术含量的。

第一为自己的游戏开发专用的游戏引擎其实也并没有那么困难,只是涉及到的知识和需要的编程基础课技术基础比较高而且通常没有绝对的必要性,所以做的人不多就好像你想盖房子会自己去造吊车吗。所以以上说国内游戏开发不好是因为没有好的吊車其实是不对的

第二,往往大家把游戏引擎和好的游戏画面联系在一起但其实好的游戏画面并不由引擎决定,就好像photoshop是一个创建图片嘚工具但是有的人能用ps创造出惊人的作品,而有的人只能胡乱的涂鸦同样的工具而最后产生的效果也可能是完全不同的。现在无论什麼游戏引擎大部分都是基于当前已有的dx或者opengl图形渲染技术就算某个引擎能够同时渲染更多的多边形,也不能代表其画面效果好因为这些其实是取决于使用引擎的艺术家和技术美工的。当然如果一个游戏引擎的编辑工具非常的aritst friendly对于画面的提升帮助是很大的。(于是问题便从开发游戏引擎变成了开发游戏引擎编辑工具)

第三如何巧妙的利用游戏引擎也是一个非常有技术的事情,比如dota用的魔兽地图编辑器弱到连让一个单位眩晕固定的秒数的功能都没有,所有的眩晕都是要靠创建一个隐藏的单位向敌人丢出一个隐藏的风暴之锤来实现的即便如此,别人还是做出了一个非常成功的游戏这样巧妙的利用一个引擎的各种功能,从而达到自己的设计目的也是非常有技术含量嘚一件事情。在我眼里他们这些游戏程序员的工作并没有这些引擎程序员的工作低级歧视他们的技术含量是可笑的。

另一方面技术大蔀分的时候是因为需求而生的,比如我的游戏需要一个特殊的效果从而能够过表现某种艺术效果但目前的市面上的引擎没有这样的功能(比如我想要我的游戏里任何东西都和果冻一样,并且有物理的效果) 那么这个时候熟练C++编程基础课能力就变得非常的重要,因为涉及箌修改原引擎功能的二次开发往往是使用c++的并且对于各种优化的要求相当的高。(当然如果做不到那么巧妙的修改设计方案避开这是詠远存在的解决的办法,当然结果也是这将使得游戏变得平庸)

但是总的来说花一年时间尽可能深入的学习c++是十分必要的,即使你今后鈈使用c++作为自己的编程基础课工具因为c++是目前大部分编程基础课语言的基础,了解这些细节对于今后快速掌握另一种语言也是非常有益嘚我c++水平不是大神,但我也能做到在从来没有看过任何java/c#的书籍的情况下看懂大段的java/C#代码并且自己写出一些常用的功能

如果真的想从事遊戏行业,在学习c++之外更重要的是你需要尽早开始着手做一个你想做的游戏,无论多差先做出原形来无论用什么样的办法多落后的技術,在中间你还会学到无数编程基础课之外的东西编程基础课这个东西,一旦编程基础课技术达到一定的水平剩下的在编程基础课语訁之外的思想才是更重要的,就好像有的人写作的词汇特别的美语法特别的对,但是内容空洞无力的话也是没有任何价值的

【赵丙峰嘚回答(2票)】:

如果“精通”的含义是了解C++所有的方方面面,甚至编译器实现细节那么肯定不会有这样人的。并不是你不能成为这样的人洏是完全没有必要。这个意义上讲我从来不推荐阅读《深入C++对象模型》这样的书。这并不能使你建立真正的面向对象的概念反而容易誤导你这样才是实现面向对象概念的唯一方法(可能是最有效的一种而已)。

如果把“精通”定义为可以熟练地使用C++来构造具有扩展性的框架或者应用满足时间和容量上的要求。上面回答问题的有不少人应该可以达到

在如果把“精通”定义为使用基本的C++构造来克服程序實现中的种种必然或者偶然的复杂性,那么精通C++所需要理解的知识点并不是很多最基本的,准确理解RAII概念并且可以有效使用之以及理解基于异常的错误管理是成为一个合格C++程序员的必要条件楼上流出的几乎所有的书都会涉及这两个概念,但是深入介绍并且融会贯通的没囿当Google的的C++规范还没当作圣经膜拜的时候,可以理解大多数的C++程序员并不合格

并不是这些程序员不够努力。C++程序员是最努力的程序员之┅因为C++的书太多了。C++的面也太广了这样导致的一个后果就是大量的时间被浪费了,同时形成了一个无法精通C++的“神话”

除非你是语訁律师,你无需“精通”C++;

除非你的编译器的实现者你无需“精通”C++;

除非你是编译器的测试者,你无需“精通”C++;

除非你是语言规范嘚修订这你无需“精通”C++;

计算机世界最强大的武器就是抽象。你要精通的是使用C++的构造来模拟并且建立抽象这里面涉及的更多是接ロ设计问题。

涉及到接口不能不提到类型。我们都知道C++是静态强类型的语言但是这个强类型是不完全的。你能知道C++标准库里的很多代碼都是为了修正这个不完全的强类型系统的辅助代码吗C++的面向对象中有一个概念叫做多态。据说是在运行时决定以指针或者引用调用的函数具体是那个但是你知道所有这些都在编译时就决定了吗?理解类型系统并且熟悉其功用是进一步的要求。有了这个基础算法和嫆器分离的STL设计是自然而然的结果。

可组合性是组件的更高要求这个深入了,你得到的是类似Monad的东西C++的未来就是这个方向,因为这使嘚C++代码可以极好地横向扩展

能依次掌握,理解并且运用上述概念,并且能把这些概念映射到C++之中虽然不能说是精通C++,也可以说是稀缺的C++程序员

这样的程序员,有多少要多少!

首先说,不能精通一门语言要由内而外,你必须知道你写的代码到底在机器中是怎样去運行的在内存中是怎样的状态,生命周期怎么样这样你写出来的代码才是高效可用的,而不仅仅是能跑通没bug会用一门语言写代码仅僅是初级阶段,而精通是需要对代码架构和问题长期的积累不可能简单的一年。

另外你的目标应该在游戏开发上,这个不知道和你必須精通c++有什么关系现在的大公司开发游戏,一般都有专门的游戏引擎甚至有专门的游戏开发语言,你精通c++也可能只是游戏开发的基础游戏中最难的应该是游戏的设计。

我也是软件工程毕业的我觉得,课本里的真重要特别是操作系统和计算机原理,数据结构和算法这几门课被选做考研项可不是白选的,基础不好做什么都白搭,肺腑之言其他要用什么,对应的看看文档也就会了

四个月就能熟練C++ 真的 但是精通C++ 真的很难

我们老师经常跟我们说 连ppt这么简单的东西都是不可能精通的

更别提C++这么傻大笨粗的东西了

还有 以后去面试的时候 芉万别说自己精通C++

C++有一些很偏的语法规则 闹不好面试官就会故意考你这些。

然后游戏方向要看你喜欢写游戏还是游戏引擎

或者你实习的那个公司让你写什么

游戏引擎角度来讲 学好C++没问题 除此之外还要有一些图形学和底层的知识

游戏的话 没人用C++吧 开发成本高 周期长 需要的人財又不容易找

等你用C++写个游戏出来 编译一遍debug一遍 竞争对手估计都开发出5个了= =

【王照顺的回答(3票)】:

上面都是大神,作为一个即将大四的学生我说一下自己的观点,什么事情都要讲究一个兴趣兴趣来了写代码和写诗一样快乐,上面说的剑宗和气宗比较有意思个人觉得不管學什么都应该由浅入深,底层要学好没有错如果一上来就不管三七二十一让你去了解opengl的知识,估计学了个把月然后你会问,这玩意能幹嘛估计你就萎了,编程基础课生涯over。恩应该是这样,先简单了解一下游戏制作过程比如说先熟悉一款游戏引擎,如cocos2d-x然后简单開发一款小游戏,恩然后大概知道游戏制作是怎么个回事,当然这时候你可能只是处于调用一下人家api的情况,不过没关系当你发现伱自己写的游戏能在手机上跑了,兴趣来了多写几款类型不同的游戏,恩大概像那么回事了,然后开始不满足写游戏了这时候你可能会想了解一下引擎的原理了,然后开始找资料学opengl等各种知识,个人觉得不管学什么都要循序渐进由浅入深,这样子才不会学什么都停留在表面就好比如果你单单学一个cocos2dx如何使用,说白了哪天公司换个游戏引擎让你去写游戏你发现又要重头学起,到时候就心有余而仂不足了

顺便说一句,楼上有些人过于激动了大神们指点一下可以,不过指指点点就不好了

【陈清扬的回答(1票)】:

作者 Peter Norvig 是计算机科学镓,Google 的研究总监在本文中,Peter Norvig会告诉你:为什么急功近利地学习软件开发技术是没效果滴

随便逛一下书店,你会看到《7天学会Java》等诸如此类的N天甚至N小时学习Visual Basic、Windows、Internet的书我用亚马逊网站的搜索功能,出版年份选1992年以后书名关键词是:“天”、“自学”、“教你”,查到248個结果前78个是类图书,第79个是《30天学孟加拉语》我用“天”换成“小时”,结果更惊人有多达253本书,前77本是计算机图书第78是《24小時自学语法句式》。在前200名中96%是计算机的书。

结论就是:要么人们急于学习电脑要么计算机比其他东西学起来要异常简单。没有任何書是关于几天学习贝多芬或量子物理的甚至连犬类装扮都没有。费雷森(Felleisen)等人在其著作《如何设计程序》中同意这个趋势其中提到:“坏设计很简单,笨蛋才用21天学尽管他们还是真傻。”

让我们看看《三日学会C++》这个书名意味着什么:

  • 学习:三天内你可能没有时间寫出有意义的程序或者从中积累经验。你不可能有时间去跟职业编程基础课者一起去理解在C++环境下的状况简而言之,你没有充足的时間学很多所以这本书只能说肤浅的知识。正如亚历山大·波普(Alexander Pope)所言:一知半解是很危险的
  • C++:三天内你可能学会C++的句法(如果你已經了解其他的语言),但你还不会使用它打个比方,假如你是个Basic程序员你可能写出Basic风格的C++程序,而无法理解C++的真实好处那要点是什麼?艾伦·佩里斯(Alan Perlis)曾经说过:“一门不能影响你编程基础课观点的语言不足学的”有可能你学了一点点C++(或者诸如Javascript、Flex之类),因为你需偠和现成的工具接口以完成手头的任务这种情况下,你不是在学习如何编程基础课只是在学习如何完成任务。
  • 三日:不幸地是这远遠不够,下一部分会详细讲
  • (1973))得出结论:想要在诸多领域达到职业水平需要十年,比如国际象棋作曲,电报操作绘画,弹钢琴游泳,网球以及神经心理学和拓扑学的研究关键是精心练习,只是一遍一遍地重复是不够的必须挑战恰好超越你能限的事情,尝试并思栲你的表现并自我矫正。周而复始这并无捷径!

    4岁的音乐奇才莫扎特用了13年才能创作世界级的音乐。另外披头士乐队似乎在1964年的埃德·苏利文( Ed Sullivan show)演出中一炮而红,但是他们自从1957年就在利物浦和汉堡的酒吧演出在取得广泛关注后,第一部重量级作品《佩珀军士》(Sgt. Peppers)是在1967年发行马尔科姆·格拉德威尔(Malcolm Gladwell)撰文描述了一项针对柏林音乐学院学生的研究,他们被分为尖子中等和不足三类,并被问到怹们练琴的情况:

    所有三组中的人开始学琴的年龄大概相差无几,五岁左右在刚开始的几年,所有人练习量也差不多一周两三个小時。自八岁开始实质性变化就有了。那些精英学生开始比其他人练习更多:九岁的时候一周六个小时十二岁的时候一周八个小时,十㈣岁的时候一周十六个小时一直到二十岁的时候一周要超过三十小时。截止到二十岁在他们的生涯里已经有总计一万小时练琴。仅仅表现可以的那部分学生加起来是八千小时那些未来的音乐老师有四千小时。

    所以更确切地说,一万小时而非十年,是个神奇之数

    薩缪尔·约翰逊(Samuel Johnson, )认为还需更长时间:“卓越乃一生之追求,而非其它”

    • 首先要对编程基础课感兴趣,能从编程基础课中得到乐趣┅定要让它足够有趣,因为你要保持你的兴趣长达十年
    • 与别的程序员交流;阅读别人的代码——这比看任何书或参加培训课都重要。
    • 实踐最好的学习乃实践。俗话说:“编程基础课的至高境界一定要通过充分的实践才能达到而个人的能力可通过不懈努力获得显著提升。” (p. 366) “最有效率的学习需要明确的目标适当的难度,知识回馈并容许重复或修正错误。” (p. 20-21) 《实践认知:每日的思维、数学及文化》(Cognition in Practice: Mind, Mathematics,
    • 洳果你愿意花四年学习大学课程(或者再加上读研)。这将给你赢得某些工作机会并给予你在该领域的深层见解。但如果你不喜欢学校的学习你同样可以在工作中获得相似的经验。无论如何单靠书本是远远不够的。“学习计算机科学不会让你成为编程基础课专家洳同学习绘画和色彩理论不会让你成为画家一样”。这是埃里克·雷蒙德(Eric Raymond)说的他是《新黑客字典》(The New Hacker's Dictionary)的作者。我雇用过的最优秀程序员只有高中文凭。但他开发过许多伟大软件有自己的新闻组,通过公司认股赚的钱就让他买下了自己的夜店
    • 和其他程序员一起參与工程项目。在某些项目中担当最优秀程序员在另一些项目中充当最差劲程序员。充当领头羊的时候你要测试你领导一项工程的能仂,并用你的视野来激发他人;如果在项目组中垫底就应该学习其它牛人在做些啥,以及他们不喜欢做的(看他们把哪些活让给你做)
    • 继续别人的工程项目。去理解先前程序员写的程序学习如何理解并解决先前程序员没有考虑到的问题。思考你的程序该如何设计以便讓之后的程序员更容易维护
    • 至少学6种程序语言。其中包括一种支持类抽象的(Java和C++)一种支持函数抽象的(如Lisp或ML),一种支持语义抽象嘚(Lisp)一种支援声明规范的(如Prolog或C++模板),还有一种支援协程的(Icon或Scheme)另外一种支持并发的(Sisal)。
    • 记住在“计算机科学”里有“计算机”一词。理解计算机执行你的代码的时候花费的时间比如:从内存中取一个字(考虑有无缓存未命中情形),连续从磁盘读字或鍺在磁盘中定位。
    • 参加语言标准化工作这可能是有关 ANSI C++ 委员会,也可能是决定你编码风格是两格缩进或四格缩进无论如何,你要知道其怹人对语言的喜好程度有时还要想想他们为什么喜欢这样。
    • 知道自己应该在何时脱身于语言标准化

    所有上述这些,很难通过书本的学習来达到我头一个孩子出生时,我读了所有的“如何做”(How To)系列的书籍却依然对育婴毫无头绪。30个月后我第二个孩子出生,我还需要温习一下那些书吗绝对不!相反,我完全可以参照个人经验而结果相当有效。这更让我确信:我的经验胜过那些专家们写的上千頁文字

    弗雷德·布鲁克斯(Fred Brooks)在《没有银弹》(No Silver Bullet)一书给出了寻找顶级设计师的三条建议:

    • 尽早系统地识别出顶级设计师。
    • 分配一个人莋为其职业规划的导师
    • 给予机遇让成长中的设计师互相磨砺。

    此处假定有部分人已经有成为伟大设计师的潜质你所需的就是要诱导他們。艾伦·佩里斯(Alan Perlis)一针见血地指出:"假如人人都可以学雕刻那就得教米开朗基罗如何不去干雕刻。对于伟大程序员也是如此。”

    所以简单地买一本Java书,你或许能找到些有用的东西但绝不会让你在24小时内甚至24天抑或24月内,成为行家里手

    【渐修竹的回答(0票)】:

    我也莋了两年c++了,也不敢说精通我们老大做了至少8年,也没敢说精通我认识的很多大神,也都没敢说精通事实上我认识的很多大神都很謙虚,我跟他们学到了很多大家的简历上也都写着熟悉c++之类的字眼。上次公司招聘来了个小伙子,工作两年简历上写了精通c++,结果連公司的笔试都没通过请原谅我答不对题,我只是单纯的看精通这个词不太舒服。

    关键是如何理解“精通”

    我从大三开始,平均每忝用一小时自己编码到大三结束要找暑期实习时,编码水平比大部分同届同学高于是顺利拿到实习机会以及以后也顺利拿到offer

    现在出来笁作几年,虽然水平比毕业时高很多但也依然觉得很多东西不会,很多人比自己强

    最后我觉得对于大学生,如果有同学向你请教编码問题有同学请你帮他做编程基础课的作业,那也可以证明这个人比较强

}

其他回答都很好但是我看题主應该还是入门,万一听不懂

c++就是游戏的后台,是你玩游戏时看不到的那部分

你看到的花花绿绿的动画是另一个方向的,和程序几乎完全没关系

然后你玩的游戏是由c++和动画制作者合作完成的。当然一个人也可以学会两个东西。

为什么你的c++是黑白的呢因為你是在学语言,你的输出是console(控制台)它是最简单,最基础的方式

c++有一个叫做MFC的,那个就不是黑白的了相应的,你需要对更哆东西进行设置(这东西比较低级,不好用评论区)

有一个软件,是用来做游戏的我们叫它游戏引擎,它的功能是把动画和c++代碼文件(cpp)链接在一起然后变成游戏。类似的引擎有很多

-----------有人要我讲的更细点,那我就说说我之前见过的一个小游戏吧------------

用的游戏引擎昰:Unity

先介绍游戏这是开始界面

戴帽子的是玩家,红色的是怪玩家拿着一把AK打怪。请注意屏幕上方的Score以及左下角的血量。


动画其实就昰玩家的角色怪物的设计等。先讲讲玩家下图中,我们可以看见玩家由彩色的人和枪两部分组成这会由美工做出来。同时还有对应嘚碰撞检测体积(白色的人和枪)这样一来,就可以把美工做出来的3D角色变换为电脑能懂的角色以便进行“碰撞检测“,碰撞检测在 這个游戏里重要用来检测是不是和怪碰撞了如果是,那就扣血同事还可以看到有3个动画,分别是玩家走路 玩家闲着以及玩家死亡,觸发相应条件就播放相应动画

在这里,c#(比如说)的作用就是对每一个条件进行计算比如:和玩家碰撞后触发扣血函数,当玩家血量低于0时触发死亡动画当玩家没有动作10秒时,触发idle 动画

来看看在引擎里,玩家长什么样子

首先是玩家肚子那里的音频图标是玩家收到攻击后,播放的玩家痛苦挨揍的音频因为玩家是运动的,所以音频的源头也得是移动的

再看看枪口那里的小飞镖,那个是粒子系统玩家不是要开枪吗,开完枪后那里会播放一段枪口烟雾的动画。再看看那个灯泡图标那个是开枪后的枪口火焰动画,因为是火所以昰光系统而不是粒子系统。再看看灯泡后面的音频图标那是开枪的声音。

怪我就不说了差不多。

先说一下这游戏不是我写的是开源嘚游戏。

点击之后用Visual Studio打开,随便找个类的方法比如受伤。

代码逻辑为:如果受伤血量=血量-伤害,修改血条数值播放动画。如果血量《=0触发死亡函数。

”血条“是一个特殊的类是找个引擎自带或制作出来的类。你只需要引用这个类文件然后给他 传值,血条就会根据血量左右移

再来看看玩家是怎么移动的

PlayerRigidBody 也是一个特殊的类,不用我们自己写引擎自带,意思就是游戏中的玩家的角色然后使用咜的一个移动方法(movePosition),输入参数就是:改变位置+移动量

移动量=速度x时间变化量。

简单吧哈哈。所以学习代码还是要的有什么需要的評论告诉我,我找个时间添加

}

我要回帖

更多关于 编程基础课 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信