日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开发自己的QQ游戏

發布時間:2024/1/1 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开发自己的QQ游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
時間過得很快,是我工作滿十年的日子。 感謝我的導師 阿福,感謝身邊的小伙伴們。感謝家人的支持和理解。 感謝十年前的隔壁班那位外語系女生,替我保存著這份畢業設計十年(2006-2016)。 回憶寫程序的這十年, 最開心的還是在 2006年讀書時, 仿照騰訊的QQ游戲,實現的6人游戲《火拼俄羅斯》。 當然現在最開心的事情,是把十年前的這點小心思,寫在騰訊的KM上了。? 注: 主要技術點 ?1, 設計模塊 ( bridge , instance 等 ) 2, 雙緩沖繪制 ( 防止界面閃爍 常用 ?) 3, 數據結構 ( 矩陣轉置 ) 4, 消息的異步通知 ?(主要是網絡消息的異步通知) 5 , ? 游戲界面信息的差異傳輸已經數據編碼?? ?6 , ? tcp 的網絡編程???

1, 設計界面 ( 全部山寨 )

界面豪無疑問 是山寨, 有玩過這個游戲的同學肯定很清楚。 下面哪些道具也都是按照當時使用習慣設計的。 當然 我偷偷 給自己設了幾個快捷鍵。? 為了防止界面出現閃爍的效果 , 整個界面使用 雙緩沖輸出( ?即 一塊內存用來繪制界面, 一塊內存拷貝繪制內存,用來直接展示。 )

2, 程序結構?

備注:當時的設計電子文檔丟了( 好可惜,花個把星期來學word 的格式),交給老師的那一份卻神奇的流下來了( 老師太負責了 ) , 只好用手機拍幾張照片湊合用一下。? 設計的總體思路還是挺簡單的, ?客戶端總體分4大模塊。如圖下圖 :? ? ? ?1, 圖像界面模塊 ? ? ? ??: ?游戲的展示以及指令接收 ?。 2, 用戶消息處理模塊??: ? 負責接收用戶指令,聊天等消息 。 ? ? 3, ? ?中間消息雙向處理橋模塊: ??設計模式的 Bridge 模式??, 接收網絡命令 通知前端, 同時將前端用戶指令發送到網絡模塊 ? ?。? ?4, ? ?網絡消息的接收與發送模塊: ?負責連接游戲服務器以及網絡心跳維護。?

3, 消息流程?

消息這里主要是 3類:? ?1, 游戲指令和道具?? ?: ? 主要是各種道具的使用了。 ? ? 2, 用戶聊天消息 ??? ?: ?玩家之間的聊天消息 。 ? 3, 游戲界面同步展示?: ? 玩家直接的信息同步展示稍微麻煩一點, 為了減少網絡傳輸量,主要采取兩種辦法: 1,只傳輸改變的界面信息,2,將界面方塊信息編碼成簡單的整數傳輸。 ??


消息緩沖處理, 主要需要考慮用戶側 和服務側

4, 類結構?

方塊類結構

每一個方塊都是一個類 , 每個方塊都繼承自 統一的父類( SuperBrick )? 1, 方塊共同的父類?( SuperBrick )??: ? 使用三維數組存儲 2維數據旋轉的 4個方向 ? 2, 其他7種類型方塊繼承自?SuperBrick?: ??

2, 中間消息處理

1, Brige 類?: ?設計模式的橋模式, 負責調用 Tetirs_Bridge 接口 和 Message_Bridge 接口? ?2 ?, ?注冊兩個接口?: ?Tetirs_Bridge 接口 和 Message_Bridge 接口 ??

5,部分代碼


