nodejs 打造 多人对战游戏服务器(幼儿园级) - CNode技术社区

nodejs 打造 多人对战游戏服务器(幼儿园级)
发布于 14 年前 作者 huliang64 13114 次浏览 最后一次编辑是 9 年前

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

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;

}

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

3 回复

加点定时调度,场景管理,登入验证等等就可以升级为小学了吧,哈哈

啥时候升学呀

回到顶部

AltStyle によって変換されたページ (->オリジナル) /