游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2973|回复: 6

我想写个网络游戏……

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2005-2-4 15:42:00 | 显示全部楼层 |阅读模式
我想写个网络游戏,具体的想法请看下面的这个帖子:
http://bbs.gameres.com/showthread.asp?threadid=22369

这两天我做了点设计,对于服务器端,主要的游戏循环如下:

  1. while(running){//网络消息得使用一个循环队列来管理buffer以提高对网络速度变化的适应能力
  2.         poll();
  3.         for(every_connection){
  4.                 if(want_read && could_read){
  5.                         read();
  6.                         if(read_completed){
  7.                                 set_msg_flag_for_解析器();
  8.                                 set_want_read_flag(false);
  9.                         }
  10.                 }
  11.                 if(want_write && could_write){
  12.                         write();
  13.                         if(write_completed){
  14.                                 set_want_write_flag(false);
  15.                         }
  16.                 }
  17.         }
  18.         for(every_listener){
  19.                 if(acceptable){
  20.                         accept(); set_poll_data();
  21.                         new_connection();
  22.                 }
  23.         }
  24.         for(every_空间区域_of_OcTree){
  25.                 进行所有物体的各坐标轴碰撞组检测();//参见《游戏编程精粹2》第2章第7篇《递归逐维分组:一种快速的碰撞检测算法》
  26.                 for(every_碰撞组){
  27.                         for(every_simobj){
  28.                                 检测并生成所有关于当前对象的碰撞事件();//?实现?优化?
  29.                                 处理所有关于当前对象的碰撞事件();//?物理碰撞的模拟运算
  30.                         }
  31.                 }
  32.         }
  33.         for(every_simobj){
  34.                 if(msg_flag_setted){
  35.                         处理消息();
  36.                         set_want_read_flag(true);
  37.                 }
  38.                 if(有外界送来的需要传送的数据 && !want_write){//那些由仿真对象自己产生的要发出的消息在产生时就会被发出,这里的“外界送来的需要传送的数据”指的是外部发生的事件、广播事件等
  39.                         将数据送入buffer();
  40.                         set_want_write_flag(true);
  41.                 }
  42.         }
  43.         for(every_simobj){
  44.                 update();//更新所有被动状态属性
  45.         }
  46. }
复制代码

客户端暂时还没考虑好~不过一开始不准备做得太复杂,效果也不用太好,所以一开始准备用SDL~
另外还有个服务器端的数据解构的示意图:

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2005-2-4 15:46:00 | 显示全部楼层

Re:我想写个网络游戏……

欢迎大家一起讨论合作~~~~~
另外,目标平台:
server:linux
client:linux & windows
如果顺利的话最好实现用户认证、服务器互连等特性,当然这都是后话了~

晕,第一帖里的伪代码里一些注释说明没显示得全,我再发一下:


while(running){//网络消息得使用一个循环队列来管理buffer以提高对网络速度变化的适应能力
        poll();
        for(every_connection){
                if(want_read && could_read){
                        read();
                        if(read_completed){
                                set_msg_flag_for_解析器();
                                set_want_read_flag(false);
                        }
                }
                if(want_write && could_write){
                        write();
                        if(write_completed){
                                set_want_write_flag(false);
                        }
                }
        }
        for(every_listener){
                if(acceptable){
                        accept(); set_poll_data();
                        new_connection();
                }
        }
        for(every_空间区域_of_OcTree){
                进行所有物体的各坐标轴碰撞组检测();//参见《游戏编程精粹2》第2章第7篇《递归逐维分组:一种快速的碰撞检测算法》
                for(every_碰撞组){
                        for(every_simobj){
                                检测并生成所有关于当前对象的碰撞事件();//?实现?优化?
                                处理所有关于当前对象的碰撞事件();//?物理碰撞的模拟运算
                        }
                }
        }
        for(every_simobj){
                if(msg_flag_setted){
                        处理消息();
                        set_want_read_flag(true);
                }
                if(有外界送来的需要传送的数据 && !want_write){//那些由仿真对象自己产生的要发出的消息在产生时就会被发出,这里的“外界送来的需要传送的数据”指的是外部发生的事件、广播事件等
                        将数据送入buffer();
                        set_want_write_flag(true);
                }
        }
        for(every_simobj){
                update();//更新所有被动状态属性
        }
}

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-2-4 20:30:00 | 显示全部楼层

Re:我想写个网络游戏……

你这样弄得贴到猴年去。
得有很多代码呢,建立一个QQ群还差不多。

37

主题

727

帖子

740

积分

高级会员

Rank: 4

积分
740
发表于 2005-2-4 20:50:00 | 显示全部楼层

Re:我想写个网络游戏……

希望我老死的那天,能看到你完整的代码
精神上支持你......
呵呵
建个QQ群交流吧,支持的说....

1

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-2-4 21:33:00 | 显示全部楼层

Re:我想写个网络游戏……

支持,希望自己有一天也能写出来……………………

1

主题

7

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2005-2-5 17:18:00 | 显示全部楼层

Re:我想写个网络游戏……

服务器端还应该有同步保证..

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2005-2-5 18:13:00 | 显示全部楼层

Re: 我想写个网络游戏……

同步这方面我还不怎么明白…… [em15]

没有人对我的代码提出意见或建议吗? [em10]

另外,还有个物理问题……
比如有两个物体,我知道他们碰撞时的质量、位置(三维座标),空间姿态(分别绕xyz三个轴旋转的角度),速度(三维向量)、加速度(三维向量),另外还有包围球的尺寸、模型的三角形顶点数据(如果是3D游戏的话)、图片的位图数据(如果是2D游戏的话),在检测到它们发生了碰撞时,我希望知道碰撞过程中这两个物体各自受到的冲量(三维向量),但是不知道该怎么判断……我想对碰撞时对旋转的影响进行模拟会很困难,但是即使不考虑对旋转的影响我也不知道该怎么算……
我想做的游戏里会有可运动的飞船、炮弹、空间站等物体,需要模拟它们的运动和碰撞,而且要能模拟出那种……怎么说呢,比如说两个飞船,如果相对速度不大时发生碰撞不会有什么大问题,但是如果相对速度很大就会完全撞毁……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 06:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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