public class SuperBrick ?//方塊父類 { public int[,,] Brick_Array; ?//三維數組 存儲 方塊旋轉4個方向的數據? public SuperBrick() { this.Brick_Array=new int[4,5,5]; for(int i=0;i<4;i++) for(int x=0;x<5;x++) for(int y=0;y<5;y++) this.Brick_Array[i,x,y]=0;
} protected void turnBrick_Four()//旋轉方塊(4個方向) { for(int i=1;i<4;i++) for(int x=0;x<5;x++) for(int y=0;y<5;y++) this.Brick_Array[i,x,y]=this.Brick_Array[i-1,4-y,x]; } protected void turnBrick_Two()//旋轉方塊(2個方向) { for(int i=1;i<4;i++) for(int x=0;x<5;x++) for(int y=0;y<5;y++) if(i%2==0) this.Brick_Array[i,x,y]=this.Brick_Array[i-1,4-y,x]; else this.Brick_Array[i,x,y]=this.Brick_Array[i-1,y,4-x]; } } public class Brick_BB :SuperBrick//田字型方塊 { public Brick_BB() { this.setBrickArray(); } private void setBrickArray() { for(int i=0;i<4;i++) { this.Brick_Array[i,3,1]=1; this.Brick_Array[i,3,2]=1; this.Brick_Array[i,2,1]=1; this.Brick_Array[i,2,2]=1;
} } } public class Brick_UT :SuperBrick//倒T型方塊 { public Brick_UT() { this.setBrickArray(); this.turnBrick_Four(); } private void setBrickArray() { this.Brick_Array[0,2,1]=1; this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; } } public class Brick_L :SuperBrick//L型防塊 { public Brick_L() { this.setBrickArray(); this.turnBrick_Four();
} private void setBrickArray() { this.Brick_Array[0,1,1]=1; this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; } } public class Brick_UL :SuperBrick//倒L型方塊? { public Brick_UL() { this.setBrickArray(); this.turnBrick_Four(); } private void setBrickArray() { this.Brick_Array[0,3,1]=1; this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; } } public class Brick_I :SuperBrick//-型方塊 { public Brick_I() { this.setBrickArray(); this.turnBrick_Two(); } private void setBrickArray() { this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; this.Brick_Array[0,4,2]=1; } } public class Brick_Z :SuperBrick//Z型方塊 { public Brick_Z() { this.setBrickArray(); this.turnBrick_Two(); } private void setBrickArray() { this.Brick_Array[0,1,1]=1; this.Brick_Array[0,2,1]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; } } public class Brick_UZ :SuperBrick//倒Z型方塊 { public Brick_UZ() { this.setBrickArray(); this.turnBrick_Two(); } private void setBrickArray() { this.Brick_Array[0,2,1]=1; this.Brick_Array[0,3,1]=1; this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; } }

?

6, 不足之處

1, ?用戶等級以及積分還不是很完整 ? 2, ?網絡消息發送多線程還沒有壓測? 3, ?最后提交上代碼 , 各位大神不要鄙視我。 上傳的代碼 還有很多 bug , ?當時也有很多版本,也都木有保存下來。 只留下這一份,還是保存在 csdn 上的 ?.
感謝我的導師 阿福,感謝身邊的小伙伴們。感謝家人的支持和理解。 感謝十年前的隔壁班那位外語系女生,替我保存著這份畢業設計十年(2006-2016)。 回憶寫程序的這十年, 最開心的還是在 2006年讀書時, 仿照騰訊的QQ游戲,實現的6人游戲《火拼俄羅斯》。 當然現在最開心的事情,是把十年前的這點小心思,寫在騰訊的KM上了。? 注: 主要技術點 ?1, 設計模塊 ( bridge , instance 等 ) 2, 雙緩沖繪制 ( 防止界面閃爍 常用 ?) 3, 數據結構 ( 矩陣轉置 ) 4, 消息的異步通知 ?(主要是網絡消息的異步通知) 5 , ? 游戲界面信息的差異傳輸已經數據編碼?? ?6 , ? tcp 的網絡編程???

1, 設計界面 ( 全部山寨 )

界面豪無疑問 是山寨, 有玩過這個游戲的同學肯定很清楚。 下面哪些道具也都是按照當時使用習慣設計的。 當然 我偷偷 給自己設了幾個快捷鍵。? 為了防止界面出現閃爍的效果 , 整個界面使用 雙緩沖輸出( ?即 一塊內存用來繪制界面, 一塊內存拷貝繪制內存,用來直接展示。 )

2, 程序結構?

備注:當時的設計電子文檔丟了( 好可惜,花個把星期來學word 的格式),交給老師的那一份卻神奇的流下來了( 老師太負責了 ) , 只好用手機拍幾張照片湊合用一下。? 設計的總體思路還是挺簡單的, ?客戶端總體分4大模塊。如圖下圖 :? ? ? ?1, 圖像界面模塊 ? ? ? ??: ?游戲的展示以及指令接收 ?。 2, 用戶消息處理模塊??: ? 負責接收用戶指令,聊天等消息 。 ? ? 3, ? ?中間消息雙向處理橋模塊: ??設計模式的 Bridge 模式??, 接收網絡命令 通知前端, 同時將前端用戶指令發送到網絡模塊 ? ?。? ?4, ? ?網絡消息的接收與發送模塊: ?負責連接游戲服務器以及網絡心跳維護。?

3, 消息流程?

