• 用c语言开发游戏 快乐的痛 笑着哭


    30了。我要怎么办,老了。

    人就像一头小毛驴,方向都是牵着的人定的。这些年蒙着眼睛,都不知道干什么。前些年就是无止境的看电影。这几年就是无休止的玩游戏。然后就30岁了。亿万富翁的梦想就像一根丝线连着的风筝飘啊飘,不知道什么时候就断了。有理想有抱负,有水平有能力。控制不住自己,没人带路,我要怎么办。

    这个项目从去年开始的,一个手机游戏。斯凯平台上的,当时接这个项目的时候其实没有太多考虑,我一向都喜欢打肿脸充胖子的,好面子,人家找上门来,不能不给面子。如果是我自己想的一个创意,估计做不下去的时候随手就放弃了,一点都不伤心,最多过几年后同样一个创意出现之后,懊悔曾经没有坚持到底过。或者最后成为一个面目全非的四不像。历史上的那些想法无出这些框架。但是这是答应别人的事情,没奈何开始了这段痛苦的过程。

    这几年其实游戏玩的多,实际上就没有开发过几个,这些技术早就放下很早了。而且没在企业里呆过太长的时间,编码很不规范,这些恶果很快就显现了出来。刚开始的几个月写啊写啊,然后几万行代码出来了。等到过几天修改错误,编译成功了。还没开心的出来,痛苦的事情到了。

    首先进去就是个死循环。一点反应没有。这是什么原因呢,时间长了,我也忘了。反正很快解决了。

    接着刷的一下,程序崩溃了。这是毛原因呢。挂上ollydbg,我跟我跟,原来,参数传递不正确,本来三个参数,结果仅传过去两个。然后怅然若失,重新修订代码,对所有外部函数做声明。

    麻烦事还没完。人家明明是初到江湖,没有菜刀的,为什么我这里扛着一把刀呢。我再跟,原来那里定义的是byte,我这个文件extern的时候没加,直接一个extern 变量,默认是int罢,本来读一个字节肯定是0,这里读4个字节,很难是0了。

    然后再次修订源代码,确保extern后面都有定义。

    然后提示变量为null,跟了一下啊,明明是正常有值的,咋么就忽然消失了呢,痛苦啊痛苦啊,一怒之下推开,过几天还要乖乖坐下来工作。跟了几下发现还是声明不对。定义的时候是数组的形式,我extern的是指针,谁告诉我数组和定义差不多了呢。这差的远了三百里了。

    另外数值符号,一个正byte乘上一个正byte,变成了负数。然后再去读数组,不知道读哪里去了。

    前面定义了一个一维数组,后来用了一个二维数组指针赋值,内存跑远了。然后检查所有数组。

    再次修订源代码,这可是10万行的大项目啊,我就这么一个人,修啊补啊,痛苦不愿回首。

    我终于下狠心要规范代码写作,因为这带来的后果的修订远长于开发时节约的时间了。

    还有一个地方,就是编码,现在的开发一定要坚持使用unicode编码。我用vc6.0,使用unicode定义变量怕麻烦,所以使用了gb2312。然而资源采用了UTF8格式。本来是utf8-unicode就可以完成所有工作。而我变成这样子utf8-unicode-gb2312-unicode-gb2312-unicode,多出了许多转化过程不说,也是造成许多错误根源。

    我本以为这些已经够了,然而以后多次围绕我的梦魇来了。

    内存问题,一个挥之不去的恶梦。我终于知道为什么要开发托管代码了。怀念java和.net。没有亲身体验过,真是很难想象这些理由。所以一些让人崇拜的大牛其经历也想必是非一般的坎坷。

    内存上的错误主要有三种。尽管都是老生常谈的东西了。不过痛苦之后再来看感觉又是另外一番滋味。

    1)多次释放和不正确释放

    以前释放完之后,不把指针设为null,变成了野指针。然后又用啊,又释放啊。错误发生了。

    因为内存的随处分配,所有最后专门有个步骤释放内存,释放完了发现运行不正确,一个结构中的数据面目全非。又是痛苦的跟踪检查,发现有处指针指向栈区,这个指针又被七指八指,最后看不出来指向堆栈,然后这个指针释放,栈上的数据被破坏。

    2)内存泄漏

    一般来说谁分配谁释放的准则。但是写代码的时候没有注意,随处分配,最后挨个跟踪指针,经常跟错。增加了许多时间。

    3)内存越界

    内存越界是痛苦中的痛苦。表现在错误的出现随机,某处越界可能很久之后才表现出来,找都找不到错误从哪里出来的,别的跟踪一下子代码大致能看出端倪,一般错误的出现就在错误附近。一直看黑客教程栈溢出和堆溢出这么重视,等到自己编程的时候才发现原来是普遍性错误。内存越界其内存的分配并不按照先后顺序分配,后分配的有可能在前面。内存越界造成的错误也是多种多样。简单的把另外一块内存冲了,有一次字符串连接空间分配小了,淹没了另外一个字符串,结果本来主角说的话从NPC口中说出来。更复杂的错误也有。一般用malloc分配的内存前面有4个字节的内存信息,越界淹没了这个信息,好一点的出现内存分配错误,运气差一点淹没的部分被重新利用,来分配其他东西了。

    痛苦中一次次懊悔,如果当时充分考虑就好了。如果上天有重来一次的机会,我一定会认真写代码,整整洁洁标标准准,像印度人写的一样。

    如今这个过程告一段落。终于能正常运行了。看到自己苦心栽培的东西茁壮成长,心里格外的高兴,看着鲜艳的五星红旗,小朋友的脸蛋像红彤彤的苹果。越是付出的多也有价值。所以恋爱的时候一定要让对方多付出,付出的越多越不会放弃。许多放不下的人都是这样想的。不甘心。

    写这篇文字前,我又运行了一下程序,在vc环境下模拟器中运行,欣喜的发现程序完全没有问题,忽然跳出个对话框,vc崩溃了。

  • 相关阅读:
    【Redis】简介与安装
    【JAVA】 Java 连接池的工作原理
    【异常】ORA-01536: space quota exceeded for tablespace
    【Oracle】Oracle 序列步长问题
    【ORACLE】常用脚本
    【ORACLE】特殊的NULL
    【JAVA】Runtime
    【JAVA】Calendar
    出现脚本错误或者未正确调用 Page()
    小程序出现 “2 not found” 解决方案
  • 原文地址:https://www.cnblogs.com/j2eedesigner/p/2044786.html
Copyright © 2020-2023  润新知