程序編碼規(guī)范_第1頁
程序編碼規(guī)范_第2頁
程序編碼規(guī)范_第3頁
程序編碼規(guī)范_第4頁
程序編碼規(guī)范_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、蝸牛游戲程序編碼規(guī)范(版本ol ) 規(guī)范說明: 一、命名規(guī)貝y 、 程序的版式. 三、 注釋 四、 服務(wù)端平臺無關(guān) 五、 服務(wù)端表格操作 六、 客戶端文件讀寫 七、 客戶端內(nèi)存操作 八、 腳本內(nèi)的注釋 規(guī)范說明: 制定該規(guī)范的目的是讓程序清晰易懂、易維護(hù)、易管理。該規(guī)范為強制規(guī)范,必 須執(zhí)行,如果有沒涉及的地方請參考高質(zhì)量C+-c編程指南。當(dāng)所在編程環(huán)境(如 MFC Linux)與本規(guī)范有并異時,可以使用所在編程環(huán)境的規(guī)范,但是同一個項冃必須 是統(tǒng) 一的規(guī)范。 最后希望大家都能養(yǎng)成一個良好的程序習(xí)慣,一個好的習(xí)慣受益終身! 命名規(guī)則 1 所有命名應(yīng)當(dāng)直觀且可拼讀,并具有實際意義; 2類名和函數(shù)

2、名用大寫字母開頭的單詞組合而成,接口類名以I開頭; 3常量全用大寫的字母,用下劃線分割單詞,盡量不要使用宏; 4 類的數(shù)據(jù)成員加前綴ni_全局變量加前綴g_,靜態(tài)變量加前綴s_; 5變量名第一個字母小寫,使用“名詞”更“形容詞 +名詞”的詞義表示法; 示例: 局部變量 char *pStri ngBuffer ; int static bool GetVoyageServiceCo un t(i nt 結(jié)構(gòu)類型 struct NodeValue int width; int height; 枚舉類型(枚舉值必須大寫且有前綴) enumVoyageSupportType VOYAGE OS SU

3、PPORT INVALID 二1, VOYAGE_OS_SUPPORT_WINDOWS 二 2 聯(lián)合類型 union Color unsigned cha r arrColor3; struet ColorRGB unsigned char r; unsigned char g; unsignedb; char ; 類類型 class Object int m_width;/ int m_height;/ void SetValue( virtual int GetAreaO ; inline int GetWidthO ; ; 抽象類 int width, int height); /成員函

4、數(shù) /虛函數(shù) /內(nèi)聯(lián)函數(shù) class ISpriteManager public: virtual int virtual bool ; 自定義類型 GetSpritelDO = 0; IsSpriteExist () 0; typedef unsigned int Number: 全局變量 wt)靜態(tài) 變量 static char (我們不主張使用全局變 g_howManyPeop1e; *s_pStringBuffer; 常量 const float SPRINT_RADIUS 二 100.Of; 回調(diào)函數(shù) typedef int (*CALLBACK_SYSTEMINIT_FUNC)(I

5、Kernel * pKernel); 程序的版式 1- 一行代碼只做一件事情,只寫一條語句,語句排版整齊;2.關(guān)鍵字之后要留空格,賦 值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域 操作符,如“二” “ +二”“二”、“二 ”“ +”、“、“ (i5) else if (nb) do while (ab); switch (n) easel: break 代碼塊 /獲得字符串長度。 int length 二(int )strlen(pString); 如果長度為空,直接將當(dāng)前String類對象置空 if (0 二二 length) m_pString = NULL; m_length 二

6、0; 三、注釋 1. 對外暴露的模塊接口全部要求使用“ doxygen”注釋對文件、類、函數(shù)、變量進(jìn)行注 釋; 2. 所有文件和函數(shù)必須有功能說明注釋,這里不要使用“ doxygen注釋(便于生成 程序文檔); 3. 代碼塊的起始處必須有該代碼塊的功能說明注釋; 4. 通信的消息和命令必須有功能和參數(shù)注釋。 “ doxygen”注釋不例: 接口文件首部 /* filevarithmetic.h briefIString模塊是voyage引擎開發(fā)以及游戲開發(fā)所使用的 算法集合模塊。 authorArmterla X date2007. 12. 1 */ 接口函數(shù)注釋 注意:這些接口注釋都是寫在頭

7、文件里的。 注意:接口參數(shù)要寫IN或者是OUT以表明參數(shù)是輸入?yún)?shù)還是輸出參數(shù)函數(shù)接口注釋 brief param param * * 對任意類型元素的數(shù)組進(jìn)行快速排序。 pHead IN元素數(shù)組首地址。 ppDstHead OUT輸岀一組經(jīng)過排序的指針。 */ void Quicksort ( void *pHead, void *ppDstHead); 類接口注釋 /* brief IString類是用于在Voyage引擎內(nèi)部進(jìn)行字符串處理的類。 IString類可以完成快速的字符串連接、分割、字串查找、字串修改 等功能。 */ class IString public : /* brie

8、f IString默認(rèn)構(gòu)造函數(shù)。 remarks使用默認(rèn)構(gòu)造函數(shù)構(gòu)造IString對象不會 申請任何堆內(nèi)存。 */ IStringO ; /* brief使用標(biāo)準(zhǔn)字符串構(gòu)造IString類對象。 param pString IN指定源字符串。也就是使用哪個字符串構(gòu)造當(dāng)前 IString 對象。 remarks這個構(gòu)造辦法會申請堆內(nèi)存,構(gòu)造時調(diào)用一次堆分配。分配空間大小 與參數(shù)指定的字符串長度加1相等。 */ IString ( const char * pString): /* brief析構(gòu)函數(shù),如果當(dāng)前IString類對象已經(jīng)申請了堆內(nèi)存, 該函數(shù)會釋放這個堆內(nèi)存。 */ 、IString

