开发自己的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
- 开发自己的QQ游戏
- 开发自己的QQ游戏
- 自己理解的游戏开发
- 想写点关于自己的游戏开发经历
- JB2006工具做手机游戏开发自己的心得
- c++ 编写自己的小型游戏开发库
- c++ 编写自己的小型游戏开发库(续)
- 【现身说法】玩游戏不如自己开发游戏
- 自己写的Linux QQ
- 自己的第一次QQ面试
- PSP上的QQ游戏
- MFC开发QQ游戏客户端登录界面
- 游戏开发中的,一些自己当初自己不注意犯下的错的
- 打造个性QQ,适合网吧做自己安全的QQ
- 自己设计的棋类游戏
- [VB.NET源码]打造自己的QQ
- 用JAVA打造自己的QQ(一)
- 用JAVA打造自己的QQ(二)
- Java 序列化
- 一个事务 对应一个连接
- poj2823Sliding Window【线段树维护滚动区间最值】
- 我的第一个安卓小实验
- iOS 玩转推送通知
- 开发自己的QQ游戏
- ubuntu下安装NFS服务
- LeetCode: Add Two Numbers
- mybatis--关联映射及延迟加载
- go语言select关注点
- 欢迎使用CSDN-markdown编辑器
- android6.0 Dangerous permissions and permission groups.
- 常用书籍--经典
- Python之数组(array)使用方法总结与Numpy中的数组用法