赵青-《剑侠情缘网络版》开发回顾

赵青-《剑侠情缘网络版》开发回顾赵青-《剑侠情缘网络版》开发回顾 赵青-《剑侠情缘网络版》开发回顾,(转自剑网1,作者应该是原剑网3技术总监)这篇文章首发于一本谈游戏研发的杂志,是赵青写的,写得非常不错。《剑侠情缘网络版》开发回顾2003年的1月,我刚刚开发完《天王》项目,正在休息、总结和规划下一个项目。《天王》是我开发的众多项目中最满意的一个,虽然这篇文字主要是对《剑侠…

大家好,又见面了,我是你们的朋友全栈君。

赵青-《剑侠情缘网络版》开发回顾

赵青-《剑侠情缘网络版》开发回顾,(转自剑网1,作者应该是原剑网3技术总监)

这篇文章首发于一本谈游戏研发的杂志,是赵青写的,写得非常不错。
《剑侠情缘网络版》开发回顾
2003 年的1月,我刚刚开发完《天王》项目,正在休息、总结和规划下一个项目。《天王》是我开发的众多项目中最满意的一个,虽然这篇文字主要是对《剑侠情缘网络版》(以下简称《剑网》)这个项目的回顾,但作为《天王》的项目经理和主程序,我还是想简单谈谈它。《天王》有几个第一:它是西山居第一个采用外购引擎来开发的游戏,第一个3D游戏,第一个动作类游戏,第一个被我们自己的开发人员所认同、并且愿意自发测试的游戏。虽然由于开发时间短、人员少以及我们没有开发3D动作类游戏的经验,它还有很多不足之处,但从开发人员的观点来看,它无疑是一个成功的项目。今后如果有机会,我会把《天王》的开发历程介绍给大家,不过现在我要回到《剑网》的正题来。
也正在这个时候,已经开发了很长时间的《剑网》出现了很大的问题,项目延迟非常严重,原项目负责人也离开了西山居。需要指出的是这种大的人员更迭已经发生过一次,最初的主程序和项目负责人在2002年中期已经离开了西山居。公司找到我,希望我来做《剑网》的项目负责人和西山居的技术总监。对我而言,这是一个巨大的挑战!当时的情况非常不好,一方面是公司过高的期望和过紧的进度要求,一方面是项目组的普遍士气低落和项目进度的失控。不过我还是相信我对项目控制的经验和我的热情,相信项目组的开发实力,相信公司对完成这个项目的决心和准备投入的人力、物力和财力。后来的事实证明我当时的想法是正确的。在最后的几个月中,我们完成了一个不小的奇迹。6月开始内测,9月开始公测,12月开始收费,最高在线人数一路攀升。更重要的是,《剑网》的成功为公司开发以后的产品积累了很多宝贵的经验。《剑网》收费后10个月,使用几乎相同的技术,公司就推出了第二个网络游戏《封神榜》。
现在,我把在开发《剑网》中的经验教训共享出来,希望能让其他的项目管理人员、项目开发人员少走一些弯路。
一、项目概述
开发规模
《剑网》的开发人员更迭比较频繁 (一、保持团队稳定),所以统计人数是一件比较困难的事情,下面的数字只能反映平均的人数情况
l       项目初期,共4人,都是程序;
l       项目中期,共25人,6个程序、5个策划、14个美工;
l       项目后期,共44人,12个程序、6个策划、18个美工、8个测试
开发时间
从2000年9月项目准备开始,到2003年12月项目收费,整个项目的开发时间为39个月。在这段时间内西山居还推出了3款产品《新剑侠情缘》、《月影传说》和《天王》。
目标平台
PC平台的MMORPG游戏
目标市场
亚洲地区,尤其是华语地区,包括中国大陆、香港、台湾、日本、韩国、新加坡等
开发硬件
l       客户端开发硬件为 Intel P3-800、512M内存、Geforce2 MX 400显卡
l       服务端开发硬件为 Intel 双CPU至强服务器,2G内存
开发软件
l       程序 :MS Visual C++ 6.0、Intel VTune,、Visual Assist, Lua
l       美术 :3DMax 5.0、Photoshop 6.0
l       策划 :Microsoft Office系列软件
二、主要经验总结
从开发周期和投入的人力物力来看,《剑网》都是西山居自1996年成立以来规模最大、曲折最多的项目。这个项目的开发过程中犯了很多错误,也使得我们积累了宝贵的经验。在这里,我先概要地列出一些《剑网》开发过程中的错误和经验,在下面的讨论中,对它们还将更详细地阐述:
n       开发网游和开发单机游戏有着本质的不同,他们的可玩性体现在不同的方面。单机游戏的可玩性主要体现在人机互动,网络游戏的可玩性主要体现在人与人的互动;单机的RPG游戏常以精彩的剧情取胜,而网络多人在线RPG游戏则很难制作出丰富的剧情;单机游戏的玩家比较成熟,大多凭兴趣玩游戏,很多网络游戏的玩家在接触网游之前都没有玩游戏的经历,他们只是把玩网络游戏当作交友或者消磨时间的手段。应该在项目开发的过程中时刻提醒自己,我们要开发的是个网游而不是单机游戏。其实并不是只有我有这样的想法,在和大宇的姚壮宪先生聊天时他也表达了同样的观点。《剑网》的开发人员大都没有开发网游的经验,甚至没有玩网络游戏的体验,所以《剑网》中存在不少单机游戏的痕迹也就不奇怪了。(二、多分析你的产品和多了解同类的产品)
n       游戏首先是一个商业产品,技术只是游戏的一个基础(三、不要追求玩美的技术,用户并不会理会你用了什么技术),或者说只是更好地表现游戏的手段,而不是目的。但由于金山公司以程序员为主,西山居也不例外,实际上很多项目的关键性决策都是由崇尚技术并追求完美的程序员做出的,所以《剑网》中有不少华而不实,却极其耗时的技术研究。比如《剑网》中的3D显示模式的开发耗时巨大,但最终由于效率的原因,很少有用户使用。我的建议是开发一个大型项目时,最好80%的技术都使用成熟的技术。比如《剑网》,应该使用《剑侠情缘 2》的引擎,再花些时间研究客户端的换装系统和服务器端的技术,这样《剑网》至少可以提前一年推出。
n       网络游戏中稳定的服务器端以及提供便捷的运营、维护、更新、信息统计工具是最重要的几件事情(四、工具是提升效率最快捷的方式),应该投入最核心的技术人员和充足的时间去研发和测试。但遗憾的是西山居一直没有自己的服务器端的技术人员,而且对此也没有给予充足的重视,最终需要公司其他部门的支持。而很多关键性服务器端的功能也只是在内测前几周才完成,缺乏足够的测试。
说了这么多《剑网》中的不足,并不是说《剑网》的开发过程一无是处。西山居相对于很多国内的开发团队和小组,更加负责,更加用心,更加细致,更加专业。这些不足说明了国内的游戏开发整体上还处于一个初级阶段。国内的游戏开发团队都需要少一些浮躁,多一些踏实。不论在管理方面,还是对游戏的认识,或是技术方面,我们都有很多地方需要学习、改进。
三、项目起源
2000 年的时候,图形化网络游戏《万王之王》开始进入中国,金山公司也是候选的代理、运营商之一。当时文字Mud已经流行了很长一段时间,国外也有了《UO》之类的网络游戏大作,但是《万王之王》是第一部进入国内的图形化商业化的网络游戏。我也参与测试了这个游戏。即使在当时的技术水平下,我也觉得《万王之王》制作得比较粗糙,最让我不可理解的是,他的同步策略大部分都是客户端的命令需要等待服务端的验证返回,这样的做法使得客户端玩家的行为极为不流畅。这也是金山最终没有运营这款游戏的原因之一。
当时,由于盗版和制作水平的问题,国内的游戏市场非常萎靡。西山居好像金山的一根鸡肋,虽然开发了不少经典的单机游戏,但由于盈利太少,和其他国内游戏公司一样,一直处在奄奄一息的状态。
之后,《万王之王》在大陆的运营取得了出乎意料的成功,也给公司的高层极大的震动,自主研发一款网络游戏提上了日程。如果从那时起公司就投入足够的人力、物力,潜心完成一款网络游戏,那么也许现在金山会占有国内网络游戏市场一半以上的份额。但遗憾的是由于决策的失误,推动力的不足,以及精力过多的分散在其他游戏的研发上,使得《剑网》的推出至少延后了2年,在竞争如此激烈的网络游戏市场,对一个产品来说,这么长时间的延迟几乎是致命的。(五、高层对市场的反应速度或者是否紧贴市场了)
我一直觉得中国现在的游戏开发人员赶上了一个好时候,现在有这么多的人在关注游戏行业,这在以往是无法想象的。不过游戏行业这么火爆并不是因为我们的研发实力有了多大的提高,也不是因为我们开发出了多少既叫好、又叫座的游戏大作,而是我们碰上了一种好的盈利模式,仅此而已。网络游戏杜绝了盗版,又给千万个网络终端前孤独、无聊的人们一种有趣的交流、沟通手段,所以它的成功是一种必然。
四、设计目标
开发初期,设定了一些我们开发的原则和最终的目标,有些是对的,有些是错的。每个决定当时都引起了西山居内部激烈的讨论:
1.       是采用即时战斗模式还是回合制战斗模式。
我们最终采用了即时战斗模式,相对于回合制模式,这样的开发难度稍大些。不过我觉得这不是一个错误的决定。
2.       是否采用超大、无缝链接的地图。
开发人员都有一个美好的愿望,希望开发出超大的无缝链接的游戏世界,让成千上万的用户可以方便的沟通,交流。很明显这是一个听起来很好,但做起来很难,而且没有太大实用性的想法。可惜的是我们决定了要这样做,更可惜的是最终我们花了不少时间也没能实现这个目标。这是个错误的决定。
3.       我们的核心技术人员都是《暗黑破坏神》的忠实玩家,也非常推崇它所使用的技术,模仿它做一个类似的客户端几乎获得了所有人的支持。最终我们完成了一个类似于它的客户端,但显示效率差了很多,而且花掉了我们太多的人力和精力。这是一个错误的决定。
4.       我们曾经有过一个听起来不错的想法,在开发《剑网》的同时,利用现成的资源和技术再开发一个单机游戏。最终这个目标没有实现,我们低估了开发一个单机游戏所要投入的精力。这是一个非常错误的决定。
五、过程模型
《剑网》采用的是快速原型的软件工程模型。这种方式比较适合游戏行业的特点,以及我们项目具体的特点。
一般来说,我们在第一个里程碑通常只会投入核心技术人员完成一个技术原型,以解决规划中的游戏所需功能中可能的技术难点。这一点非常重要。很多游戏开发到中后期才会发现还有不少技术门槛需要跨越,以至项目最终延期。同时我们在第一个里程碑会细化策划的设计,在第一个里程碑结束的时候形成一个比较系统的《设计文档》,这个文档越细致、越系统、越接近游戏最终的设计方案,游戏开发的过程就越顺利。经过这么多年游戏的研发,我深刻地认识到,策划是一个游戏的灵魂,是一个游戏是否能够成功的关键。好的策划需要深厚的功底,需要出色的沟通和表达能力,需要很强的逻辑推理能力,需要优美的文字功底,需要创新精神同时更需要熟悉游戏业务,了解终端用户的心理。好的策划是项目经理、产品经理、制作人的合适人选。不过遗憾的是策划是中国游戏开发团队最薄弱的一环。(六、是否了解你的用户,像史玉柱那样在最前线接触你的用户,知道他们需要什么,他们厌恶什么等等,闭门造车会死人的)我接触过的大部分策或者眼高手低、不切实际,或者难以沟通,或者没有从开发商业产品的角度出发设计游戏。希望我这样说没有伤害到广大策划朋友的工作热情,其实我提到的这些缺点,每个游戏开发团队中的每个岗位上都会出现,只是游戏策划工作的超乎寻常的重要性,所以才会特别拿出来讨论。
第一个里程碑中还会确定核心游戏资源的数据格式,并且完成大部分游戏编辑工具。一般情况下这些工具包括:地图编辑工具、图素编辑工具、模型(图片)编辑工具、特效编辑工具、脚本编辑功能等。《剑网》的第一个里程碑完成的非常不顺利,实际上很多应该在第一个里程碑完成的功能直到项目进展到最后阶段才真正完成。我们只在第一个里程碑中完成了客户端显示和换装系统的技术研究。而非常重要的服务器端的技术研究只是泛泛而过,没有形成一个实用的、具评估价值的技术演示,这是《剑网》整个研发过程中最失败的一点。同时由于客户端过于复杂,地图编辑工具的研发也延迟到了项目接近完成时才最终完成。
七、迭代开发)如果能够顺利完成第一个里程碑,我们会在第二个里程碑中扩展已有的功能,添加核心游戏逻辑,形成一个游戏的原型。第二个里程碑完成后,已经可以看到游戏的雏形。这时候如果发现游戏的可玩性不够,策划还可以做比较大的调整。这个里程碑中美工需要开始利用已完成的编辑工具,来编辑游戏资源。虽然延迟了不少时间,但《剑网》第二个里程碑基本完成。不过遗憾的是,我们仍然没有把服务器端技术原型的研发当作重点,底层网络模型、服务器架构、同步策略都在项目的最终阶段成为项目的拦路虎,以致公司需要抽调其他部门的核心骨干,集体攻关。

