第一篇:游戏编程感想
游戏编程感想
班 53080907 周杰
首先,通过游戏编程课程的学习,我了解了怎么用我们所学过的知识进行游戏编程,不过对于第一开始应该用什么语言,你有许多种选择,包括Basic、Pascal、C、C++、Java等等,而且在网上关于游戏制作新手应该选择哪门语言的讨论也很多。推荐选择C和C++做为开始写游戏的语言。一些人可能会说这两种语言对于没有编程经验的新手来说有点难度,我不同意这种说法,因为我就是刚开始的也是选择这两种语言。另外C/C++在今天是两种应用范围最广的语言,因此你才会更有可能得到更多的编程和学习资源以及其他人的帮助。
其次,如果要进行游戏编程,我们要对我们在大学期间学过的相关知识有个大概的了解,游戏编程设计到经济学,统筹学,物理学,机器人学,生物学,心理学,人工智能,计算机图形学,多媒体技术,虚拟现实等等。而且它也是一个团队的合作才能完成的工作,它所涉及的工作有策划、程序、美术、音乐等。只有每个方面的工作相互配合达到完美,所设计出来的游戏才是一款经典的游戏作品。
第三,作为游戏编程,它所设计的不单单是一款游戏,如果把它想成仅仅工人们娱乐消遣的工具,那就把游戏定义的有所狭隘。游戏只是人们日常生活中所能接触到的一部分应用,它更可以应用虚拟现实的技术把这个产品应用到人们生活的方方面面,比如军事模拟训练,仿真模拟等等。
最后,不要仅仅是积累知识,用它。除非你用它们,否则你不能真正的知道和理解它们。用你所学的东西制作一个小的Demo。认真的去做书里面每个章节后面留的练习。
尽量玩更多的游戏。这样做可以给你许多灵感并能帮助你把游戏做的更好一些。这也可以给你枯燥的编程工作减轻一些痛苦。
帮助别人。在教别人或者给别人讲解的过程中你将会更加的了解自己,学到很多东西。有始有终。不要陷入“我知道我能完成这个游戏,但是我有更好的方法,因此我要继续想想我的那个方法。”如果你能完完整整的写完一个你从一开始要做的游戏,你将会学到非常非常多的东西,而且你也有东西可以证明你不是一个把什么东西都停留在嘴巴上的人。在你成为一个有经验的游戏程序员之前,请把你要做的游戏更简单更容易一些,不要贸然的去尝试写一些比较大或者很复杂的游戏。
第二篇:编程感想
编程感想
从C学到C++,就是从面向过程到对象,又从C++到JAVA,就是从静态语言到动态语言。编程语言的学习无怪乎多写代码,多参考,多了解,那些所谓的牛人,又有多牛呢 ? 我想开始时也跟我们刚学时一样,但人家坚持住了,所以被牛了!编程要养成好的习惯!
下面是我在一篇博文上看到的,很受用,与大家分享 态度篇
1.做实事 不要抱怨,发牢骚,指责他人,找出问题所在,想办法解决。对问题和错误,要勇于承担。
2.欲速则不达 用小聪明、权宜之计解决问题,求快而不顾代码质量,会给项目留下要命的死角。
3.对事不对人 就事论事,明智、真诚、虚心地讨论问题,提出创新方案。4.排除万难,奋勇前进 勇气往往是克服困难的唯一方法。学习篇
5.跟踪变化 新技术层出不穷并不可怕。坚持学习新技术,读书,读技术杂志,参加技术活动,与人交流。要多理解新词背后的所以然,把握技术大趋势,将新技术用于产品开发要谨慎。
6.对团队投资打造学习型团队,不断提高兄弟们的平均水平。7.懂得丢弃 老的套路和技术,该丢,就得丢。不要固步自封。
8.打破砂锅问到底 不断追问,真正搞懂问题的本质。为什么?应该成为你的口头禅。9.把握开发节奏 控制好时间,养成好习惯,不要加班。开发流程篇
10.让客户做决定 让用户在现场,倾听他们的声音,对业务最重要的决策应该让他们说了算。
11.让设计指导而不是操纵开发 设计是前进的地图,它指引的是方向,而不是目的本身。设计的详略程度应该适当。
12.合理地使用技术 根据需要而不是其他因素选择技术。对各种技术方案进行严格地追问,真诚面对各种问题。
13.让应用随时都可以发布 通过善用持续集成和版本管理,你应该随时都能够编译、运行甚至部署应用。
14.提早集成,频繁集成 集成有风险,要尽早尽量多地集成。15.提早实现自动化部署 16.使用演示获得频繁反馈 17.使用短迭代,增量发布
18.固定价格就意味着背叛承诺 估算应该基于实际的工作不断变化。用户篇 19.守护天使 自动化单元测试是你的守护天使。20.先用它再实现它 测试驱动开发其实是一种设计工具。21.不同环境,就有不同问题 要重视多平台问题。22.自动验收测试
23.度量真实的进度 在工作量估算上,不要自欺欺人。24.倾听用户的声音 每一声抱怨都隐藏着宝贵的真理。编程篇
25.代码要清晰地表达意图
代码是给人读的,不要耍小聪明。26.用代码沟通 注释的艺术。
27.动态地进行取舍 记住,没有最佳解决方案。各种目标不可能面面俱到,关注对用户重要的需求。
28.增量式编程 写一点代码就构建、测试、重构、休息。让代码干净利落。
29.尽量简单 宁简勿繁。如果没有充足的理由,就不要使用什么模式、原则和特别的技术。30.编写内聚的代码 类和组件应该足够小,任务单一。31.告知,不要询问 多用消息传递,少用函数调用。32.根据契约进行替换 委托往往优于继承。调试篇
33.记录问题解决日志)不要在同一地方摔倒两次。错误是最宝贵的财富。34.警告就是错误 忽视编译器的警告可能铸成大错。
35.对问题各个击破
分而治之是计算机科学中最重要的思想之一。但是,要从设计和原型阶段就考虑各部分应该能够很好地分离。
36.报告所有的异常 37.提供有用的错误信息
稍微多花一点心思,出错的时候,将给你带来极大便利。团队协作篇
38.定期安排会面时间 常开会,开短会。
39.架构师必须写代码
不写代码的架构师不是好架构师。好的设计都来自实际编程。编程可以带来深入的理解。
40.实行代码集体所有制 让开发人员在系统不同区域中不同的模块和任务之间轮岗。41.成为指导者 教学相长。分享能提高团队的总体能力。
42.让大家自己想办法
指引方向,而不是直接提供解决方案。让每个人都有机会在干中学习。
43.准备好后再共享代码 不要提交无法编译或者没有通过单元测试的代码!44.做代码复查 复查对提高代码质量、减少错误极为重要。45.及时通报进展与问题
主动通报,不要让别人来问你。
第三篇:游戏编程入门
游戏编程入门
经常有人问我,没有编程经验的人该如何开始开发游戏。在此之前,我总是一个个的尽力回答。然而,后来提相同问题的人数增长到难以处理的地步。我决定,是时候把我所有的建议写成文章,作为一个大概。
这篇文章是针对那些想要开发自己游戏,但几乎没有编程经验的人。事实上,我假设读者没有任何编程经验。我主要讨论游戏开发的程序和设计方面,而不是艺术性。我也不准备讲述如何进入游戏行业(这方面已经有足够的资料),而只是让你逐步的开始开发自己的游戏。最后,我所指出的这条道路也并不能作为唯一的,或是最好的路径来学习开发游戏,但至少对我和一些人很有用。选择一门语言
你要做的第一件事就是选择一门开发语言。你有很多选择,包括
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(/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 Howlands 的著作: How do I Make Games?
A Path to Game Development.开始,自己独立工作。不要急着加入团队,那样只会减缓学习过程。而且一旦你有了自己的几个游戏,你可以为团队做出更大的贡献。
还有关于书,你应该不仅仅看游戏开发的书。为了能够开发出你看到商店出售的游戏,你应该钻研比大多数游戏开发书籍更高级的一些主题。有一些可以在网上找到,但你也应该选一些图形学,人工智能,网络,物理学等方面的书。计算机科学学位看来唾手可得,但因为你被迫上这些课的时候可能认为他们和游戏开发无关----你错了!
包装
这里有一些提示很有用
不要只积累知识,用它:你永远不会知道会理解一些东西知道你是用他们。用你学的东西作些演示。做作书上的练习。
经常玩游戏:这样做会使你做出更好的游戏。而且可以减轻编程的枯燥。帮助别人:能帮别人的地方尽量帮助别人,教别人的过程中自己会学到更多。有始有终:不要有这样的想法“我能够完成这个游戏了,但是我又有一个新的想法,那就直接做下一个。”你可以学得更多如果你完成他,你也可以用事实证明你不是只会空谈。所以,尽量不要做很大很复杂的游戏,直到你有了一定经验。
开始吧!你现在可以开始准备QUAKE4了。可能你不是不是很了解,但是至少应该知道如何开始这条道路,找多些资料,加上多年努力工作,他一定会实现!
第四篇:编程大赛感想
(本人技术一般,所写只为给新人介绍一下西工大acm如何入门,大牛请无视本贴)
ACM竞赛作为大学阶段计算机学生的最高荣誉在咱学校竟然不受重视,也没人提起,让那些高中转战NOIP,IOI的同学寒心不已。其实我们学校成绩还是可以的,前年就获得了合肥赛区的第二名,当然由与高手都在其它赛区,没有参加决赛的资格,但也说明了只要我们努力就能有成果。但由于其获奖难度极高,我们学校几乎是破罐子破摔,根本就不管事。其实是学校的这种心态造成大量潜在人才由于不知道相关信息而大学四年庸庸碌碌迷失方向,所以我来说说吧。(如果想简单地保研的话就去机器人吧,进了70%国家一等奖,直接保研资格哦)当然想成为高手,想提升自己的能力就参加ACM吧。首先说下参加ACM比赛好处,以及与其它课程的关系: 很多人都说ACM考察面太窄了只是算法罢了,像操作系统,编译原理,网络,嵌入式等等都没考察。
其实当你成为ACM高手的时候会发现这些课的重点难点用的算法你都已经知道了,你再学这些东西就像看小人书一样了,你会觉得如果让你去做这些东西你也会这么设计甚至还能加以优化。比如内存分配管理其实就是排序算法的应用而已,PV操作就是设置标志的小技巧而已,编译原理就是字符串处理而已,路由器的相关算法就是图论里的东东而已。。因为算法是核心,其它那些只是算法在具体环境下的特定应用罢了。如果说那些东西是套路,那么算法就是内功,而ACM比赛就是内功的检验场,你通过了说明你的任督二脉已经打通,你已可纵横天下了。此时你已成为世界各高校争相抢夺的人才了。就算没有进入决赛但内功强了干啥都顺手。从本科生阶段到博士生阶段的的各种面试笔试机试全逃不出acm考察的圈圈。因为难所以价值极高!
对于找工作来说,百度腾讯网易google每年都有类似于ACM的竞赛,初赛大概都在五月份到六月份进行。只要进入决赛去他们公司找工作都不用简历,直接走绿色通道的哦~你夺得名次后这些公司的岗位就任你挑了,不用简历不用面试,求你到他们公司去!
想想看吧:你不用向各大公司投简历,而是各大公司像你投他们公司的简历了,然后你看都不看把它们都丢到垃圾桶里去!(我时常就在幻想这样的牛人待遇啊,现在已经大四了悔之晚矣,希望大一的同学努力啊)
再说高数,物理等科目。其实与算法真的没什么关系。一旦模拟信号变成了离散信号就是算法的天下了,与之相关的数学是组合数学(研究生阶段才开,我认为应该大一就开)。主要是为了我们今后的计算机应用,比如各种物理数据的采集处理,物理电路的设计仿真等等,这些都属于计算机应用范畴,我们学校其实没有计算机科学专业,有的只是计算机应用与技术专业。有志去1,3系的同学好好学高数,复变,信号与系统这些课吧。当然高数等是常识性知识,不能不知道,这么简单的东西都学不好就不要搞acm了。接着讲正题:
本人刚来时由于不知道如何进校队而浪费大量时间,学校信息也较为闭塞,到了大三参加了一次也是草草收场,所以希望更多有志的同学早些知道些信息少走弯路。咱学校进校队其实非常简单,有两条路:
第一条路:在学校举行选拔的时候去参加选拔赛。这个要特别留心,很多阴险的人看了通知后就把通知扯掉的(当年亲眼目睹。。),一定要多留心。
第二条路:把usaco前五章的题目做完你就直接去找王琪老师就可以进校队了。王琪老师会上离散数学和算法分析课,大家留心下。王老师水平不咋样但人还是很好的,会尽力帮你的哦。ACM竞赛与其它竞赛的区别就是学生一定比老师强,强很多!(不像咱学校的那些所谓的强项竞赛,哼哼)
第二条路显然是我们的最好选择。因为一旦你做完了前五章题目什么选拔赛早已不在话下了。usaco是美国的程序设计训练站,刚开始英语看不懂的话就去nocow看翻译。acm的题目都是英文的,所以最好看英文的。(学计算机英语极为重要,这东西几乎是美国一家弄出来的没办法)。这个站的特点是题目按学习进程一步步安排,从最简单的讲起,对各种算法分别介绍,题目循序渐进的出现。不像其它OnlineJudge一开始就让你面对杂乱无章的一对题目。一开始你只能做几道题,只有你做完了这几题之后才能解锁后续的题目。做这套题目还有一个好处就是做过这套题的人特别多,相关分析讲解到处都是,相当于有一位经验丰富的老师给你指引了。
当然做完这套题是很不容易的,用一年时间攻克它吧。如果光看书不做题是绝对不行的,要边做题边看书。你会感到强烈的对知识的渴求,而且在应用中你会牢牢记住书上的东西并透彻地了解他们。
首先是语言基础,先把C语言弄熟来(高中用过PASCLE学C一样很快的)。C语言书用谭浩强的就可以了,我们的目标只要会用这门语言即可,此阶段会写冒泡排序,斐波那契数列的递归法,八皇后,约瑟夫问题(数组版和链表版,有兴趣看看数学公式版)即可。然后找一本简单数据结构书看一下(一般都用严蔚敏写的),先把前四章看下,代星星的以及树和图以后做题时一块看。接着学习C++。C++的好处就是STL,一些数据结构如栈,队列,优先队列都可以直接调用,一些常用的算法(例如快排)也可直接调用。C++先用几天看看谭浩强的写的红色的那本,把类,构造函数,析构函数,泛型编程,操作符重载等相关概念理解下,谭的书例子非常简单利于理解,然后看下《ACM程序设计》这本书(蓝皮的,北京大学出版社,超简单的入门基础书,强烈推荐新手看),基本上STL就会用了。然后备着本《C++ primer》就好了,遇到问题时查查。用一周把《ACM程序设计》上的水题推掉,这时语言功底已经打好了。接着准备一本《算法导论》和一本简单的国人写的算法设计与分析,按照usaco上的顺序开始算法的学习吧。
其中你会遇到各方面的问题,主要有数论,数据结构,组合数学,计算几何等方面,带着问题去图书馆或上网查资料学习吧,效率很高的哦~ 顺带说下,我们学校是先学数据结构再学算法,我认为在学数据结构前先学下算法较好,因为是先有算法
做完五章就去校队吧,会让你做乌拉尔大学的OJ,这时再准备本刘汝佳的《算法艺术与信息学竞赛》翻翻吧(此书极难,分析超短,只适合高手看)
第五篇:MATLAB游戏编程实例(拼
MATLAB游戏编程实例(拼图)
这是一个简单的游戏,只要把数字按顺序排好就可以了。游戏方法是用鼠标点中数字,如果该数字相邻的格子为空,则自动移到到该空格。
本程序是由realghost编写,如果有问题可以与 slqinyi@163.com 联系。
附图如下:
function pintu1()A = gen()
G = [1 2 3;4 5 6;7 8 0];drawmap(A);
while 1
[xpos,ypos] = ginput(1);col = ceil(xpos);row = 3-ceil(ypos)+1;num = A(row,col);
if row>1&A(row-1,col)==0 A(row-1,col)= num;
A(row,col)= 0;
end
if row<3&A(row+1,col)==0 A(row+1,col)= num;A(row,col)= 0;
end
if col>1&A(row,col-1)==0 A(row,col-1)= num;A(row,col)= 0;
end
if col<3&A(row,col+1)==0 A(row,col+1)= num;A(row,col)= 0;
end
drawmap(A)
zt = abs(A-G);
if sum(zt(:))==0
msgbox('ÄãÒѾ-³É¹¦Æ´ºÃͼ£¡')break
end end
function drawmap(A)clf;hold on
line([0 3],[0 0],'linewidth',4);line([3 3],[0 3],'linewidth',4);line([0 3],[3 3],'linewidth',4);line([0 0],[0 3],'linewidth',4);
for i = 1:3
for j = 1:3
drawrect([j-1 3-i],[j 3-i],[j 3-i+1],[j-1 3-i+1],'y',A(i,j));
end end
axis equal axis off
function drawrect(x1,x2,x3,x4,color,num)x = [x1(1)x2(1)x3(1)x4(1)];y = [x1(2)x2(2)x3(2)x4(2)];fill(x,y,color)if num==0
text(0.5*(x1(1)+x2(1)),0.5*(x1(2)+x4(2)),' ','fontsize',24)else
text(0.5*(x1(1)+x2(1))-0.05,0.5*(x1(2)+x4(2)),num2str(num),'fontsize',24)end
function y = gen()y = inf*ones(1,9);for i = 1:9
while 1
a = randint(1,1,9);
if isempty(find(y==a))y(i)= a;break
end
end end
y = reshape(y,3,3);
当然可以啦,其实图像就是数字矩阵,图像的拼接就是矩阵的拼接,横着拼得行数相等,竖着拼得列数相等就行
例子
clc;clear;
a=imread('我的图片.jpg');[m n t]=size(a);
b=a(1:fix(m/2),:,:);%取图像的上半部分
c=a(fix(m/2)+1:end,:,:);%取图像的下半部分
figure(1);imshow(b);
figure(2);imshow(c);
%注意,上下拼接要求两幅图的列数要相同 %左右拼行数要相同
figure(3);d=[b;c];%把b,c拼起来,若左右拼接d=[b,c];imshow(d);