消息這里主要是 3類:? ?1, 游戲指令和道具?? ?: ? 主要是各種道具的使用了。 ? ? 2, 用戶聊天消息 ??? ?: ?玩家之間的聊天消息 。 ? 3, 游戲界面同步展示?: ? 玩家直接的信息同步展示稍微麻煩一點, 為了減少網絡傳輸量,主要采取兩種辦法: 1,只傳輸改變的界面信息,2,將界面方塊信息編碼成簡單的整數傳輸。 ??


消息緩沖處理, 主要需要考慮用戶側 和服務側

4, 類結構?

方塊類結構

每一個方塊都是一個類 , 每個方塊都繼承自 統一的父類( SuperBrick )? 1, 方塊共同的父類?( SuperBrick )??: ? 使用三維數組存儲 2維數據旋轉的 4個方向 ? 2, 其他7種類型方塊繼承自?SuperBrick?: ??

2, 中間消息處理

1, Brige 類?: ?設計模式的橋模式, 負責調用 Tetirs_Bridge 接口 和 Message_Bridge 接口? ?2 ?, ?注冊兩個接口?: ?Tetirs_Bridge 接口 和 Message_Bridge 接口 ??

5,部分代碼


public class SuperBrick ?//方塊父類 { public int[,,] Brick_Array; ?//三維數組 存儲 方塊旋轉4個方向的數據? public SuperBrick() { this.Brick_Array=new int[4,5,5]; for(int i=0;i<4;i++) for(int x=0;x<5;x++) for(int y=0;y<5;y++) this.Brick_Array[i,x,y]=0;
} protected void turnBrick_Four()//旋轉方塊(4個方向) { for(int i=1;i<4;i++) for(int x=0;x<5;x++) for(int y=0;y<5;y++) this.Brick_Array[i,x,y]=this.Brick_Array[i-1,4-y,x]; } protected void turnBrick_Two()//旋轉方塊(2個方向) { for(int i=1;i<4;i++) for(int x=0;x<5;x++) for(int y=0;y<5;y++) if(i%2==0) this.Brick_Array[i,x,y]=this.Brick_Array[i-1,4-y,x]; else this.Brick_Array[i,x,y]=this.Brick_Array[i-1,y,4-x]; } } public class Brick_BB :SuperBrick//田字型方塊 { public Brick_BB() { this.setBrickArray(); } private void setBrickArray() { for(int i=0;i<4;i++) { this.Brick_Array[i,3,1]=1; this.Brick_Array[i,3,2]=1; this.Brick_Array[i,2,1]=1; this.Brick_Array[i,2,2]=1;
} } } public class Brick_UT :SuperBrick//倒T型方塊 { public Brick_UT() { this.setBrickArray(); this.turnBrick_Four(); } private void setBrickArray() { this.Brick_Array[0,2,1]=1; this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; } } public class Brick_L :SuperBrick//L型防塊 { public Brick_L() { this.setBrickArray(); this.turnBrick_Four();
} private void setBrickArray() { this.Brick_Array[0,1,1]=1; this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; } } public class Brick_UL :SuperBrick//倒L型方塊? { public Brick_UL() { this.setBrickArray(); this.turnBrick_Four(); } private void setBrickArray() { this.Brick_Array[0,3,1]=1; this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; } } public class Brick_I :SuperBrick//-型方塊 { public Brick_I() { this.setBrickArray(); this.turnBrick_Two(); } private void setBrickArray() { this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; this.Brick_Array[0,4,2]=1; } } public class Brick_Z :SuperBrick//Z型方塊 { public Brick_Z() { this.setBrickArray(); this.turnBrick_Two(); } private void setBrickArray() { this.Brick_Array[0,1,1]=1; this.Brick_Array[0,2,1]=1; this.Brick_Array[0,2,2]=1; this.Brick_Array[0,3,2]=1; } } public class Brick_UZ :SuperBrick//倒Z型方塊 { public Brick_UZ() { this.setBrickArray(); this.turnBrick_Two(); } private void setBrickArray() { this.Brick_Array[0,2,1]=1; this.Brick_Array[0,3,1]=1; this.Brick_Array[0,1,2]=1; this.Brick_Array[0,2,2]=1; } }

?

6, 不足之處

1, ?用戶等級以及積分還不是很完整 ? 2, ?網絡消息發送多線程還沒有壓測? 3, ?最后提交上代碼 , 各位大神不要鄙視我。 上傳的代碼 還有很多 bug , ?當時也有很多版本,也都木有保存下來。 只留下這一份,還是保存在 csdn 上的 ?.

總結

以上是生活随笔為你收集整理的开发自己的QQ游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。