QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: sjinny

网络游戏的模块化讨论

[复制链接]
 楼主| 发表于 2003-9-13 22:09:08 | 显示全部楼层
恩,模块化的意义就是让每个人能够扬长避短
回复

使用道具 举报

发表于 2003-9-16 10:48:12 | 显示全部楼层
各位不好意思,最近工作忙了点没能及时来这里讨论,我仔细的看了你们的留言,想说几点,我的网络编程都是基于c的,虽说c++的语法也了解,但具体到面向对象的时候就不太清楚了,这方面我的先看看,呵呵,sjinny给游戏起的名字不错,具体网络这方面怎么做我还没想过,但我觉得应该将所有的决策都放在服务器端,客户端只是反应服务器端传来的指令。我的联系方式:QQ 24088414    E-mail:[email protected]  联系我。
回复

使用道具 举报

 楼主| 发表于 2003-9-16 13:38:37 | 显示全部楼层
呵呵,的确,其实就是在服务器端要根据一些规则来判断用户的操作请求是否应该执行,或者是否要修正一下再执行。
回复

使用道具 举报

发表于 2003-9-16 18:53:40 | 显示全部楼层
呵呵,同意同意,这两天我们正式上课,因此,我不能来得太频繁了,希望不要错过什么才好!
回复

使用道具 举报

发表于 2003-9-16 23:59:18 | 显示全部楼层
我手头只有装在虚拟机上的turbo linux并且不带x的
呵呵

为什么不做一个脚本解释引擎呢
服务端肯定需要的阿
回复

使用道具 举报

 楼主| 发表于 2003-9-17 00:21:29 | 显示全部楼层
呵呵,是需要啊,可是现在连个主框架都没有,做脚本解释器太早了~
回复

使用道具 举报

发表于 2003-9-20 11:03:06 | 显示全部楼层
sjinny, 可以考虑给我们几个公用的接口了吗?
不然,我们不好编写类的接口啊
回复

使用道具 举报

 楼主| 发表于 2003-9-20 12:45:39 | 显示全部楼层
其实接口只是个命名的问题,但是提供哪些接口、参数怎么设置,这些很重要,我觉得没有必要这么着急去写代码。真正把设计做好了,写代码都是很简单的事,先把设计做好吧,不然无法成长为一个真正有影响力和生命力的项目。

不过,我觉得好像我现在做的设计都是面向最终的游戏的,而不是原计划的demo……
回复

使用道具 举报

发表于 2003-9-21 09:54:48 | 显示全部楼层
我感觉也是这样,呵呵……好吧;
这些天我都在找网路编程方面的资料,可惜我们图书馆和南图都没有,昨天又到南京的长三角书城淘了半天的书,终于找到一本希望出版社的linux网络编程的书。
Linux网络开发虽热,但是书太难买了,建议这里的编程大牛多谢文章,我们出书   
回复

使用道具 举报

 楼主| 发表于 2003-9-23 00:32:07 | 显示全部楼层
初步的设计:
还没有完全完成,欢迎大家随时补充~
[code:1]
模块设计:
        主模块/类列表:
                网络                Net
                用户设备        User
                规则处理        Rule
                游戏世界        World
                显示                Render
                声音                Sound
                线程管理        Thread
                存储                Store

        次模块/类列表:
                队列                Queue
                文件                File
                数据库                Data

各个类的Public成员函数接口列表:
        网络                Net
                        send(data, targets);                //发送数据(非阻塞),可以多播。
                        manage(command);                //控制网络模块(比如重新连接等)。
        用户设备        User
                        发生(x, y, button_OR_key);        //把一个用户设备事件交给该模块处理,参数是一个坐标和一个按键值。
        规则处理        Rule
                        request test(request);                //把一个请求送入该模块,以判断该请求的合法性和合理性。
        游戏世界        World
                        find(id);                        //根据id在游戏世界(的八叉树)中搜索一个对象。
                        (未完待续)
        显示                Render
                        rend();                                //游戏绘制。
                        (未完待续)
        声音                Sound
                        play(sound);                        //播放一个声音。
        线程管理        Thread
                        add_obj(obj, function);                //增加一个对象,即开启一个线程并使其不断调用该对象的某个成员函数。
        存储                Store
                        (未知)
        队列                Queue
                        add(msg);                        //增加一个元素进入队列,需要使用互斥量来同步各线程。
        文件                File
                        (未知)
        数据库                Data
                        (未知)

类列表(除了上面所列出的):
        ……还有吗? ;)

使用的连接库的列表:
        显示方面:
                OpenGL                libgl        libglu
                glut                libglut
[/code:1]
回复

使用道具 举报

发表于 2003-9-25 15:17:32 | 显示全部楼层
sjinny, 具体你看着办吧,我想我现在只关注网络部分好了(其他方面我也不太了解)
等rocklgk兄和我写出具体的类后,再看看网络方面还有什么要添加的吧
回复

使用道具 举报

 楼主| 发表于 2003-9-25 22:36:10 | 显示全部楼层
恩,关于网络模块,我的建议是这样的:
我们得实现一个队列类,然后让网络模块的类从这个队列类继承一下,队列里存放的是一个个要发送的数据包(已经打包好了,但是没有压缩和加密),然后使用一个线程循环调用网络类的一个Public成员函数。比如网络模块的类里有一个Public的函数:
[code:1]
int work(){
    //处理队列里的一个数据包;发生致命错误返回1,否则返回0
}
[/code:1]
然后在线程管理对象里,创建了一个线程,这个线程里运行这样一个函数:
[code:1]
{
    while( net.work() !=1 ){
    }
}
[/code:1]
这样就可以使用一个线程来运行网络模块的发送功能了。
接受数据也是类似的。
回复

使用道具 举报

发表于 2003-9-27 14:52:29 | 显示全部楼层
sjinny, 你的意思是不是说我们在做Demo的时候暂时先不考虑压缩和加密,只要将待发送的数据打包就ok了?
还有,你关于线程实现的想法有可取之处,我也正在考虑这方面的问题。相信很快就会有一套明确的方案
回复

使用道具 举报

发表于 2003-9-27 15:04:18 | 显示全部楼层
不太明白work()函数,怎么样处理一个数据包?好象只有发送或接收才能发生致命错误吧,那既然已经发送了,那下面的那个线程又是控制什么的?
回复

使用道具 举报

发表于 2003-9-27 15:11:23 | 显示全部楼层
这种情况应该不难解决吧,我建议用异常处理函数:try(),throw,catch。用他们建一个专门的错误处理类啊,不知rocklgk兄有何高见?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-9 10:29 , Processed in 0.074649 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表