程序编码规范

上传人:gbs****77 文档编号:10149978 上传时间:2020-04-10 格式:DOC 页数:9 大小:125.50KB
返回 下载 相关 举报
程序编码规范_第1页
第1页 / 共9页
程序编码规范_第2页
第2页 / 共9页
程序编码规范_第3页
第3页 / 共9页
点击查看更多>>
资源描述
让虚拟世界和现实世界成为相互的起点和终点蜗牛游戏程序编码规范 (版本 0.1)规范说明:1一、 命名规则1二、 程序的版式3三、 注释5四、 服务端平台无关7五、 服务端表格操作7六、 客户端文件读写8七、 客户端内存操作8八、 脚本内的注释9规范说明: 制定该规范的目的是让程序清晰易懂、易维护、易管理。该规范为强制规范,必须执行,如果有没涉及的地方请参考高质量C+-C编程指南。当所在编程环境(如MFC、Linux)与本规范有差异时,可以使用所在编程环境的规范,但是同一个项目必须是统一的规范。最后希望大家都能养成一个良好的程序习惯,一个好的习惯受益终身!一、 命名规则1所有命名应当直观且可拼读,并具有实际意义;2类名和函数名用大写字母开头的单词组合而成,接口类名以I开头;3常量全用大写的字母,用下划线分割单词,尽量不要使用宏;4类的数据成员加前缀m_,全局变量加前缀g_,静态变量加前缀s_;5变量名第一个字母小写,使用“名词”或“形容词+名词”的词义表示法;示例:局部变量char *pStringBuffer;int &stringFindResult;bool isEngineStartup;函数命名unsigned int GetVoyageCoreState();static bool GetVoyageServiceCount(int &count);结构类型 struct NodeValue int width; int height; 枚举类型(枚举值必须大写且有前缀) enum VoyageSupportType VOYAGE_OS_SUPPORT_INVALID = 1,VOYAGE_OS_SUPPORT_WINDOWS = 2 联合类型union Colorunsigned char arrColor3;struct ColorRGBunsigned char r;unsigned char g;unsigned char b;类类型class Objectint m_width; / 宽度 int m_height; / 高度void SetValue(int width, int height); / 成员函数virtual int GetArea(); / 虚函数inline int GetWidth(); / 内联函数;抽象类class ISpriteManagerpublic:virtualintGetSpriteID() = 0;virtualboolIsSpriteExist() = 0;自定义类型typedef unsigned int Number;全局变量(我们不主张使用全局变量)int g_howManyPeople;静态变量static char *s_pStringBuffer;常量const float SPRINT_RADIUS = 100.0f;回调函数typedef int (*CALLBACK_SYSTEMINIT_FUNC)(IKernel * pKernel);二、 程序的版式1 一行代码只做一件事情,只写一条语句, 语句排版整齐;2 关键字之后要留空格,赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “=”、“=”、“+”、“*”、“%”、“&”、“|”、“”这类操作符前后不加空格;3 程序的分界符和应独占一行并且位于同一列,同时与引用它们的语句左对齐。 之内的代码块在右边4格处左对齐,这里的4格也可以是Visual Studio里的一个TAB;4 代码行最大长度宜控制在80个字符以内;5 代码应按功能分块,代码块之间必须有空行,而且每个代码块不要超过10行。示例: 语句分行和空格(表示空格)for(int i=0,j=0;(ibackBufferWidth)&(j5) else if(nb)do while(ab); switch(n) case1: w=w+2; break; 代码块 / 获得字符串长度。 int length = (int)strlen(pString); / 如果长度为空,直接将当前String类对象置空。 if (0 = length) m_pString = NULL; m_length = 0; 三、 注释1 对外暴露的模块接口全部要求使用“doxygen” 注释对文件、类、函数、变量进行注释;2 所有文件和函数必须有功能说明注释,这里不要使用“doxygen” 注释(便于生成程序文档);3 代码块的起始处必须有该代码块的功能说明注释;4. 通信的消息和命令必须有功能和参数注释。“doxygen” 注释示例:接口文件首部/*filevarithmetic.hbriefIString模块是voyage引擎开发以及游戏开发所使用的算法集合模块。authorArmterla Xdate2007.12.1*/接口函数注释注意:这些接口注释都是写在头文件里的。注意:接口参数要写IN或者是OUT以表明参数是输入参数还是输出参数。函数接口注释/*brief 对任意类型元素的数组进行快速排序。param pHead IN元素数组首地址。param ppDstHead OUT输出一组经过排序的指针。*/void QuickSort(void *pHead, void *ppDstHead);类接口注释/*brief IString类是用于在Voyage引擎内部进行字符串处理的类。 IString类可以完成快速的字符串连接、分割、字串查找、 字串修改等功能。*/class IStringpublic:/*brief IString默认构造函数。remarks 使用默认构造函数构造IString对象不会 申请任何堆内存。*/IString();/*brief 使用标准字符串构造IString类对象。param pString IN指定源字符串。也就是使用哪个字符串构造当前IString对象。remarks 这个构造办法会申请堆内存,构造时调用一次堆分配。 分配空间大小与参数指定的字符串长度加1相等。*/IString(const char* pString);/*brief 析构函数,如果当前IString类对象已经申请了堆内存, 该函数会释放这个堆内存。*/IString();;通信的消息和命令/*brief 聊天内容信息 param 聊天类型,类型int param 聊天内容,类型wstring*/MSG_SERVER_SPEECH = 1001模块内部注释示例:文件首部/*file$FILE$brief文件说明author %USERNAME%date$DATE$*/函数注释/做地形的可视检测int TerrainSubObject:IsVisible(int x,int z)变量注释int ValCol;/修改表格的第几列数据四、 服务端平台无关1 服务端程序不要使用依赖于操作系统的API和数据类型,以及和操作系统相关的规则,以便于未来Windows和Linux平台切换。五、 服务端表格操作1 服务端表格“Record”的名称定义也要符合命名规范;2 在操作时不能直接用数字表示列号;示例: / 表格列号的定义enum CCR_CLONE_SERIAL = 0, CCR_CYCLE_TIME, CCR_INTO_COUNT, CCR_COL_COUNT; / 表格定义和访问 pKernel-AddRecord(index, CloneCountRec, CCR_COL_COUNT, 128);pKernel-SetRecordColType(index , CloneCountRec, CCR_CLONE_SERIAL, VARTYPE_INT); / 副本号pKernel-SetRecordColType( index , CloneCountRec, CCR_CYCLE_TIME, VARTYPE_INT); / 进入时间pKernel-SetRecordColType(index, CloneCountRec, CCR_INTO_COUNT, VARTYPE_INT); / 进入次数六、 客户端文件读写1 客户端必须使用引擎提供的API进行文件的打开、读写、关闭等操作。示例:HANDLE hFile = _CORE_API-fio-_CreateFile(filename, GENERIC_READ, 0, OPEN_EXISTING); if (hFile = INVALID_HANDLE_VALUE) return false; DWORD Length = _CORE_API-fio-_GetFileSize(hFile, NULL); if (Length 0) char *pBuffer = new charLength + 1;_CORE_API-fio-_ReadFile(hFile, (void *)pBuffer, Length, NULL); _CORE_API-fio-_CloseHandle(hFile);七、 客户端内存操作1. 分配内存并调用默认构造函数: char *p = Voy_New(char, 23); 等价于 char *p = new char23; CUnit *p = Voy_New(CUnit, 2); 等价于 CUnit *p = new CUnit2; CUnit *p = Voy_New(CUnit, 1); 等价于 CUnit *p = new CUnit;2. 释放内存并调用析构函数: Voy_Delete(p); 如果p是某个类的指针,如: CUnit *pUnit = Voy_New(CUnit, 2); char *p = (char *)pUnit; Voy_Delete(p); 这个时候不会调用CUnit的析构函数,因为传给Voy_Delete的指针是一个char*的指针,Voy_Delete认为char*指针没有析构函数。 因此,这种情况下,必须把p转换为Voy_Delete可接受的格式:(对指针的引用) Voy_Delete(CUnit *&)p); / 这样就能正确地调用析构函数 Voy_Delete和Voy_Free会检查传入的指针是否为空,也会在删除后自动把传入的指针设为空。3. 如果只想分配内存,而不想调用构造函数,可以调用: char *p = Voy_Malloc(char, 1024);4. 如果只想释放内存,而不想调用析构函数,可以调用: Voy_Free(p); 或者: Voy_Delete(char *&)p);5. 如果某个类的构造函数需要参数,例如: 申请:CShow *pShow = new CShow(“this is a show”, 0); 释放:delete pShow; 应该改写为: 申请:CShow *pShow = (CShow*)(Voy_Malloc(CShow, 1); new(pShow) CShow(“this is a show”, 0); 释放:Voy_Delete(pShow);八、 脚本内的注释1以上规范适合于脚本的必须执行;-9-工具开发支持管理
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!