zoukankan      html  css  js  c++  java
  • nodejs 打造 多人对战游戏服务器(初级入门)

    enter image description here 使用socket.set 和 socket.get 在存取玩家信息

    百牛信息技术bainiu.ltd整理发布于博客园

    socket.get('playerinfo', function (err, player) {
                if(player == null) {
                    console.log("[new player]",data.name);
                    var player = new Player(socket, data);
                }
                else
                {
                     console.log("[wait player visit again]",data.name);
                    socket.emit('error', "you have registered");
                    return ;
                }
                socket.set('playerinfo', player, function () {
                usersWS.push(player);
                console.log("[wait player numer]",usersWS.length);
    //这在里如果玩家状态和数量满足要求就可以开始游戏了
                  Physic.CreatePhysicWorld(p1, p2);
    //通知client 启动 游戏
             …………..
             }); //set
        }); //get
    })    //socket.on

    转发 和处理 玩家的输入

     socket.on('sync', function (data) {
        socket.get('playerinfo', function (err, player) {
                if(player != null) {
                    //var target = usersWS[i].socket;
                    var room = player.room;
                    for(var i=0;i<room.players.length;i++)
                    {
                           if(room.players[i].id ==player.id) 
                            {
                            //console.log("this is msg from id:",room.players[i].id) 
                            }
                            else
                            {
                            room.players[i].socket.emit('sync', data);
                            //console.log("send to id:",room.players[i].id)
                            }
                            //room.players[i].socket.emit('sync', data);
                    }
                }//if
               else
               {
                socket.emit('error',"no session");
               } 
            }); //get
        }); //socket.on

    }); //Network.on

    定义一个简单的玩家对象

    function Player(socket, data)
    {
    var newplayer = {
        socket: socket,
        id: player_next_id++,
        tankType: 0,
        name: data.name,
        isMain: data.isMain,
        ip: socket.remoteAddress,
        status: '未准备',

    // isAI: false, room: null }; newplayer.proto = Player.prototype; return newplayer; }

    定义一个游戏房间对象

    function Room(title)
    {
    var newroom = {
        id: room_next_id++,
        is_in_game: false,            // 判断改房间的游戏是否已经开始
        players: [],
        map: 0,
        title: title,
        game: null
    };
    room_list.push(newroom);
    newroom.__proto__ = Room.prototype;
    return newroom;

    }

    最后感言: 本人是新手,发篇文章互动一下实属不易。不周之处,还望高手轻点儿拍砖。

  • 相关阅读:
    Twitter注册
    iOS项目的完整重命名方法图文教程
    加载gif动态图的三种方式
    只 一行显示可左右滚动的文本(UITextField中文限制)
    iOS学习资料链接
    GCD常用方法
    移动端轮播完整版css3加原生写法
    zepto-touch.js插件
    移动端续讲及zepto移动端插件外加touch插件介绍
    解决ios和Android的差异
  • 原文地址:https://www.cnblogs.com/bainiu/p/7541454.html
Copyright © 2011-2022 走看看