All Stories
昨天跑去和xcc还有他女朋友一起吃饭去了,那家梅林的小馆子,可以吃到比较正宗味道的川菜。3个人才吃了50块钱,3荤1素,外加2瓶啤酒。从小馆 子出来,才想起要给家里打电话,因为在馆子里,手机没信号。妈妈果然很着急,因为打不通我的电话。然后三个人走到一个住宅小区后面的小公园,有些公共的健 身器具。我想起疯丫头住这个小区里,就给她发短信说,我在她家阳台下,于是两个人在那里打电话,最后,她在她房间里朝着我挥小红手绢,那情景真是有趣,就 像xcc说的那样,完全一个童话里的人,可怜的小女孩被关在城堡里,朝着外面的小男孩呼救。回到家,发现z3回来了。 写游戏还是多好玩的,尤其是在写的过程中可以试验各种新学到的技术。现在想起来有点遗憾,当年在学习就应该做这些事的,不然现在就可以做更高级的事了,或者至少做这些事应该轻车熟路得多了。 我想还是先内嵌支持游戏逻辑吧,这样程序流程比较好调试,不然同时调试Lua脚本和C++宿主程序,会死人的。到时候可以设置个开关是否使用内嵌支持的标准方块逻辑,或者只使用外部Lua脚本定义的游戏逻辑。 7z格式的解压缩支持暂时也够用了,本来还想加入对rar和zip的解压缩支持的,后来想想,一来暂时不要放时间和精力在这个上面,应该先关注游戏功 能实现,二来为了保持程序文件体积不再为了些额外的trivial功能增加。其实可以在有空的时候,编译一个dll,同时支持这3种格式的解压缩。 游戏逻辑中有几点要注意的,是否贴边了,是否着地了,这两点是最关键的,贴边了就不能作某些方向的旋转和移动了,着地了,就应该返回一些统计数据,同时要把下一块丢出来。还有就是定时回调的支持,也是主要为了作些技术数据统计用的接口。
很奇怪,单独编译了7zDec.exe的时候,就好好的,只要是用VC7.1或VC8编译,都是可以好好地运行列表、测试和解压的,但是集成到我的方块里的时候,就出问题了,早早地便退出说OpenArchive出错了,幸亏有源代码,幸亏前些天刚刚学会在IDE里用debugger调试,经过N分钟的单步跟踪调试,发现最后到一处调用Windows的ReadFile时,总是会返回读取了0字节,这是出错的最终源头!经过几秒钟的思考,决定不用ReadFile这个API,因为源代码中通过预定义宏,来决定在Win32平台上使用依赖平台的文件操作API,而其它平台下都使用C的库函数,马上在前面把那个宏定义取消掉,果然编译通过了并正常运行解压了!加了些函数,可以把用7z格式打包好的skin文件解压到Temp目录下面,哈哈,安逸!不过很怪的是,我把画缓冲的代码注释掉了,但它还是大模大样把图都画出来了,为什么啊,撞鬼了!先不管它了,至少暂时这样可以用了,就先放着吧。 我把Lua的源代码都放进来一起编译,到luaopen_io的地方还是会崩溃,跟踪了一下是到一个sethvalue的地方,不明白为什么会这样,Lua的代码我没看懂,所以暂时只能把luaopen_io这句注释掉来拖延一下时间。好不容易从LuaTinker的官方网站上down到了0.2a版的源代码和二进制文件包,韩文还真一点点都看不懂哦!以前看到过Boost.Python的使用代码片段,发现这样的使用方式还真是独树一帜,之后大概就出现了为各种脚本语言提供粘合剂功能的库,都是使用的这种风格的,至少现在看到Lua就有Luabind和LuaTinker了,LuaTinker是个轻量级的封装,可以学习一下它的封装方法。 用SDK写程序,还是很有成就感di,嘿嘿,就是开发效率太低了。
堕落了。 写了几行就不想写了,去玩去了。可以画出方块池里的方块了,把Lua解释器也集成进来了,不过调用luaopen_io的时候就崩溃了,为什么呀,用的编译器是VC7.1的,自己拿Lua5.1.1的源代码来编译的lib和dll,无论静态链接还是动态链接,到这个地方调用都会崩溃。不知道如果拿源代码来一起编译,会有什么结果呢,呵呵。剩下就是很烦很杂的一些事了,游戏逻辑啊什么的,很多细节要处理。我还想到要写一个skin生成器,至少应该能在一张现有的图片上方便地定义各个元素的位置、大小这些信息,如果每次都是在图像编辑软件里慢慢画,浪费时间不说,人是要疯掉的。还有就是一定要支持压缩打包,不然光秃秃的bmp文件放在那里是很占用空间的,而且看起来很不专业的样子。试了试,一张24位色的1.38MB的bmp文件,用7z可以压缩到36KB!强悍啊,可以让它支持7z、zip和rar的解压,虽然程序启动的时候会慢点,但文件好组织啊。其实有个7z的支持就够好了,之后再考虑zip,最后考虑rar的。游戏逻辑放在Lua脚本里做,有些其它的东西就可能不好做了,比如速度检测等等。因为为了简单,Lua脚本知道的事情越少越好,所以嘛! 上网down了个Q块的外挂,不好用,呵呵。
把MoveWindow的问题改好了,也不知道是哪里出问题了,反正就是这样改了一下就好了,可以缩放成想要的大小了,还把画界面的位置也计算了一下,可以直接画在Client的左上角(0,0)的位置了,哈哈。另外一点就是,把Clipper也弄好了,本来是设置了Clipper,就画不出东西来,后来看了一下返回的错误码,说是BltFast不能Clip,换用Blt就好了,虽然说如果是用软件实现的Blt速度会没有BltFast快,但MSDN上说也只是快了10%而已,更何况它说在硬件Blt的条件下,两者是没有区别的。其实速度不速度现在来看,根本不重要,因为一个小小的方块游戏,对动画要求实在不高,完全用GDI做也可以比较流畅地实现的,要是我开始就是在BDS下用VCL的TImage来写,估计已经快到了可以玩的程度的,呵呵,不过这样也好,学一下C SDK和DX。看了一下DX8里的samples,里面的代码写得真是整齐啊!顺便加了个图标,不过还不清楚为什么没能在窗口左上角显示出来。 本来打算把画方块池的功能完成的,但是人懒了,动了一下就不想动了,呵呵,慢慢来吧。 在看maillist的时候,偶然看到有人提到什么时候用Lua,突然得到提示,为什么不用Lua来做配置文件呢。我还老老实实地用ini文件或者xml文件,要解析也得再研究一下用Win32 API直接怎么解析,以前都是用VCL里封装好的类,唉!这样也好,只要写好一个Lua的交互模块,就可以既用作配置文件解析,又用作游戏逻辑定义了,一举两得啊! 想了想,skin里要定义的数据还是有点多哦,包括主界面图片大小,方块池位置,预览框位置,道具池位置,系统按钮位置,功能按钮位置。 白天考虑了Lua脚本中需要定义的游戏逻辑,包括move_left、move_right、move_down、speed_down、rotate_next、rotate_prev、on_timer、on_cycle、game_start、game_init等。在初始化的时候需要提供一些基本的信息,比如游戏等级等,另外就是对脚本应该有校验,MD5算法比较合适。
用C++ SDK和DX7,还真是烦,什么都要自己处理,郁闷啊!花了好多冤枉时间啊,先是图片压根就显示不出来,后来终于跟踪到原来是在IDE里调试的时候,根据可执行文件的路径来得到图片文件的路径下是没有这个文件的。把它放进去,再看看,发现可以显示一些乱七八糟的颜色了,再设置断点,跟踪到装载位图文件的函数里,发现总是试图去delete一个不知道哪里的值,才明白过来,原来这个结构在使用前应该先清零的,郁闷啊! 现在图片终于能显示出来了,但还有个问题,就是因为没计算好,总是画到(0,0)的位置上去了,另外就是不知道为什么,用了AjustWindowRectEx和MoveWindow后,窗口总是会消失……把这问题解决后,就剩下实时画方块池的任务了! 另外再好好规划一下,跟Lua怎么交互!
现在真的越来越懒了,只写了几行代码就不想动了。似乎DDraw在Normal模式时不能用FLIP?不确定,想不到有这么多未知问题,代码产出率太低了。白天在公司的时候,用VC6编译了unzip、7z这些,似乎还行,回到家,用VC7.1来编译,全都通过了。可以集成unzip和7z的解压缩功能了。 看来还是得好好学习一下怎么使用DX,也不用最新的技术,只要DX7的接口就行了,D3D也暂时先放下吧,DDraw和DSound最先要紧。 首先,只考虑矩形的界面,把主界面画出来,定期调用Lua脚本中的游戏逻辑,再根据Lua脚本返回的结果把方块池、预览框和道具池中的内容画出来。这样看来,似乎没有多少事,就是用DX画个界面,把Lua集成进来。还有一点要考虑的是,怎么做键盘加速和游戏录像功能,同时再考虑一下联机功能。今天在公司看到一段高精度计时器的代码,对于键盘加速,似乎有点帮助,就是定期检测按键状态,按一定速度发送WM_KEYDOWN,用IDA反汇编了kbace.dll,大概看到就是这样做的,也许具体的细节需要再研究。联机从技术上似乎也不是很有问题了,唯一需要的就是时间和毅力了。 好好学习《Windows游戏编程大师技巧》!
和尚挖水 有两个和尚住在隔壁,所谓隔壁就是隔壁那座山,他们分别住在相邻的两座山上的庙里。这两座山之间有一条溪,于是这两个和尚每天都会在同一时间下山去溪边挑水,久而久之他么变成为了好朋友。
就这样时间在每天挑水中不知不觉已经过了五年。突然有一天左边这座山的和尚没有下山挑水,右边那座山的和尚心想:“他大概睡过头了。”便不以为意。
哪知道第二天左边这座山的和尚还是没有下山挑水,第三天也一样。过了一个星期还是一样,直到过了一个月右边那座山的和尚终于受不了,他心想:“我的朋友可能生病了,我要过去拜访他,看看能帮上什么忙。”
于是他便爬上了左边这座山,去探望他的老朋友。
等他到了左边这座山的庙,看到他的老友之后大吃一惊,因为他的老友正在庙前打太极拳,一点也不像一个月没喝水的人。他很好奇地问:“你已经一个月没有下山挑水了,难道你可以不用喝水吗?”
左边这座山的和尚说:“来来来,我带你去看。”于是他带着右边那座山的和尚走到庙的后院,指着一口井说:“这五年来,我每天做完功课后都会抽空挖这口井,即使有时很忙,能挖多少就算多少。如今终于让我挖出井水,我就不用再下山挑水,我可以有更多时间练我喜欢的太极拳。”
我们在公司领的薪水再多,那都是挑水。而把握下班后的时间挖一口属于自己的井,未来当年纪大了,体力拚不过年轻人了,还是有水喝,而且喝得很悠闲。
11点半左右,彭彭突然给我打电话,我很惊讶,说这么远有什么事啊,他说我回来了。更惊讶,呵呵。然后他叫我中午出去一起吃饭,我说晚上行不行,他说晚上要去珠海,于是我说再等半个小时吧。接着我给小思宇发邮件,她还多得意的,我从文字中都似乎能看到她满脸的幸福,说每个人知道后都很surprise。 12点我便出来,说在金泉乐,拦住一辆小巴便冲过去了。4个人,吃得还算开心,我也奇怪,自己居然也努力想多说几句话,要是平时,我肯定只是一个人闷头不响的。
10月6日 虽然回来后没有马上爬到床上好好睡一觉舒服一下,还是整到2点多才睡,结果6点多就还是醒过来了,郁闷死了!然后起来打开电脑,照例听听歌,打打方块,看看论坛。后来想想还是把那些换下的衣服洗一下吧,就简单地搓了几天,清掉肥皂泡后,凉起来。估计9点多了,就出门去了。 上了328给小家伙发了个短信,小家伙还没起床呢!到了门口再打电话,说现在不准进来,晕,我就只好无聊地看看周围的环境,看看她们屋的电表转速,是那里10个屋里转得最快的一个。 好不容易等到小家伙出来,就一起去坐地铁到东门。这一天有点怪,地铁上一路几乎没人下的,都是上的,我郁闷,站了一中,到了东门都下空了!不知道从哪个出门出来,看到有个卖肠粉的店子,就进去权当作是中饭,同时补充早餐的欠缺,呵呵。我点了个虾肠粉,小家伙是香茹牛肉肠,又一人要了一份饮料。我倒是吃得还算爽的,虾是我喜欢吃的东西,冻奶茶也是很爽,就是那种从喉咙头一直凉到胃里的感觉。小家伙居然抢着把钱付了。 之后,就一起逛到太阳百货,逛了一下午,从底楼逛到顶楼,坐了一小会儿休息了一下后,又逛回底楼。从鞋类,看到少女装,再到化妆品,还有成熟淑女装。出来后,说去茂业看看吧,结果两个人都分不清方向。在一个天桥下,小家伙看到有卖水果的,说要吃,于是一人拿着一条哈蜜瓜咬着走,走到一个并非原本想去的茂业店里去了。又从底楼逛到顶楼再回下来,小家伙看到一件线衣,就在那里试试,最后要买了,顺便补了一句,买回去不好看就找你算账,说得我战战兢兢。 出来的时候,小家伙说累死了,我只好嘲笑说她不行,逛街都没有逛得厉害。又回到闹市区,我还是想找一下那个茂业,因为本来就跟同事们说好要在那门口集合的。小家伙又想去逛那些地下商场,草草地走了圈,在卖耳环的地方,小家伙就会停下来看,最后在一个铺位上我说一对挂的很多圈套在一起的好看,很适合,老板要价35,我随口说了句20吧,老板开始还说不行,小家伙就放回去了,老板就说好吧好吧,唉,这些生意人。出来后小家伙还埋怨我,本来想喊15的,我就很委屈地说,我以前没买过这些,又不知道它的行情,我只买过×10的那种价位的。 终于,在又走错几个路口后,找到了那家茂业!从-1楼开始逛,小家伙说要买靴子,看到一个3.8折的,小家伙还是比较心动的,但后来还是没下决心买。在茂业逛了很久,小家伙也试了几次衣服,但是都没买。我给妈妈打了个电话,其实是记错了,以为是周六了,但反正是中秋节,打个电话也是应该的。开始还想等xcc过来了再打,xcc刚从杭州旅游回来,还在回家的路上就给我打电话说要来找我一起玩,我就想,到时候妈妈问我在干吗,我就说在逛街,妈妈问跟谁在逛的时候,我就可以说在和xcc一起逛。小家伙说,你就说跟个女的在一起逛!我说我妈会很严肃认真地来搞“政审”的,会要跟那女的说话,打听那女的家庭背景,学历,收入水平等等等等。结果等不及xcc来了,我就打了,妈妈问我在干吗,我说在逛街,妈妈问跟谁在在逛,我说还在等几个同事过来,要一起去吃饭玩。6点半过的时候,同事们还没来,小家伙又去看那些小玩意的店。又过了一会儿,教授给我打电话,说在茂业门口了,我就过去,看到悍超他们都在。我过去对疯丫头说,你家属呢,怎么不牵他手啊,然后她就说,你怎么不牵你家属手啊,我说我要牵你们的手的啊,哈哈。 走到对面的小肥羊的隔壁的野山菌汤锅,开菜了一会儿,xcc才赶来。大牛的mm在坐我们对面,要我介绍一下。我看看小家伙,小家伙有点语塞,说你来介绍吧。我就说,某女人啊,从路上捡来的。大牛和他mm也不多说了,呵呵。十五六个人吃了,个人感觉口感还过得去。吃过后,一群人就去本色酒吧,有两张桌,都玩起摋子来。去蹦迪的地方看了看,太多人了,我变得很想回去学一下跳舞,至少不要像下面这些人一样,全都只会这样小幅度扭动一下腰。 12点的时候,小家伙说要回去了,因为第二天还要上班。于是xcc也跟我们一起走了,xcc打算去我那里睡了。一个新手司机在那深南路上转了好久,好远的路,才到了目的地,呵呵。结果问了一下,居然第二天不用上班!看到她们屋里多了个男生,听说还是和我一级的我们学校计科的,晕,没印象。一群从同一个学校出来的人在那里聊了一会儿天,我就叫小家伙一起去我那里,顺便把和她一个屋的我的一个师妹也叫上。 4个人先打的到梅林,吃了顿海鲜大排档,然后再打回我住的地方。玩了一会儿,都5点多了,于是我和xcc到隔壁房间睡了,这房间的兄弟只住了几天就出差去了快1个月了还没回来呢,呵呵。10月7日 早上大概才8点多吧,xcc就把我吵醒了,说要去买菜,我实现困得不行,死撑到9点多,起来看电视。我的所有的东西都在我的房间里,而她们两个还睡着呢。过了一会儿,实在忍不住了,就敲门把她们叫起来。我洗漱了一下,就和xcc去菜场买菜了。 买了些排骨,精肉,葱,小白菜,番茄,鸡蛋,剩下的,就都交给她们两个全权处理了。不过我还是做了些淘米之类的简单的活,呵呵。一直到下午2点左右才全部做完,可以吃了。味道真不错,呵呵。吃完后,小家伙还把厨房、客厅的桌子柜子使劲收拾了一遍,涣然一新!心里感慨万千……(此处省略N万字心理活动描写,N≥5)我挡不住了,就跟小家伙交待了一下,去睡午觉了。一直睡到5点半,起来,小家伙们也起来了,回去了。又过了一会儿,和xcc两个人烧了一点饭,热了一下汤,把晚饭也吃了。后记: 这样的生活我还是比较向往的,就是简单的居家,然后能和一些人一起去玩。可是,大部分的时间,我们还是在忙碌于工作,为了那点点生存需求而拼命。