后两个里程碑,主要是游戏的内容制作阶段和测试阶段,也就是在第一、第二的原型的基础上根据策划的设计,不断地完善游戏的功能,不断地产品化。这两个阶段也非常重要,大部分游戏功能、可玩性以及游戏的细节都是在这期间完成的。由于技术上已经不存在障碍,所以一般情况下,即使这个阶段出现延迟,也不会对整个项目产生太大的影响。

(八、全程测试跟踪产品质量)从软件工程的角度看,《剑网》做的比较好的地方是非常注重测试环节,测试介入到了项目开发、运营的全过程。这在西山居以往是不曾有的,也是我极力推动的一件事情。在我刚刚担任西山居技术总监时,整个部门没有一位全职测试人员,而《剑网》结束时,我们的测试人员和程序、策划人员的比例基本上达到了1:2,测试人员在《剑网》的后期开发过程中发挥了至关重要的作用,尤其是当《剑网》内测初期,公司缺少专业的运营人员,测试人员就承担了大部分的运维工作,保证了《剑网》内测的顺利进行。

综合起来,特别需要注意的是:
l       要在第一个阶段,也就是技术原型阶段完成真正重要的技术的研究和验证,确定项目的可行性,降低项目的风险。
l       第一个阶段中,策划提供的《设计文档》体现的是对美工和程序的具体需求。《设计文档》应当尽量要做到系统化、清晰。
l       游戏是一个数据驱动的产品,开发阶段需要生成大量的游戏数据。自主研发的游戏编辑工具非常重要,它的易用性会直接影响美工、策划的工作效率。

