All Stories

去喝酒了

好久没喝得这么痛快了!!老大请客,哈哈!

单机3.0的打榜功能

  好奇,看了一下coolkuai3.0的打榜功能,从网站上看到有几个trc文件,从文件名看,就是支持各种不同类型的打榜功能的,再打开coolkuai3.0,随便打一种榜,查看一下该进程的模块信息,果然发现它装载了一个在临时文件夹中的trc文件,再看一下这个trc文件的PE信息,没有导入信息,只有几个导出函数 Core/GetCore/OnAfterAction/OnBeforeAction/OnGameStart,用PEiD看也看不出是用什么编译的,反正体积很小,都只有3、4KB,也不像是用ASPack处理过的。oneaddone在这点上做得挺好的,用户根本不用管要下载什么文件来支持新的玩法,只需要知道在那里点选一下,就可以了。

我的方块W.I.P #8

  回家就写了两个函数,晕,4个小时哦,一边聊天,一边打方块,一边看网页,一边写代码,果然,只写了不到200行,呵呵!看明天或者什么时候把顺变逆变的写完了,就可以加上接受输入的代码了。还有就是,消行的处理,不能就这样,应该有个落块的动作之后的延时,这样让玩家知道是因为这个落块导致的消行。  要努力哦!《PIL》还是很值得反复看的,因为对于Lua方面的资料真是稀缺,除了《PIL》,再就只剩下官方manual值得看了。而对于它与C/C++的接口使用,LuaTinker是个比较值得学习的资源,因为代码很少,不会让人看到头昏。如果说,要能完整地看完C++的实现技法,参考三本书,应该就可以了,分别是《Modern C++ Design》、《C++ Templates》和《C++ Primer》。《C++ Primer》可算是一本完整的C++语言参考书,所有基本的知识几乎都讲到了,《C++ Templates》则可算是讲述了C++中template的完整使用参考吧,而《Modern C++ Design》是一种policy based的编程技术的完美演绎,对于如何使用template来产生代码生成器这样的任务,提供了极佳的范例。而LuaTinker的实现,正好是这几方面知识的一次良好体现。

打方块去了

  和江江她们打方块去了,呵呵,速度也没啥提高,一直在1.2x,有点气愤,为什么我就练不快呢!  白天在公司,看了好久的《Programming In Lua》,还遇到一个C++ new的没见过的用法,去公司内部的支撑论坛问了下,好菜啊,没看过《C++ Primer》就这样水啊!我大概是从大学里开始养成的坏习惯吧,静不下心来仔细看书,总希望有个速成式的学习快餐,可以随便翻一下就能学会一些东西。大部分时候,都是看一下目录、前言、序就当是看过一本书了,到时候知道去哪里查阅就行了。  在看LuaTinker的代码的时候,还学到一招,创建匿名的对象,并直接调用返回值为该类对象引用的成员函数。有趣,这种匿名对象的生命周期好像只在当前代码行内有效。  又看了一点点LuaBind的代码,原来以前在Boost.Python的examples里看到的那种奇怪的语法,只是重载了操作符operator,和operator[],呵呵。从云风的书上看到,如果不是忙于各种各样的日常事务,大多数的程序员一定会迷上博大精深的C++。说得一点都没错啊,现在看来C++ template的运用,对我来说就是一个很大的诱惑。  要看懂LuaTinker的代码,还是很依赖于对Lua的深入掌握,尤其是Lua提供的C API,如何让Lua脚本能调用C++里的类方法,这样的技术是LuaTinker提供的重要功能。Lua与C之间通过一个virtual stack来实现通信,所以virtual stack的操作很迷惑人了。看来还是得再多看几遍PIL,再试着自己写些代码。另外,云风的书里也有提到过怎么进行这样的封装,不过我更倾向于LuaTinker这样的方案,因为目前我是彻底被C++ template技术迷倒了!

