程序编码规范.doc

上传人:99****p 文档编号:1512635 上传时间:2019-03-04 格式:DOC 页数:9 大小:125.50KB
下载 相关 举报
程序编码规范.doc_第1页
第1页 / 共9页
程序编码规范.doc_第2页
第2页 / 共9页
程序编码规范.doc_第3页
第3页 / 共9页
程序编码规范.doc_第4页
第4页 / 共9页
程序编码规范.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、 让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-1-蜗牛游戏程序编码规范 (版本 0.1)规范说明: .1一、 命名规则 .1二、 程序的版式 .3三、 注释 .5四、 服务端平台无关 .7五、 服务端表格操作 .7六、 客户端文件读写 .8七、 客户端内存操作 .8八、 脚本内的注释 .9规范说明:制定该规范的目的是让程序清晰易懂、易维护、易管理。该规范为强制规范,必须执行,如果有没涉及的地方请参考高质量 C+-C 编程指南 。当所在编程环境(如 MFC、Linux)与本规范有差异时,可以使用所在编程环境的规范,但是同一个项目必须是统一的规范。最后希望大家都能养成一个良好的程序习

2、惯,一个好的习惯受益终身!让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-2-一、 命名规则1所有命名应当直观且可拼读,并具有实际意义;2类名和函数名用大写字母开头的单词组合而成,接口类名以 I 开头;3常量全用大写的字母,用下划线分割单词,尽量不要使用宏;4类的数据成员加前缀 m_,全局变量加前缀 g_,静态变量加前缀 s_;5变量名第一个字母小写,使用“名词”或“形容词+名词”的词义表示法;示例:局部变量char *pStringBuffer;int static bool GetVoyageServiceCount(int 结构类型struct NodeValueint wid

3、th;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;类类型让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-3-class Objectint m_width; / 宽度int m_height; / 高度voi

4、d SetValue(int width, int height); / 成员函数virtual int GetArea(); / 虚函数inline int GetWidth(); / 内联函数;抽象类class ISpriteManagerpublic:virtual int GetSpriteID() = 0;virtual bool IsSpriteExist() = 0;自定义类型typedef unsigned int Number;全局变量(我们不主张使用全局变量)int g_howManyPeople;静态变量static char *s_pStringBuffer;常量con

5、st float SPRINT_RADIUS = 100.0f;回调函数typedef int (*CALLBACK_SYSTEMINIT_FUNC)(IKernel * pKernel);二、 程序的版式1一行代码只做一件事情,只写一条语句, 语句排版整齐;2关键字之后要留空格,赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=” 、 “+=” “=”、 “”这类操作符前后不加空格;3程序的分界符和应独占一行并且位于同一列,同时与引用它们的语句左对齐。 之内的代码块在右边 4 格处左对齐,这里的 4 格也可以是Visual Studio 里的一个 TAB;4代码行最大长度宜控

6、制在 80 个字符以内;让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-4-5代码应按功能分块,代码块之间必须有空行,而且每个代码块不要超过 10 行。示例:语句分行和空格(表示空格)for(int i=0,j=0;(i5)else if(nb)do while(ab);switch(n)case1:w=w+2;break;代码块让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-5-/ 获得字符串长度。int length = (int)strlen(pString);/ 如果长度为空,直接将当前String类对象置空。if (0 = length)m_pString = N

7、ULL;m_length = 0;三、 注释1对外暴露的模块接口全部要求使用“doxygen” 注释对文件、类、函数、变量进行注释;2所有文件和函数必须有功能说明注释,这里不要使用“doxygen” 注释(便于生成程序文档);3代码块的起始处必须有该代码块的功能说明注释;4. 通信的消息和命令必须有功能和参数注释。“doxygen” 注释示例:接口文件首部/*file varithmetic.hbrief IString模块是voyage引擎开发以及游戏开发所使用的算法集合模块。author Armterla Xdate 2007.12.1*/接口函数注释注意:这些接口注释都是写在头文件里的。

8、注意:接口参数要写IN或者是OUT以表明参数是输入参数还是输出参数。函数接口注释/*brief 对任意类型元素的数组进行快速排序。param pHeadIN元素数组首地址。param ppDstHeadOUT输出一组经过排序的指针。*/void QuickSort(void *pHead, void *ppDstHead);类接口注释让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-6-/*brief IString类是用于在Voyage引擎内部进行字符串处理的类。IString类可以完成快速的字符串连接、分割、字串查找、字串修改等功能。*/class IStringpublic:/*

9、brief IString默认构造函数。remarks 使用默认构造函数构造IString对象不会申请任何堆内存。*/IString();/*brief 使用标准字符串构造IString类对象。param pString IN指定源字符串。也就是使用哪个字符串构造当前IString对象。remarks 这个构造办法会申请堆内存,构造时调用一次堆分配。分配空间大小与参数指定的字符串长度加1相等。*/IString(const char* pString);/*brief 析构函数,如果当前IString类对象已经申请了堆内存,该函数会释放这个堆内存。*/IString();;通信的消息和命令/*

10、brief 聊天内容信息param 聊天类型,类型 intparam 聊天内容,类型 wstring*/MSG_SERVER_SPEECH = 1001模块内部注释示例:文件首部/*让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-7-file $FILE$brief 文件说明author %USERNAME%date $DATE$*/函数注释/做地形的可视检测int TerrainSubObject:IsVisible(int x,int z)变量注释int ValCol; /修改表格的第几列数据四、 服务端平台无关1服务端程序不要使用依赖于操作系统的 API 和数据类型,以及和操作

11、系统相关的规则,以便于未来 Windows 和 Linux 平台切换。五、 服务端表格操作1服务端表格“Record”的名称定义也要符合命名规范;2在操作时不能直接用数字表示列号;示例:/ 表格列号的定义enumCCR_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_CLON

12、E_SERIAL, VARTYPE_INT); / 副本号pKernel-SetRecordColType( index , “CloneCountRec“, CCR_CYCLE_TIME, VARTYPE_INT); / 进入时间pKernel-SetRecordColType(index, “CloneCountRec“,CCR_INTO_COUNT, VARTYPE_INT); / 进入次数让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-8-六、 客户端文件读写1客户端必须使用引擎提供的 API 进行文件的打开、读写、关闭等操作。示例:HANDLE hFile = _CORE_

13、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

14、(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;V

15、oy_Delete(p);这个时候不会调用CUnit的析构函数,因为传给Voy_Delete的指针是一个char*的指针,Voy_Delete认为char*指针没有析构函数。因此,这种情况下,必须把p转换为Voy_Delete可接受的格式:(对指针的引用)Voy_Delete(CUnit * / 这样就能正确地调用析构函数Voy_Delete和Voy_Free会检查传入的指针是否为空,也会在删除后自动把传入的指针设为空。3. 如果只想分配内存,而不想调用构造函数,可以调用:char *p = Voy_Malloc(char, 1024);让虚拟世界和现实世界成为相互的起点和终点工具开发支持管理-9-4. 如果只想释放内存,而不想调用析构函数,可以调用:Voy_Free(p);或者:Voy_Delete(char *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以上规范适合于脚本的必须执行;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 课件讲义

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。