开发自己的QQ游戏

来源:互联网 发布:pos机数据库文件名 编辑:程序博客网 时间:2024/04/30 00:20
时间过得很快,来腾讯很快就一年了,凑巧,也是我工作满十年的日子。
感谢我的导师 阿福,感谢身边的小伙伴们。感谢家人的支持和理解。
感谢十年前的隔壁班那位外语系女生,替我保存着这份毕业设计十年(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;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];elsethis.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 上的  .

0 0
原创粉丝点击