- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DOS游戏编程二十一条
中国人是不甘落后的!让我们协起手来为中国的游戏事业奋斗吧!
DOS游戏编程二十一条
(The 21 FAQ of PC DOS GAME)
本文中所有例子均在WATCOM C/C++ 10.6下调试通过。
1、找一种好的编程语言:
当然,游戏可以用任何语言编写,这是可以肯定的,我就使用过Turbo Basic编写过跑马机游戏,还用VB写过一个半成品的网络拱猪游戏,但是,一个好的编程语言能够达到好的效果,这是毋庸置疑的。一个游戏程序员,梦寐以求的就是一个方便、完美、高速的语言。
汇编是一种高速语言,但不够方便,如果要方便,就必须大量使用宏,笔者就曾经在6502汇编语言中大量使用FOR,NEXT,PRINT等语句,全部是宏,但是相应的内存开销,时间开销都加大了,不划算。
WATCOM C/C++是一种好语言,可以访问大内存,速度快,也够方便,但是调试不够方便,只能用自己写的调试函数解决问题。还有每次运行必须调用DOS/4GW这个32位环境程序,既累赘又不方便,还占地方。
MSC7.0也不错,通过它的虚拟内存机制也可以访问大内存,但可惜是16位仿真的,速度太慢。
DJGPP也是很不错,关键它是共享的,同时还带有一个Alleg的共享游戏库,非常好用,推荐使用,但它生成的程序代码太大,不够优化。
作为游戏程序员,我们追求的就是快一点、快一点、再快一点,如果还有更快的语言,希望大家介绍给我。
2、要写专有程序,不要写通用的,通用,意味着慢,哪怕下次重新来过,也不能为了下次耽误这次。同理,凡是系统给你的函数,调用,要有坚决不用的思想准备,要自己写一套。
3、写出来的程序,每秒钟必须刷屏70次以上,再通过时钟限制在30次(不抖),剩下的时间,就是运行你的游戏程序内容的时间,算一算,不多。
4、要有引擎的概念,引擎包含系统底层的程序,数据结构,调用方法等,这些直接限制你以后的游戏好不好编,一般说来,我们做一个游戏半年时间,其中两个月编引擎,两个月编游戏,剩下两个月调试,可见引擎的重要。永远记着,你写的程序,就计算机而言,就是在搬数,把一堆数据提出来,处理一下搬到另外一块地方,就这么简单,那么,搬数的方法有多重要,你知道了吧。 5、尽量少用乘除法、浮点数,必要时使用移位乘法。这里给一个移位乘法的例子,大家可以参考:
/**/
//XiaoGe Made under WATCOM C/C++ 10.6
/**/
int count_offest(int _width,int x,int y) //移位乘法计算显示偏移值
{
int mode[17]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536};
int i,offest=0;
for (i=16;i=0;i--)
{
if (_width=mode[i])
{
offest+=(yi);
_width-=mode[i];
if (_width1) break;
}
}
return(offest+x);
}
/**/
结果=屏幕宽度*y+x。(这仅仅是一个移位乘法的例子,真正用时,要根据具体情况选择使用)
6、没人会用数学描述去写一幅游戏图形,所有的图形都来自于美工画的PCX,BMP图形,去找一个美工,或者偷一批图形吧。读写PCX,BMP的函数是必须的。
7、游戏程序员语录:给我一个画点函数吧,我能描绘出整个世界。任何时候下,一个最高速的画点程序都是必要的,这里给出一个例子(没有乘法的):
/**/
//XiaoGe Made under WATCOM C/C++ 10.6
/**/
void point(int x,int y,unsigned char color) //高速画点
{
if ((color!=NO_COLOR)
(x=0)(xSCR_H)
(y=0)(ySCR_V))
{
#ifdef VESA_320_200
*(buffer+(y8)+(y6)+x)=color;
#endif
#ifdef VESA_640_480
*(buffer+(y9)+(y7)+x)=color;
#endif
#ifdef VESA_800_600
*(buffer+(y9)+(y8)+(y5)+x)=color;
#endif
#ifdef VESA_1024_768
*(buffer+(y10)+x)=color;
#endif
#ifdef VESA_1280_1024
*(buffer+(y10)+(y8)+x)=color;
#endif
}
}
/**/
8、镂空算法很多,用的都是AND MASK+OR方式,不要去理它,每一个点要处理两遍,包含三次读内存,两次逻辑运
文档评论(0)