2007-2-13,2007-2-24

来源:互联网 发布:淘宝网天猫帽子 编辑:程序博客网 时间:2024/05/22 11:41

//2007-2-13

  进度特别慢的FIGHTER07,今天先看了下DEMOSTAR2(网友的飞机),然后看了下水晶之约的代码,然后看了下SKYHUNTER,很有感触啊    。

  我们现在做游戏,应该把重点放在实现效果上,使用的算法笨拙点无所谓。水晶之约用的算法很简陋,但是解决了很多问题,再看我的SKYHUNTER,稍微有点意思的就是那个脚本机,其他的代简直没意义,地图问题到最后也没有解决,脚本机用在飞机里面的设计一开始就有问题,可是还是把他留到最后。
  网友的飞机呢,太注重扩展性,结果整个游戏的效果却很一般,他在解决地图问题的时候,过多注意了地图的可扩展性,用什么链表之类,浪费了很多时间。我觉得应该就用数组,
毕竟这个不是重点问题,可以暂时回避,将精力放在其他物体的控制管理上才是明智之举,
待到最后一切都良好运作了,在去将数组改回链表,完善先前的临时设计,如果没有足够时间,还可以不管这些临时设计,毕竟不是商业游戏。

  再说我第一次写格斗,真可谓是我编程道路上的一大转折点。写这个格斗之前,我心里基本上没有形成整体的框架。里面的几个大问题我都通过写各种验证代码进行了分析,一旦我找到了解决的办法,我就马上验证,成功了就不再继续寻找新算法。按键检测,动画,控制,我都有写验证代码,而且使用的算法现在来看都很笨拙,但是最终的效果很棒,而且就用在了实际的代码里面。我从头到尾没有考虑过什么扩展性,安全性都很少考虑。
  你看我的角色碰撞代码,居然绑定到了固定的角色结构上,其他的物体都没有碰撞检测的能力,由此可见,我把碰撞问题放在了比灵活性更重要的位置上,在关键效果上,我也绝对不吝啬精力,而其他必须解决的问题,能运行就行。最后的成绩是辉煌的,到现在仍然没有超越过。

  这也许是写游戏的原因吧,一个游戏不能没有核心效果(特色),我们需要随时保持清醒的头脑,不要被局部的漂亮代码冲昏我们的头脑,否则就会有问题已经漂亮地解决了的幻觉,让你丧失战斗力。
 
  相对与我的格斗,SKYHUNTER根本算不上飞机游戏,因为他连一些基本的飞机游戏的要素都不具备,只有一个貌似的外壳而已。

  我想,以前觉得很多算法特别简单,什么脚本机啊之类,为什么以后学的越多,越是害怕他们呢,象什么碰撞检测测,其实就是矩形的相交,为什么不敢去写呢?写格斗的时候,很多东西都不会,
  但是很快能找到解决的办法,很快就能实现。一个2D游戏用到的算法大部分我们都有能力实现,但是你有没有能力写一个RPG呢,不敢想?以前的霸气哪里去了,
  可能这就是出色的软件工程师和一般程序员的区别所在。晓得字符串的匹配,就能够写脚本机;晓得矩形相交,就可以做漂亮的碰撞检测;晓得延迟显示,就可以到处使用动画;很多问题其实很简单,但是你却偏不敢想,盼望着模仿别人的相对完美的解决方案,那你永远做个普通的CODER吧。

  记住:
  ******************
  临时的解决办法也许比成熟的设计更有实际意义。

//2007-2-23

1 关于编程热情

  今天又看了很多代码,想找出为什么我没有写程序的热情的原因。我发现,我在写虚拟文件系统的时候,特别的投入,所以代码的质量和最后的成果都很不错。要说原因,我想还是编程思想的问题。

  学习了面向对象以后,带来的一大问题就是,怎样将问题进行面向对象化的建模,这也就带来了很多问题。
  怎样设计才使得整个程序符合面向对象的设计思路,确实需要很多的精力。经常碰到的一个问题就是,这个对象该怎样设计啊,这个功能该放到哪个对象里面啊,等等。过分地追求完美,实质性代码的书写却常常推迟,结果是,设计逐渐漂亮了,有些满足了,功能却根本没有实现。

  感觉学了C++后最大的体会就是,学习怎样设计漂亮的结构多了,学习解决问题的算法少了。
  可能这也就是两个语言偏向的重点不同。你看我的那个虚拟文件系统,虽然是纯C,但是还是在设计上花了比较多的精力,不过限于C语言本身偏重于实现过程的原因,所以功能的实现比较快,整个项目完成的非常满意。

  那么,现在该吸取什么样的教训呢,首先就是,面向对象的设计不要太过火。
  面向对象的解决思路虽然优点很多,但是它本身也是用来解决问题的,所以不要只管设计,不管实现,两个都要抓好,两个都不能过火。
 
  其次呢,没有想到的了。

2 模块偶合

  降低模块偶合度的一个好办法是使用接口。

//2007-2-24

1 关于解决问题的计划

  今天又另外启动了一个小的,超级小的项目,但是一开始问题就暴露出来了。我不断的分散精力,始终没有将精力放在主要的问题上。我先是考虑 FPS 的计算,然后又考虑了 Allegro 的效率问题浪费了我不少时间。
 
  书上说的对,任何一段代码都有优先级,我们写代码的时候必须加以考虑。当然这是微观上,宏观上,我们应该对我们将要解决的问题有一个清晰的步骤指导,也就是有个合理的计划。
  这样我们就可以按计划来安排我们的时间和精力,有助于提高效率。

  那么,得出的结论是:
  ***********************
  做任何事情都要有计划,计划包括各个步骤和对应的优先级。
  合理分配我们的时间和精力来提高效率是主要的目的。

原创粉丝点击