随笔 - 30  文章 - 67  trackbacks - 0
<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(8)

随笔分类

随笔档案

文章档案

收藏夹

Oops

搜索

  •  

积分与排名

  • 积分 - 84568
  • 排名 - 275

最新评论

阅读排行榜

评论排行榜

         最近学院组织了一个实训,要求是利用Socket通信和D3D的知识, 写一个多人在线的游戏, 服务端是在linux下, 客户是在Windows下; 写这个的目的是想让大家给我找错, 欢迎大家的意见。我的QQ 是343167101,希望和大家一起讨论。

 

服务端(linux下):

      服务端使用的是非阻塞Select模型,下面是项目的结构图:

                    服务器3            

     由于其中有很多的消息,其次为了扩展,所以使用了工厂模式,我把从客户端接受的消息都放在输入缓冲区中, 向客户端发送的消息都放在输出缓冲区中, 为了对玩家进行管理

设计了一个Manager(单例)来管理玩家,主要是为了实现删除,添加,获取等操作, 所以就用了STL中Map这个容器。值得一提的是InputSocketStream是使用的一种循环队列的思

想设计的。

服务器端代码

 

客户端:

客户端由于是在windows中,所以使用了Windows的socket通信,同时使用了多线程,其中一个线程主要是为了接受玩家的数据,主线程主要是为了负责逻辑和渲染。

渲染层的结构:

 

客户端渲染

 

CUI端,目前做的比较简单就是使用CEGUI这个重量级的界面库,发现不是那么好用,太庞大了。

 

通信端:(主要是负责和服务器的通信),包括玩家和虚拟玩家的消息

 

客户端4

 

想用的需要被指CEGUI 0.7.1

客户端的代码,: 由于资源文件太大了就不上传了

目前还存在的问题就是虚拟玩家的同步问题,不知到有高手懂这个问题的吗,提供个思路.

我的思路是这样的,比如玩家按下W键,向服务器发送这个消息,服务器负责转发给其他的客户端,该客户端开始走动,知道玩家抬起W键后发送停止的消息给服务器,服务器负责转发。但是在实现这个问题的时候,由于我使用了DiretInput,但是响应Keydown事件时,按下W键时,Keydown执行了很多次,没有找到一个办法知道keydown这个事件什么时候停止的。谁有好的做法希望能告诉我。

下面发个游戏的截图:

 

image

posted on 2011-07-09 16:22 Cunch 阅读(4297) 评论(9)  编辑 收藏 引用 所属分类: C++

FeedBack:
# re: 一个3D的多人在线游戏, 服务端 + 客户端[未登录] 2011-07-09 22:20 beefliu
牛人  回复  更多评论
  
# re: 一个3D的多人在线游戏, 服务端 + 客户端 2011-07-10 09:36 烟圈
画图用的什么软件啊。

找个开源的网游服务端可以参考参考同步设置,比如wow的ArcEmu  回复  更多评论
  
# re: 一个3D的多人在线游戏, 服务端 + 客户端 2011-07-10 10:07 Cunch
@烟圈
谢谢了,我就是键盘这个问题还没完全解决,画图用的是starUML,比较小巧  回复  更多评论
  
# re: 一个3D的多人在线游戏, 服务端 + 客户端 2011-07-11 08:40 饭中淹
GOOD!!!!
鍵盤的,用一個按鍵的狀態表,記錄當前是按下還是抬起。
  回复  更多评论
  
# re: 一个3D的多人在线游戏, 服务端 + 客户端 2011-07-11 18:57 glshader
direct input不是在按键按下时和按键抬起时通知程序的吗?

另外, 我建议不要传"w键按下"的消息, 传玩家位置移动的消息比较好.  回复  更多评论
  
# re: 一个3D的多人在线游戏, 服务端 + 客户端 2011-07-11 22:39 放屁阿狗
做游戏啥学院啊,我也想去学  回复  更多评论
  
# re: 一个3D的多人在线游戏, 服务端 + 客户端 2011-07-12 15:27 小麦
太神奇了!!  回复  更多评论
  
# re: 一个3D的多人在线游戏, 服务端 + 客户端[未登录] 2011-07-26 22:26 1
哪里有根据按键来同步位置消息的,如果你的人物撞墙了,此时W键仍在按下状态,那你不是一直发送消息?  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理