六、技术要点

金山公司的创始人求伯君先生是个优秀的程序员,公司的核心骨干也大都是程序员出身。因此,崇尚技术,追求完美的程序员文化深深地影响着每一位金山员工。在西山居中,程序员虽然在人数上只占到了很小的比例,但作为金山公司的一个事业部,其思考问题的方式和文化氛围和金山公司一脉相承,都是以程序员为主导的。这种以程序员为主导的开发方式在西山居延续至今,有利有弊。从目前的实际情况看,利大于弊;而从长远看,弊大于利。游戏行业技术门槛较高,技术更迭较快,许多技术甚至直接推动了个人计算机硬件的更新换代。无可否认,技术是游戏实现的基础。同时目前国内缺乏专业的策划人员,所以以程序员作为游戏开发的主导,起码在目前的实际情况下,是一个正确的选择。但是毕竟最终决定游戏优劣的是游戏的可玩性。从长远来看,培养和寻找合适的策划人员,由他们担任制作人,将游戏开发从技术主导转变为游戏性主导,是我们努力的方向。(产品开发中,不切实际追求完美的程序员思维是导致产品延期和风险加大的最主要因素)

相对与单机游戏,网络游戏的技术难点更多。一般情况下,我们会将网络游戏中使用的技术划分成如下几个方面:

