• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大規模高性能網絡服務器編程 大型游戲服務器編程


            大規模高性能網絡服務器編程 大型游戲服務器編程 完成端口模型 TCP UDP P2P 網絡編程

                       C++博客 | 首頁 | 發新隨筆 | 發新文章 | 聯系 | 聚合 | 管理

                          

                 摘要: 這里設計了一個類,通過4個字節存儲日期,8個字節存儲DateTime,并添加了一些跟時間日期相關的函數, 如:星期幾查詢,特定日期之后多少天是幾號, 兩個日期之間相隔多少天等等。對于一般的用途,基本上夠用了頭文件: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter....  閱讀全文
            posted @ 2010-09-02 16:28 iKusamba 閱讀(1942) | 評論 (4)編輯 收藏
            導讀:國產網游正在漫漫成長起來,這其中,有很多具有代表性的國產網游特色的設定,雖然表面上看是方便玩家,但深究起來,這些設定也有可能是毀掉國產網游毒瘤?! ?br>
                  一、自動尋路
            說到最具代表性的中國特色的網游設定,自動尋路當仁不讓。這一設定美其名曰是簡化玩家操作、完善游戲體驗,實則對游戲是種很大的傷害。一般來說,網游 多是MMORPG,這種游戲旨在構建一個架空世界,玩家從中獲取一種異樣人生的體驗。對這個世界的探索,照理來說應是游戲樂趣的一大來源,但趕路和找人確 實件煩人的事情。國外的設計師們為了解決這一問題,就把游戲地圖探索變得更有趣,把游戲中的移動變得更多樣化,以此來彌補玩家的枯燥旅途。但中國設計師明 顯要聰明得多,所以他們做出來了“自動尋路”這樣的設置——只不過這種做法,實際上是在鼓吹玩家急功近利的浮躁心態,和踐踏游戲原本的樂趣。

                 二、自動打怪
            有時候你不得不承認中國是片神奇的土地,無論看起來多么不可思議的事情,在這里都有可能發生。比如說外掛,本來是所有游戲廠商應該深惡痛絕并必欲除之 而后快的,但在中國,游戲廠商們自己開發起了外掛,為了以示區分,這種由廠商自己開發的掛機系統被稱之為“內掛”。當然中國的策劃們是不會這么直白地叫的 ——人嘛,畢竟都要點臉面的——他們將此功能演示成“自動打怪”,真是光明正大極了。
            網游跟單機的一大區別就是,網游最大的樂趣在于交流,這個交流不光是指玩家之間的聊天,包括如組隊、偶遇甚至是搶怪等各種交互行為,都是交流。但自動打怪出來后,你在游戲里再也看到的不是再是一個活生生的人,而是臨時性的NPC。這對國產游戲,能有什么好處?

                三、替身寶寶
            判斷一款網游優劣的標準很簡單,就是看它有沒有賣替身寶寶,如果有,那么你應立即放棄它。所謂替身寶寶,就是指即便玩家的角色下線了,也可以利用這個 寶寶來繼續練級,仍然可以獲得經驗。每個游戲對這種設定的叫法不一樣,但有一點卻是共同,那就是肯定要花錢。因此從這個意義上來說,替身寶寶,實際上就是 游戲官方在赤裸裸地賣經驗值,賣人物等級。
            運營商自己出售人物經驗值,這么匪夷所思的事情竟然也能想得出來,實在叫人佩服中國網游策劃的絕頂聰明。

                  四、開箱子
            “開箱子”不必多說,這個就是個賭博系統。據說在這系統出來之后,澳門人后悔不迭:早知道還開什么賭場。開箱子已經是被國家明令禁止的設定,現在又有死灰復燃之勢,只不過現在開的不再是箱子,而是襪子包子什么的了,總之只要你給錢,就是讓開游戲策劃的腦子他們也肯做。

                  五、無限制PK
            PK,絕對是網游中最重要的系統之一。與人競技的樂趣,總是能刺激玩家們的分泌出新鮮的腎上腺激素。但并不意味著,PK可以是無限制的,可以是隨心所 欲的。國外主流網游中,對PK都或多或少有一定的限制,比如最經典的設定“紅名”,你在殺人的同時,你自己也將成為追殺的對象。但國產網游的主流卻似乎是 在鼓勵玩家這樣做,至少說,看不到什么限制。很多國產網游,允許一個高等級的玩家,闖入低等級玩家的活動區,肆無忌憚地大開殺戒。這種對PK不加任何限制 的設定,實際上是在鼓勵玩家濫殺無辜欺凌弱小,以方便游戲商趁機出售這種“恃強凌弱”的權力。
            這樣的游戲,會培養出什么樣的玩家?這樣的玩家,會造就一個什么樣的游戲環境?這樣的游戲環境,能為國產游戲帶來什么樣的希望?

                 六、結婚系統
            雖然說中國有3700萬光棍,但我依然認為在網游里開設一個虛擬的“結婚”系統,是最為不能接受的設定。網游或許本來就是個交友平臺,但你不能把它做 成一個婚介所!如果說僅僅是為玩家提供一個虛擬的游戲內的結婚儀式也就罷了,可恨的是有些網游還推出夫妻才有的技能、坐騎、道具……等等等等,簡直就是逼 著玩家去泡女生,哪怕是人妖也行。現在不少網游更進一步,推出了“結婚生子”系統,這只能稱之為腦殘了。
            結婚、生子,這些設定讓國產網游散發出一股濃重的荷爾蒙味。

                七、仇人名單
            仇人系統也是國產網游的一大特色,它與“無限制PK”是兄弟:假如你被人殺了,系統會自動將其加入你的仇人名單。加進來做什么?肯定不是叫你提防著對 方,而是要玩家牢記這個“仇人”,等將來等級高了好復仇。這基本上就是在挑撥玩家之間的人際關系,是在強化仇恨和報復。明顯的是,游戲商會從玩家的復仇行 為中獲取不少利潤,比如說出售一種道具,能把你傳送到你仇人的身邊,這樣無論他逃到哪里,你都能對其進行鍥而不舍的追殺。
            但這樣一來,游戲環境勢必惡化,因為系統本身是在放大玩家的陰暗面。更何況,挑撥和教唆他人就是作惡,而我還沒見過誰作了惡,還敢稱自己賺的錢是干凈的。
            posted @ 2010-09-01 17:47 iKusamba 閱讀(377) | 評論 (2)編輯 收藏

            代碼:uniobj.h
             1 /************************************************************************
             2 *
             3 * Created by kusamba@126.com at 2009-2-12 16:37
             4 */
             5 
             6 #ifndef _uniobj_23593953_h_
             7 #define _uniobj_23593953_h_
             8 
             9 #include <WTypes.h>
            10 #include <assert.h>
            11 
            12 /**
            13 * Universal Object Declare
            14 */
            15 #define UNIOBJ_DECL(theClass)                \
            16   public:                                    \
            17   static theClass* Get()                     \
            18   {                                          \
            19     assert(NULL != ms_pk##theClass);         \
            20     return ms_pk##theClass;                  \
            21   }                                          \
            22   static theClass* Create()                  \
            23   {                                          \
            24     assert(NULL == ms_pk##theClass);         \
            25     return ms_pk##theClass = new theClass(); \
            26   }                                          \
            27   static void Destroy()                      \
            28   {                                          \
            29     if (NULL != ms_pk##theClass)             \
            30     {                                        \
            31       delete ms_pk##theClass;                \
            32       ms_pk##theClass = NULL;                \
            33     }                                        \
            34   }                                          \
            35   publicbool Initialize();                 \
            36   private:                                   \
            37     theClass();                              \
            38     virtual ~theClass();                     \
            39     static theClass* ms_pk##theClass;
            40 
            41 /**
            42 * Universal Object Implement
            43 */
            44 #define UNIOBJ_IMP(theClass)                \
            45     theClass* theClass::ms_pk##theClass = NULL;
            46 
            47 
            48 #endif//_uniobj_23593953_h_

            如何使用:
            頭文件:
            1#include "uniobj.h"
            2
            3class ATestSingleTon
            4{
            5public:
            6
            7UNIOBJ_DECL(ATestSingleTon)
            8}

            cpp文件:
            1UNIOBJ_IMP(ATestSingleTon)
            2
                 ATestSingleTon::ATestSingleTon()
                {}

                ATestSingleTon::~ATestSingleTon()
                {}

            3bool ATestSingleTon::Initialize()
            4{
            5    return true;
            6}

            main.cpp
             1int main()
             2{
             3  ATestSingleTon* pk = ATestSingleTon::Create();
             4  if (NULL == pk)
             5  {
             6    return 0;
             7  }

             8
             9  //mainloop
            10
            11  ATestSingleTon::Destroy();
            12}

            分析:
            1,singleton的構建在程序入口,析構在程序的結尾,可以避免相當多的多線程問題
            2,這里的singleton對象均為程序必須要用到的對象,跟傳統singleton定義有些出入
            3,定義了initialize()函數只為對象的初始化提供一個接口,如果不需要可以直接return true


            PS:可以參考看看如下資料
            1,細說Singleton模式:創建、多線程與銷毀 http://developer.51cto.com/art/200908/143492.htm
            posted @ 2010-08-31 15:56 iKusamba 閱讀(1475) | 評論 (10)編輯 收藏


            _MSC_VER 定義編譯器的版本。

            下面是一些編譯器版本的_MSC_VER值
             
              MS VC++ 9.0 _MSC_VER = 1500
                 MS VC++ 8.0 _MSC_VER = 1400   
                    MS VC++ 7.1 _MSC_VER = 1310   
                    MS VC++ 7.0 _MSC_VER = 1300   
                    MS VC++ 6.0 _MSC_VER = 1200   
                    MS VC++ 5.0 _MSC_VER = 1100

            給一段跟編譯器相關的代碼:

             1char* UStrcpy(char* pcDest, size_t stDestSize, const char* pcSrc)
             2{
             3#if _MSC_VER >= 1400
             4    strcpy_s(pcDest, stDestSize, pcSrc);
             5    return pcDest;
             6#else // #if _MSC_VER >= 1400
             7
             8    _ASSERT(stDestSize != 0);
             9
            10    size_t stSrcLen = strlen(pcSrc);
            11    _ASSERT(stDestSize > stSrcLen); // > because need null character
            12
            13    size_t stWrite;
            14
            15    if (stDestSize <= stSrcLen) // stDestSize < stSrcLen + 1
            16        stWrite = stDestSize;
            17    else 
            18        stWrite = stSrcLen + 1;
            19
            20    char *pcResult = strncpy(pcDest, pcSrc, stWrite);
            21    pcResult[stDestSize - 1= '\0';
            22    return pcResult;
            23#endif // #if _MSC_VER >= 1400
            24}

             

            說明:
            Visual C++ 1.0,集成了MFC 2.0,是Visual C++第一代版本,1992年推出,可同時支持16位處理器與32位處理器版,可算是Microsoft C/C++ 7.0的更新版本。

            Visual C++ 1.5,集成了MFC 2.5,增加了“目標文件鏈接嵌入 (OLE)2.0和支持MFC的開放式數據庫鏈接(ODBC)。這個版本只有16位的,也是第一個以CD-ROM為軟件載體的版本。這個版本也沒有所謂“標準版”。它是最后一個支持16位軟件編程的軟件,也是第一個支持基于x86機器的32位編程軟件。

            Visual C++ 2.0,集成了MFC 3.0,第一個只發行32位的版本。這個版本提前發行了,幾乎成了一個“丟失的版本”。這是因為那個時候Windows 95(開發代碼為"Chicago")還沒有發行,而Windows NT又只占有很小的市場份額。該版本用戶可以通過微軟公司的訂閱服務(Microsoft Subscription Service)升級至2.1和2.2版本。微軟公司在這個版本中集成并升級了Visual C++ 1.5,作為2.0版本(Visual C++ 1.5升級后版本號:1.51)以及2.1版本(Visual C++ 1.5升級后版本號:1.52)的一部分。Visual C++ 2.x附帶了16位和32位版本的CDK,同時支持Win32s的開發。Visual C++ 2.2及其后續版本不再升級Visual C++ 1.5(盡管它一直被集成至Visual C++ 4.x)。盡管出生的比Windows 95早,這個版本的發行日期還是非常接近Windows 95,可是當Windows 95發行時,Visual C++ 4.0也已經發行了。因此很多程序開發者直接從1.x過渡到4.0,把2.x跳過去了。

            Visual C++ 4.0,集成了MFC 4.0,這個版本是專門為Windows 95以及Windows NT設計的。用戶可以通過微軟公司的訂閱服務(Microsoft Subscription Service)升級至4.1和4.2版本(此版本不再支持Win32s開發)。

            Visual C++ 5.0,集成了MFC 4.21,是4.2版以來比較大的一次升級。

            Visual C++ 6.0,集成了MFC 6.0,于1998發行。發行至今一直被廣泛地用于大大小小的項目開發。但是,這個版本在Windows XP下運行會出現問題,尤其是在調試模式的情況下(例如:靜態變量的值并不會顯示)。這個調試問題可以通過打一個叫“Visual C++ 6.0 Processor Pack”的補丁來解決。奇怪的是,這個網頁強調用戶也必須運行Windows 98、Windows NT 4.0、或Windows 2000。

            Visual C++ .NET 2002(也即Visual C++ 7.0),于2002年發行,集成了MFC 7.0,支持鏈接時代碼生成和調試運行時檢查。這個版本還集成了Managed Extension for C++,以及一個全新的用戶界面(與Visual Basic和Visual C#共用)。這也是為什么Visual C++ 6.0仍然被廣泛使用的一個主要原因。

            Visual C++ .NET 2003(也即Visual C++ 7.1),集成了MFC 7.1,于2003年發行,是對Visual C++ .NET 2002的一次重大升級。
            eMbedded Visual C++,用于Windows CE操作系統。Visual C++作為一個獨立的開發環境被Microsoft Visual Studio 2005所替代。

            Visual C++ 2005(也即Visual C++ 8.0),集成了MFC 8.0,于2005年11月發布。這個版本引進了對C++/CLI語言和OpenMP的支持。

            Visual C++ 2008(也即Visual C++ 9.0),于2007年11月發布。這個版本支持.NET 3.5。

            Visual C++ 2010(也即Visual C++ 10.0),于2010年發布,是目前最新的版本。Visual C++開發團隊考慮使用SQL Server Compact格式的數據庫來存儲源碼的相關信息[1].本版也加入了現代化的C++并行運算庫-Parallel Patterns Library,部分支持C++0x。本版建構于.NET 4.0之上,但仍支持機器碼的編譯。

            posted @ 2010-08-31 15:25 iKusamba 閱讀(1398) | 評論 (0)編輯 收藏

            makefile在windows之外的系統中廣泛使用,大多數程序員依賴于vs的IDE; 掌握使用makefile,對于自動化構建很有用

            vs使用nmake.exe作為構建的工具,有別于linux的make

            nmake.exe在vs的安裝目錄下,

            vs2005的默認目錄是:C:\Program Files\Microsoft Visual Studio 8\VC\bin 或者 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin (通常情況下這兩個目錄下該文件為同一個)
            vs2003的默認目錄是:C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin 或者 C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin

            打開DOS窗口,輸入nmake,可能會出現如下錯誤提示:


            這是因為在vs的安裝過程中,沒有注冊vs的環境變量,可以通過如下方法查看自己是否已經注冊好vs的環境變量:

            在DOS窗口中輸入set path, 則會看到如下提示:


            我這邊已經注冊好環境變量了,如果你沒有看到,可以將vs的bin目錄添加到系統環境目錄的path里


            重新打開DOS窗口,輸入nmake,如果提示如下,則說明環境目錄注冊成功:


            這時,可以開始我們的編譯了,打開DOS窗口,導航到源代碼目錄,執行nmake,注意nmake對應的編譯為makefile(無后綴名)

            如果你系統里面有好幾個vs版本,建議不要將環境變量添加到path里,我的做法是這樣的:
            1,在C:\下面新建目錄utils,并將該目錄添加到path的環境變量中
            2, 將vs2005的bin目錄下的vcvars32.bat和vs2003的vcvars32.bat分別copy到C:\Utils目錄下,重命名為vc8.bat和vc7.bat
            3,執行nmake前先執行vc7.bat(使用vs2003編譯)或者vc8.bat(使用vS2005編譯)

            posted @ 2010-08-26 17:34 iKusamba 閱讀(10921) | 評論 (1)編輯 收藏
            僅列出標題
            共4頁: 1 2 3 4 

            公告

            導航

            隨筆分類

            最新隨筆

            最新評論

            閱讀排行榜

            欧美精品福利视频一区二区三区久久久精品| 亚洲色欲久久久久综合网| 久久精品无码午夜福利理论片 | 色综合久久综合中文综合网| 中文字幕乱码人妻无码久久| 国产精品99久久久久久人| 久久亚洲高清综合| 久久99精品国产自在现线小黄鸭| 亚洲嫩草影院久久精品| 亚洲国产精品无码久久98| 狠狠精品干练久久久无码中文字幕 | 91精品国产91热久久久久福利| 人妻无码久久精品| 久久午夜伦鲁片免费无码| 久久亚洲国产成人影院网站 | 久久国产精品偷99| 97久久天天综合色天天综合色hd| 久久综合久久综合亚洲| 大美女久久久久久j久久| 久久99精品国产自在现线小黄鸭| 欧美日韩精品久久久久| 一本久久a久久精品综合夜夜| 亚洲AV无码久久| 久久婷婷五月综合97色直播| 久久99精品国产麻豆不卡| 精品无码久久久久国产| 久久夜色精品国产欧美乱| 久久婷婷五月综合97色直播| 亚洲人成无码www久久久| 久久久久亚洲爆乳少妇无| 久久狠狠一本精品综合网| 国产99久久久国产精免费| 91精品久久久久久无码| 99久久婷婷国产一区二区| 粉嫩小泬无遮挡久久久久久| 国产成人精品久久一区二区三区 | 中文字幕无码久久人妻| 伊人久久大香线蕉精品不卡 | 欧美久久一区二区三区| 亚洲v国产v天堂a无码久久| 午夜精品久久久久久|