|
|
2004年04月30日
一种自由软件的脚本语言 Lua ,由于在游戏界日益成为主流脚本语言(得到著名的卢卡斯艺术公司两款游戏采用,并在GameDev.net的调查中高居脚本语言榜首),最近引起了业界的广泛关注。 Lua (葡萄牙语,义为月亮)是一种轻量级的强大的扩展语言,用纯ANSI C编写,最初版本只有6000行代码,却实现了垃圾收集、反射、面向对象等机制。Lua 是由巴西里约热内卢天主教大学计算机系的Roberto Ierusalimschy 等人于1993年开发的。 最近,Roberto Ierusalimschy 撰写的《Programming in Lua》一书也已经出版
myan评论:Lua让我脸红
http://www.csdnblog.net/myan/archive/2004/04/21/490.aspx
Python是荷兰人写的,Ruby是日本人写的,Lua是巴西人写的,我这个中国人只能在这里脸红。
Lua是所有动态语言中间平均效率最高的一个。它最初是以Library的形式存在,纯粹只是用作C/C++的一个扩展。现在不仅发展出了解释器,还发展出了编译器。游戏开发里Lua是使用最广泛的脚本语言。当世界上第一本Lua图书上市销售的时候,一位读者评价道:“Lua is a real gem.”
Lua很棒,Lua是巴西人发明的,这些都令我不爽,但是还不至于脸红,最多眼红。
让我脸红的是Lua的源代码,百分之一百的ANSI C,一点都不掺杂。在任何支持ANSI C编译器的平台上都可以轻松编译通过。我试过,真是一点废话都没有。
我1996年就学会了C,1997年就跑去研究Win32 API,后来是C++,STL,Java... 直到2002年看到C Interfaces and Implementations,才知道仅仅用ANSI C就可以实现一个强大的优美的library,直到2004年看到Lua的源代码才知道仅仅用ANSI C就可以实现一个非常快的虚拟机、非常棒的解释器/编译器和非常漂亮的语言实现。
这8年我都干什么去了?
-----2004.4.29来自 csdnblog
我的感觉也是如此!!!
2004年04月10日
平时在学校待惯了的我,4.23就要去上海参加MVP的颁奖大会了。第一次独自出门跑这么远,心里多多少少有点不踏实的。不过这次还好,联系到了同是这届的成都的MVP李庆大哥一起来上海。
这里还有不少1月份的新任MVP吧,大家4.23见吧。
2004年03月16日
在我做的一个小游戏中,经常遇到要计算最短路径的问题。从一个格子走到另外一个格子,不过中间有很多障碍物(就是一些格子不能走上去),计算最短路径是个比较困难的问题。
如果使用著名的A*算法,那么消耗的内存太多,不可取.我需要搜索的范围很小,最大也是14*14的矩阵格子,最佳的算法就是一个SLG游戏中常用的小范围寻路算法。
小范围寻路法的核心就是在于计算距离.把14x14的格子里面每个点到目的点的距离计算出来后,人物只要一直按距离最小的格子走,那么一定可以走到目的地。这个算法可以很容易证明,只要计算的格子范围足够大,人物是一定可以走到目的点的,而且所走的路径是最短的。
而计算距离的方法也很简单,我们只要把目的点的距离设置成0,然后再计算它周围的点的距离,如果是不能走的格子,那么距离值设置成无穷大,如果可以走,它的距离就是它附近的格子加1.
计算距离的算法我已经写在下面了.
算法的时间复杂度等于 O(n*n*(n/2-1)+n^2),在小范围内,速度比较快,最大的优点就是很简单,不依靠其它数据结构,所有操作都在数组内完成。
//*********************************************************** /** * 计算以某点为中心的矩型区域的每个Tile到中心的距离 * @param MapPoint int[] 中心点的Tile地图坐标 * @param Move int 范围值 * @param bIngnoreNpc boolean 是否需要忽略Npc的阻挡 * @return int[][] 以某点为中心的矩型区域的每个Tile到中心的距离 */ protected int[][] Game_Calulate_Distance(int []MapPoint, int Move, boolean bIngnoreNpc) { int i,j; int[][] Dst = new int[2*Move+1][2*Move+1]; int step; // 设置初试距离都为无穷大 for(i=0;i<2*Move+1;i++) for(j=0;j<2*Move+1;j++) Dst[i][j]= Integer.MAX_VALUE; // 设置目标点的距离为0 Dst[Move][Move] = 0; for(step=0; step<=Move-1;step++) for(i = Move-step; i<= Move+step; i++) { for (j = Move - step; j <= Move + step; j++) { if (Game_Tile_Test_CanWalk(new int[] {MapPoint[0] - Move + i - 1, MapPoint[1] - Move + j}, bIngnoreNpc)) { if (Dst[i - 1][j] > Dst[i][j]) Dst[i - 1][j] = Dst[i][j] + 1; } if (Game_Tile_Test_CanWalk(new int[] {MapPoint[0] - Move + i + 1, MapPoint[1] - Move + j}, bIngnoreNpc)) { if (Dst[i + 1][j] > Dst[i][j]) Dst[i + 1][j] = Dst[i][j] + 1; } if (Game_Tile_Test_CanWalk(new int[] {MapPoint[0] - Move + i, MapPoint[1] - Move + j - 1}, bIngnoreNpc)) { if (Dst[i][j - 1] > Dst[i][j]) Dst[i][j - 1] = Dst[i][j] + 1; } if (Game_Tile_Test_CanWalk(new int[] {MapPoint[0] - Move + i, MapPoint[1] - Move + j + 1}, bIngnoreNpc)) { if (Dst[i][j + 1] > Dst[i][j]) Dst[i][j + 1] = Dst[i][j] + 1; } } } return Dst; }
2004年02月28日
那天在《CSDN开发高手》上看到一个篇关于VB中嵌入VB编译器使用例子,从而实现了动态编译过程。现在的编译器都十分庞大,就连Linux下的Gcc也是大得吓人,如果让它嵌入你的程序, 显然 没有办法。其实真正核心的编译器部分大致就是词法分析,语法分析,语义分析和代码生成。像Java这样的编译器,要精简,也是不到1MB就能搞定的。
前几天在和一帮学生谈编译器的开发,由于我之前已经尝试自己搞这样的开发。发觉其实编译器并非像一些人想象中的那么复杂。最终问题也就是核心算法的问题。似乎又是回到核心算法问题了。你晓得这个算法的原理,那么你就会觉得简单,如果你不知道,当然就会觉得复杂。就比如微积分,你学过它的原理,你就知道怎么计算圆的面积,如果你没学过,你肯定觉得它简直不可能精确地算出来。
我记得之前《程序员》杂志上有人这么说,一旦你做项目的功力强了,只要有时间,即使像Office这样的系统也能设计出来。不过我就迷惑了。做项目做得久,并不代表你的学识就强了。Office这样的系统中肯定有它特别的核心算法,如果你不知道,你没学过,你能自己去发明,自己去创造吗?不说Office吧,还是回到编译器的开发。如果你做项目的功力很强,你能说你做得出Delphi吗?编译技术的理论是好多著名的科学家用了很多年的时间来完成的,难道你做项目的功底强就能自己创造?做项目的功底其实无非就是一种经验的积累,做多就是了。而学识则需要一个人潜心地学习,理解,很多时候还需要老师来指导(这就是为什么学习过程中需要老师).
在企业的人瞧不起大学生。认为他们没有能力。其实也就是没有经验而已。不过在中国,大学的研究开发能力还远远强于企业。我不敢多说,至少像政府,军工,863的这样的大项目,通常还是交给大学来做的。
2004年02月21日
前几天,花了MS送给MVP的150$中的2/3去买了一套无线鼠标和键盘.可是送来后,发现安装Bluetooth需要安装一个q323183的东西.可是MS的配套光盘上只有英文版,日文版...就是没有中文版的.而我的WindowsXP是中文版的.我去MS的网站,找了半天也没找到.
请问大家有什么办法能让我的中文版WinXP安装上这个q323183_wxp_sp2_x86_enu.exe?
G:\Prereq\BthStack\enu\q323183_wxp_sp2_x86_enu.exe
请问谁有q323183_wxp_sp2_x86_chs.exe的,能不能发到我的tangl_99@hotmail.com里面
先在这里谢谢大家了!!!
2004年02月16日
以前程序大师就说过,程序=数据+算法。当初想,可能是这样,其实心里还很迷惑的。这里的程序既然包括了数据,那么完全具备了一个软件的特征。那么是否可以说软件=数据+算法?对不?当然,这里的数据不只是存放在数据库的信息,还包括输入输出等信息。
当初师兄说过,学计算机只要把两个东西学好就可以了,一是器件,二是算法。器件当然就是各种数字chip,算法当然就是我们学的计算机编程算法,不过说到底还是数学的一个分支。
还有一点,我发现很多高手原来都是编译技术的高手,什么Unix之父(C语言之父),Java之父,Microsoft之父(Bill Gates,呵呵,写第一个Basic),C++之父,Delphi之父(号称世界上最厉害的程序员)。
2004年02月11日
PC上有两个游戏是我百打不厌的.1.NBA 2 三角洲突击队.
每天下班回到寝室我都要操练一下.逐渐已经形成了一种习惯.特别是三角洲.我喜欢在地图上设置50多个敌人,然后冲进去去冲杀.如果要能保住性命,那么我必须平均一秒种解决3个敌人,而且必须一枪一个,不能有一个偏差,否则就是丧命. 或许这样能让我感觉很刺激,但是我觉得最重要的一点就是这样子很能锻炼我的敏捷.就跟打篮球一样.平时工作时间太长,根本不能有体育锻炼的时间,那么在电脑上模拟,或许就是一种很好的办法.虽然它不能锻炼你的身体,但是能够刺激你的大脑,就犹如在运动场上.
2004年02月10日
Symbian已经被开发者骂得不行了.主要是它提供的开发工具做得太差了.在Nokia的开发论坛http://www.nokia.com.cn/forum/chinese/sch/index.html有很多免费下载的工具.Symbian是用C++来开发的,它提供一些对60系列手机底层的控制,比J2ME功能要强一些.Nokia提供Symbian SDK for Visual C++ 6.0的也提供Symbian SDK for Builder C++.但是都不要用.里面的开发结构也搞得莫名其妙地复杂.感觉Nokia不太会做软件.
J2ME就不同了,SUN提供的J2ME标准MIDP 1.0,不光适合于Nokia,也适合西门子,Moto的手机.不过不同的产商也提供了自己手机独特的API.比如Nokia的提供图片的旋转,alpha混合等等,你可以直接调用它的API,那么速度就快得多.J2ME的缺点就是速度慢,内存小,在Nokia s40(Nokia 3100,7210,6610...),堆分配内存只有210KB,连建立双缓冲都不行.不过在Nokia s60(Nokia 3650,7650,N-Gage)就好多了,内存大了两个数量级别,没有OTA 64KB的限制.不过就是贵!!!
感觉Nokia还是挺慷慨的公司,它不仅免费提供所有开发工具,还提供各种各样的开发文档,技术技巧文章,而且更新很快.唯一不足的就是,它太过于偏重于Symbian,而把s60上面的J2ME的模拟器做得还没s40的好.关于Nokia的开发信息,都在我前面说的http://www.nokia.com.cn/fornm/里面!
听说N-Gage马上就要登陆中国了,太高兴了.
SmartPhone确实比Symbian好很多.可是SmartPhone的手机没Symbian的手机普及.
至于J2ME,那更是没法比了。J2ME本身就是个不错的平台,可是如果在本来资源的缺乏的小型设备上外加一层VM,那么速度将会更慢。可惜手机不能像GBA那样,完全地把裸机拿给你来开发,那么直接用ARM C/C++写的机器码速度肯定最快,只是代码字节数会很大而已。但是随着GPRS的性能提高,下载超过100KB的文件将会变得越来越稳定。那么直接以Nokia s60一样的104MHz的CPU,应该可以做出一个386电脑上的应用程序了.
2004年02月09日
如果要在Nokia 3100这样的1500元以下的机器上运行45度的SLG游戏,不做运行上的优化,那么速度肯定跑不快.
如果要在OTA 64KB这样狭小的空间内完成一个RPG游戏的存储,不做存储上的优化,那么好的图片根本就不敢用进来。
如果要在200KB的堆内存完成一个战斗系统,不做内存空间上的优化,那么SLG就只能是一对一的街机游戏。
那么这里一共需要3个方面的优化。 1.速度 2.存储 3.内存
2004年02月08日
做了快一个月的兼职,感觉还挺不错的。每天9:00从寝室赶到公司,然后干到晚上10:00再从公司回到寝室,看看电子书后就睡觉。假期里同学们都回家了,一个人在寝室就方便多了,不用跟大家挤厕所,挤水台,不过有一次晚上睡觉的时候听见老鼠的声音倒把我吓着了。
公司的人挺照顾我的,可能因为我是年纪最小的,而且还是个学生吧。做游戏是我一直的梦想,现在我们公司这么厉害的美工来合作,如果我不努力,那简直就是荒废了。
在初步熟悉了J2ME for Nokia 60系列后,就开始担任一个宣传片的制做。有公司的主程在一边指导,比起当初独自搞GBA开发的时候少走了很多弯路。
RPG游戏向来是我的最终目标。而现在在中国移动梦网上提供的KJava的RPG游戏是少之又少,大家都看准这个机会。于是公司的人马上就投入全力打造RPG游戏。不过这次我们的目标不再是Nokia s60系列的手机了,因为60系列的手机价格实在太高,远远没有Nokia s40系列的手机普及,那么我们就把平台最终定在了Nokia s40系列。
Nokia s40的手机价格只有s60的一半还少,那么性能也当然比s60差多了。OTA下载限制你的Jar文件只能有64KB大小,再加上移动梦网的百宝箱非得嵌一个Logo到你的游戏上,那么你能用的就只有60KB不到了。60KB来做一个RPG游戏?搞错没有!这简直就是不可能的事情!不过我们现在就是能把它办到。首先得感谢我们公司的美工JYO,他是我见过最厉害的美工吧,不关图片做工厉害,还能让一个256x256的城市切割开后,只有10KB不到所在空间。有了这样的美工,那么我们的RPG游戏仅仅在画面上就能超过了一般的KJAVA游戏.
假期过得真快,除去10天在家里,我把我全部的精力都投在了这个RPG游戏上。每天上班下班睡觉,似乎什么事情都是一模一样的,除了手上的代码在不断增加外,还有就是日期的号数在不断增加。虽然每天很累,但是我时刻处于兴奋之中。
对了,忘了自我介绍!我是新来的。我的名字叫唐良,也是刚刚收到美国寄来的MVP书包。
|