1.       通用底层功能
包括游戏中各个模块都会使用的一些基础模块,大致上有:
l       文件管理模块
l       日志功能模块
l       内建的调试机制
l       内存管理机制
l       性能统计分析模块
l       数学、物理模块

2.       客户端的显示
客户端的表现力和效率是游戏能否成功的一个重要的决定因素,以一个3D游戏为例,大致上的功能有:
l       贴图管理模块
l       插件模块
l       模型、动画管理模块
l       场景管理模块

3.       游戏逻辑
游戏逻辑指策划提出的与游戏性相关的各种功能模块,对于网络游戏,大致上有:
l       战斗系统
l       角色人工智能(AI)
l       组队功能
l       交易系统
l       人际关系系统
l       帮会系统等等

4.       服务器逻辑
网络游戏中多台不同职能的服务器支撑起一个完整的游戏世界,他们之间的通讯和逻辑决定了网络游戏的稳定性和负载的上限,网络游戏中不同职能的服务器大致上有:
l       帐号服务器
l       游戏逻辑服务器:完成游戏中角色AI计算,战斗中的伤害计算,经验分配等游戏逻辑相关计算的服务器
l       游戏逻辑集群总控服务器:协调各个游戏逻辑服务器的一个总控服务器,类似于一个局域网中的网关。
l       角色数据库服务器
5.       内部开发工具的研发
游戏开发过程中,美术、策划会使用大量的我们内部开发的工具来制作、转换、并生成最终游戏数据,大致上有:
l       场景编辑工具
l       图素编辑工具
l       模型编辑工具
l       贴图编辑工具
l       特效编辑工具
l       界面编辑工具
l       脚本编辑工具