9、 (); ; 通信的消息和命令 /* brief聊天內(nèi)容信息 param聊天類型,類型int param聊天內(nèi)容,類型wstring */ MSG_SERVER_SPEECH二1001模塊內(nèi)部注釋示例: 文件首部 /* author %USERNAME% file$FILE$ 文 brie件說明 date $DATE$ */ 函數(shù)注釋 /做地形的可視檢測 int TerrainSubObject:IsVisible( int x, int z) 變量注釋 int ValCol; /修改表格的第幾列數(shù)據(jù) 四、服務(wù)端平臺無關(guān) 1. 服務(wù)端程序不要使用依賴于操作系統(tǒng)的API和數(shù)據(jù)類型,以及和操作系統(tǒng)

10、相關(guān)的規(guī)貝 以便于未來Windows和Linux平臺切換。 五、服務(wù)端表格操作 1服務(wù)端表格“ Record的名稱定義也要符合命名規(guī)范; 2. 在操作時不能直接用數(shù)字表示列號; 示例: /表格列號的定義 enum CCR_CLONE_SERIAL = 0, CCR_CYCLE_TIME, CCR_INT0_C0UNT, CCR_C0L_C0UNT ; /表格定義和訪問 pKernel-AddRecord(index, CloneCountRec,CCR_C0L_C0UNT, 128); pKernelSetRecordColType(index , “CloneCountRec, CCR_CL

11、ONE_SERIALV, ARTYPE_INT) : / 副本 號 pKernelSetRecordColType( index , CloneCountRec, CCR_CYCLE_TIME, VARTYPE_INT); / 進(jìn) 入時間 pKernel-SetRecordColType(index, CloneCountRec, CCR_INT0_C0UNT, VARTYPE_INT); / 進(jìn) 入次數(shù) 六、客戶端文件讀寫 1. 客戶端必須使用引擎提供的API進(jìn)行文件的打開、讀寫、關(guān)閉等操作。示例: HANDLE hFile 二 _CORE_API-fio-_CreateF訂e(filena

12、me, GENERIC_READ, 0, 0PEN_EXISTING); 辻(hFile 二二 INVALID_HANDLE_VALUE) return false ; DWORD Length 二 _CORE_API-fio-_GetFileSize(hFile, NULL): 辻(Length 0) char pBuffer 二 newcharLength + 1; _CORE_APIfio_ReadFile(hFile, (void *)pBuffer, Length, NULL); _CORE_API-fio-_C1oseHandle(hFile); 七、客戶端內(nèi)存操作 1. 分配內(nèi)存

13、并調(diào)用默認(rèn)構(gòu)造函數(shù): char *p 二 Voy_New( char, 23);等價于 char *p 二 newchar 23; CUnit *p 二 Voy_New(CUnit, 2):等價于 CUnit *p 二 newCUnit2; CUnit *p 二 Voy_New(CUnit, 1):等價于 CUnit *p 二 newCUnit; 2. 釋放內(nèi)存并調(diào)用析構(gòu)函數(shù): Voy_Delete (p); 如果P是某個類的指針,如: CUnit *pUnit 二 Voy_New(CUnit, 2); char *P 二(char *)PUnit; Voy_Delete(P); 這個時候不會

14、調(diào)用CUnit的析構(gòu)函數(shù),因為傳給Voy_Delete的指針是一個char*的指 針,Voy_Delete認(rèn)為char*指針沒有析構(gòu)函數(shù)。 因此,這種情況下,必須把P轉(zhuǎn)換為Voy_Delete可接受的格式:(對指針的引用) Voy_Delete(CUnit * /這樣就能正確地調(diào)用析構(gòu)函數(shù) Voy_Delete和Vo y_Free會檢查傳入的指針是否為空,也會在刪除后自動把傳入的指針設(shè) 為空。 3. 如果只想分配內(nèi)存,而不想調(diào)用構(gòu)造函數(shù),可以調(diào)用: char *p 二 Voy_Malloc( char, 1024); 4. 如果只想釋放內(nèi)存,而不想調(diào)用析構(gòu)函數(shù),可以調(diào)用: Voy_Free (p); 或者: Voy_Delete( char * 5. dl果某個類的構(gòu)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論