小弟本学期在做一个局域网游戏项目,形式类似于qq堂/泡泡堂,目前进展到winsock编程阶段,但是不知道采用何种形式可以实现局域网对战(阻塞or非阻塞?多线程?),,,希望得到高手详细的指点,,,谢谢!!!

解决方案 »

  1.   

    如是你自己的游戏 加入对战与一般网络应用相比并无特别之处
    可以在局域网内用UDP广播 发现对手 然后互相协商建立tcp连接 
    开始游戏以后 每个对象(比如一个怪物啊、宝物啊、小兵啊)的运动、攻击等等动作传输给对手 对手那边根据这个动作来运算 比如是否碰撞了啊 是否哪个怪被打死了啊 然后重绘 多线程不多线程是否阻塞 看你的实现了 基本原则是界面线程不因传输网络数据而阻塞
      

  2.   

     
    回复:an_bachelor那么请问,在这类项目中是否需要信号池呢?信号池在这里起到什么作用呢?(本人菜鸟)
      

  3.   


    LRESULT C****::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    switch(message)
    {
    case WM_SOCKETMSG_PROTOCOL:
    ExecProtocolData((char*)wParam,(int)lParam);
    break;
    case WM_SOCKETMSG_LOGIN:

    break;
    default:
    break;
    } return CDialog::DefWindowProc(message, wParam, lParam);
    }你所说的信息池是指上面这种形式吗?
    阻塞or非阻塞?多线程?是否要用信息池~这些都是按你自身想法怎样决定是否要用。如果是我想的话,我会用到阻塞,多线程和“信息池”这些技术来实现其中一些功能··
    之所以用多线程,因为是多人游戏,还有互动
    之所以用阻塞,有多线程的原因,也有游戏功能需要
    之所以信息池,是不只是产生某一种单一的message
    另外,你一定还会用到定时器