具体到《剑网》,开发过程中的技术难点主要集中在两大方面:

客户端的显示和换装系统

《剑网》的客户端需要支持两种显示模式:纯二维的显示模式以及类似于《暗黑破坏神》的半三维的显示模式。这给剑网的研发带来来很大的困难。首先是资源格式的问题,同样的资源格式可能适合二维显示,但不适合三维显示。事实上我们低估了这块工作的技术难度。《剑网》后期,资源格式已经定型,大部分游戏资源已经生成,这时我们才发现提高三维显示模式效率唯一可行的方式是重新规划游戏资源的格式和组织方式,但这对于已经进入一个研发后期的项目来说几乎是不可能的。另外,由于《剑网》涉及到复杂的换装系统和数量众多的角色类型,所以我们要设计一种好的换装系统,既能达到策划的需求,又能尽可能降低游戏客户端资源的容量。这也是一个难点。

服务器端的集群结构、网络底层通讯模型、游戏逻辑的同步策略

服务器的稳定性和流畅性是网络游戏玩家最关心的几个问题之一。大部分网络游戏的服务器结构都可划分到如下两类,单游戏服务器结构和游戏服务器群组结构。采用单游戏服务器结构的比如《奇迹》,一个游戏世界由一台服务器支撑。这种结构比较简单,每个游戏世界承载的玩家数量比较少,但正是由于简单,所以比较容易达到稳定、流畅的要求。《剑网》采用了游戏服务器群组结构,由多台游戏逻辑服务器协同运作,构成一个完整的游戏世界。比如我们的一个完整的游戏世界由80个场景构成,单一服务器无法将这80个场景一起载入,我们就把这些场景分别放在8台游戏服务器上,每台大致有10个场景,这8台服务器协同工作,构成一个完整的游戏世界。这种结构设计复杂,承载的用户数可动态调整,要达到稳定、流畅的设计目标,需要付出更大的努力。

同时,选择一个高效的网络底层通讯模型也是我们的一个主要工作。不同的网络通讯模型适合不同的应用,网络游戏对承载的用户数量要求比较高,针对这种具体的需求,我们在Windows平台下采用了IO完成端口的模型;在Linux平台下,采用了实时信号量的网络通讯模型。(由于《剑网》大部分的开发人员都不熟悉Linux下的编程方式,所以我们开发的大部分时间都在Windows平台下进行的,直到大部分功能都已完成后才由专人移植到 Linux平台下,所以我们有两套网络底层库。最终《剑网》的服务器采用的是Linux。)