挖一口属于自己的井

  因为要缴房租了,去取了钱,顺便查了一下余额,天哪,我的钱都到哪里去了!唉,郁闷之极,这几个月来,一直为了这样的事情烦!心理总是不爽啊,不平衡啊!  每天下班回家,便挖一点,看心情好坏挖多挖少也不重要,最后能挖出一口属于自己的井就可以了。  给自己定了2大类目标,写在图片上,设为桌面。  技术目标:C++泛型编程、Lua及与C++集成、DX+Win32API游戏程序设计、编译原理。  产品目标:方块、Socket捕获、按键辅助、NES模拟器、音频播放器、桌面管理。

我的方块W.I.P #7

  晕死,我用的算法怎么这么麻烦!算了,不管这么多,最后能用就行了,谁管你里面用了多巧妙的算法呢!  现在要考虑的有:1、到顶了后,怎么让它停下来;2、随机程序不够啊,怎么总是连着出来好几个一样的块;3、消行的时候,活动块怎么处理。

我的方块W.I.P #6

  哦呵,有动画了,但游戏逻辑还没实现好,看来真得慢慢想一下,幸好没有一开始就用Lua脚本来实现,不然我肯定疯掉了。定时器改用高精度的了,不用GetTickCount了,大致实现了在一个循环里做多个定时任务了,只是对于方块的速度,跟coolkuai3.0还有点区别。真的每天只能做一点点事情哦!  看了一下LuaTinker,刺激啊!给我最大的刺激便是,要好好学GP,好好学C++ Template,好好学《C++设计新思维》!短短不到1000行的代码,给Lua的C接口加上了一个很C++的轻量级wrapper,果然,Andrei Alexandrescu发现的和总结的技术对于实现库,是很有用的!好些语法,我都没看到过,每每让我顿悟,原来C++可以这样用!LuaTinker真是个有趣的东西,看看它的源代码,一来可以学习一下C++ Template的GP方法,二来可以学习Lua的与C的接口使用,真是一举两得!

我的方块W.I.P #5

  昨天跑去和xcc还有他女朋友一起吃饭去了,那家梅林的小馆子,可以吃到比较正宗味道的川菜。3个人才吃了50块钱,3荤1素,外加2瓶啤酒。从小馆 子出来,才想起要给家里打电话,因为在馆子里,手机没信号。妈妈果然很着急,因为打不通我的电话。然后三个人走到一个住宅小区后面的小公园,有些公共的健 身器具。我想起疯丫头住这个小区里,就给她发短信说,我在她家阳台下,于是两个人在那里打电话,最后,她在她房间里朝着我挥小红手绢,那情景真是有趣,就 像xcc说的那样,完全一个童话里的人,可怜的小女孩被关在城堡里,朝着外面的小男孩呼救。回到家,发现z3回来了。  写游戏还是多好玩的,尤其是在写的过程中可以试验各种新学到的技术。现在想起来有点遗憾,当年在学习就应该做这些事的,不然现在就可以做更高级的事了,或者至少做这些事应该轻车熟路得多了。  我想还是先内嵌支持游戏逻辑吧,这样程序流程比较好调试,不然同时调试Lua脚本和C++宿主程序,会死人的。到时候可以设置个开关是否使用内嵌支持的标准方块逻辑,或者只使用外部Lua脚本定义的游戏逻辑。  7z格式的解压缩支持暂时也够用了,本来还想加入对rar和zip的解压缩支持的,后来想想,一来暂时不要放时间和精力在这个上面,应该先关注游戏功 能实现,二来为了保持程序文件体积不再为了些额外的trivial功能增加。其实可以在有空的时候,编译一个dll,同时支持这3种格式的解压缩。  游戏逻辑中有几点要注意的,是否贴边了,是否着地了,这两点是最关键的,贴边了就不能作某些方向的旋转和移动了,着地了,就应该返回一些统计数据,同时要把下一块丢出来。还有就是定时回调的支持,也是主要为了作些技术数据统计用的接口。

我的方块W.I.P #4

  很奇怪,单独编译了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,嘿嘿,就是开发效率太低了。