这里我想重点谈谈同步策略。同步在网络游戏中是非常重要的,它保证了每个玩家在屏幕上看到的东西大体是一样的。解决同步问题的最简单的方法就是把每个玩家的动作都向其他玩家广播一遍,但是这样做会占用比较多的带宽,所以我门要考虑一种比较高效的同步策略,其中涉及如下几个问题:
          同步的范围,即一条网络消息要向哪些客户(玩家)传输
l       同步的内容,即传输哪些内容
l       同步的频率,即多长时间同步一次
l       如何解决网络延迟带来的问题
l       如果优化,减少带宽的消耗
l       如何防止作弊

由于篇幅有限,只具体谈谈同步的内容:

1.       同步内容的分类
n       命令同步,即时发送。命令同步指游戏中的一些瞬间行为,比如玩家和角色的行走、玩家和角色间的攻击,都可视为游戏命令。命令可能是客户端发起,也可能是服务端发起。
n       状态同步,按照一定频率、可以区分细节度发送,只由服务端发起。
由于网络延迟,游戏中同步的内容如果只有命令同步,很容易在游戏进行一段时间后,服务器端和客户端的状态偏差比较大,所以需要间隔一段时间,同步一些关键的状态,校正客户端和服务器端的差别。

2.       逻辑对象属性的细分:游戏由不同的逻辑对象构成,比如玩家对象、角色对象。每个逻辑对象中会包含大量的属性,我们需要在同步时区别对待这些属性。
n       不需同步的属性,服务端和客户端都可根据本地的配置文件载入,比如角色的名字,角色的速度等。
n       需要在对象创建时同步一次,以后不会改变的。比如角色的类别。
n       需要频繁的同步的属性,比如角色的生命。

3.       逻辑对象行为的同步策略
n       客户端自己决定,不需要同步给其他客户,属于客户端专有对象的行为,比如用来播放特效的特效对象,以及用来增加客户端表现力的各种小动物,这些对象不会影响游戏的进行,所以不需同步。
n       客户端发起命令,在发给服务器的同时,为了增加本客户端的流畅度,自己预测命令执行的结果。服务器端将使用同样的算法执行命令,同时将命令转发给相关的其他客户端。其他客户端在收到命令后,在本地执行命令。这种策略的缺点是发起命令的客户和其他客户在执行命令上有一个Ping值的延迟。比如玩家的行走命令。
n       客户端发起命令,发给服务器,但本地不执行,等待服务器处理或者确认,返回后再执行,这样所有的客户端的行为基本一致,也不可能出现作弊。比如玩家伤害计算,玩家升级的判断。
n       服务端发起的行为,发送给相关的客户,比如角色的行走命令,角色的状态同步。

七、游戏设计

网络游戏和单机游戏的可玩性有很大的不同,用户群也有不小的区别,这一点之前已经提到过。网络游戏中应该提供足够的、方便的玩家和玩家间的交互方式,玩家在游戏中建立的人际关系越多、越牢固,对这个游戏的粘着度就越高。一个普通的网络游戏玩家,每天花在游戏中的时间大约是2个小时左右,所以我们需要设计足够多的游戏方式,让玩家减少由于不断的重复而造成的枯燥感。经历了这几年网络游戏的发展,玩家已经开始厌倦单调枯燥的打怪升级的游戏方式,游戏设计者都开始考虑怎样变革才是正确的道路。

《剑网》的设计者希望创造一个丰富的武侠世界。10个门派、5行相克、完全随机出现的、几乎不可能重复的装备系统,这些一直是《剑网》重要的特征和卖点。但是过于复杂的系统使得剑网各个门派间平衡性的调整成了一个艰巨的、几乎不可能完成的任务。同时《剑网》提供的游戏方式过于单薄,玩家在经过一段时间后,很快就会觉得游戏中没有什么可玩的,这也造成了不少玩家的流失。

这里我想再谈一个核心的问题,玩家为什么会选择一款网络游戏,并且保持一定的粘着度,原因大致如下:

l       可以获得一定的利益,或者他感到在游戏中利益是保值或者增值的。这类玩家的典型代表是一些职业玩家;
l       可重复的游戏乐趣,这一点对于网络游戏比较难做到。由于网络游戏的特点,为了防止作弊和减少网络延迟的影响,很难做到操作的技巧性。所以玩家在不断的重复同样的操作行为的过程中很容易感到枯燥;
l       可以获得与人交互的乐趣,这一点正是网络游戏的先天优势,比较容易做到,不过我们需要考虑的是如何做得更有特点

八、结语
   没有想到写了这么多,需要指出的是虽然我现在已经离开了金山公司,但我依然认为西山居是国内比较出色的制作团队。如果有好的决策,把握好发展方向,会有更加美好的未来。这类总结性的文章注定了就是以暴露问题和总结经验为重点。如果有不妥之处,请朋友们多多批评指教。也希望这篇文章可以给正在开发网络游戏的朋友一些借鉴,哪怕只有一点,我也心满意足了。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/niitlcj/archive/2009/08/19/4458900.aspx

posted @
2010-07-13 20:01
麒麟子(Alex) 阅读(
) 评论(
)
编辑
收藏
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161944.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月19日 下午10:46
下一篇 2022年7月19日 下午10:46


相关推荐

  • Visual Stdio 中的error C2001: 常量中有换行符

    Visual Stdio 中的error C2001: 常量中有换行符errorC2001 常量中有换行符问题 使用 VisualStdio cout 中文的时候 有的时候可以正常编译并运行 但是有的时候会出现 errorC2001 常量中有换行符 出现 error 原因是中文的字数为奇数解决办法 控制中文的字数为偶数就可以了 D

    2026年3月16日
    2
  • php 除法取两位小数,php中除法取整的方法(round,ceil,floor)「建议收藏」

    php 除法取两位小数,php中除法取整的方法(round,ceil,floor)「建议收藏」PHP中遇到需要将除法所得结果取整的情况时,就需要用到以下方法:1.round:四舍五入round()函数对浮点数进行四舍五入。语法:round(x,prec)参数描述x可选。规定要舍入的数字。prec可选。规定小数点后的位数。说明:返回将x根据指定精度prec(十进制小数点后数字的数目)进行四舍五入的结果。prec也可以是负数或零(默认值)。提示:PHP默认不能正确处理类似”…

    2022年6月21日
    54
  • Python 编程规范 —— TODO 注释(结合 PyCharm)

    Python 编程规范 —— TODO 注释(结合 PyCharm)编程是代码和注释的统一 TODO 自然表示需要做而未做的一些待完成的事项 有助于事后的检索 以及对整体项目做进一步的修改迭代 TODO Usea hereforstrin TODO Zeke Changethisto 最好在注释中包含一个截止日期 2009 年 11 月解决 或等待一个特定

    2026年3月27日
    1
  • 学习BNF ABNF范式

    学习BNF ABNF范式参考 nbsp nbsp nbsp https blog csdn net sinolover article details nbsp nbsp nbsp https blog csdn net u0 article details 巴科斯 BNF Backus NaurForm 范式的内容参考 https blog csdn net shaonian wuya a

    2026年3月19日
    3
  • QNET 弱网测试工具

    QNET 弱网测试工具最近在找稳定的弱网测试工具 偶然发现腾讯竟然有一款 QNET 弱网测试工具使用方法很简答 下载 QNETAPP 安装 用登陆后 即可开始 可用的弱网环境 自定义弱网环境 实际使用情况 左边工具栏可随意切换网络环境 一般大约 3 秒左右就会切换成功 右边工具栏实时显示网络情况 还可以自动抓包下载方式 应用宝搜索下载

    2026年3月18日
    1
  • 安装quagga与配置quagga ospf

    安装quagga与配置quagga ospfQuagga 安装首先要求探测机服务器能够连接外网源 Centos 能够使用外网 yum 源 Ubuntu 能够使用外网 apt 源 能够使用外网源直接下载运行相关软件 1 首先查看探测机服务器的系统类型 cat etc issue2 如果是 Centos RedHat 类系统 使用 yuminstall yquagga 命令安装 quagga 如果是 Ubuntu 系统 使用 sud

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号