HTML5 + node.js + socket.io 打造联网斯诺克
简单写了个斯诺克联网游戏,还未完成,希望大家多多指教。
标题: 菜单: 房间列表: 进入无人房间: 房间状态更新: 游戏开始:
server.js
var rooms = new Array(),
roomMax = 5;
function Room(index, token) {
var players = new Array(),
socket,
status = 0;
token = token || "no token";
this.checkIn = function(playerName, socket) {
socket = socket;
console.log("checkIn player: " + playerName);
if (status < 2) {
var playerToken = createPlayerToken(players.length);
players.push(new Player(players.length, playerName, playerToken, socket));
status++;
var roomReady = status == 2 ? true : false;
var data = { roomId: index,roomToken: token, roomReady: roomReady, playerid: players.length - 1, playerToken: playerToken };
socket.emit("checkIn", data);
}
if (status == 2) {
var data = {};
var goPlayer = players[0];
goPlayer.go(data);
}
socket.on("cueBall", function(data) {
console.log(data);
var currentPlayer = data.playerid;
var toPlayer = currentPlayer === 0 ? players[1] : players[0];
console.log(toPlayer);
toPlayer.emit("cueBall", data);
});
socket.on('disconnect', function () {
//io.sockets.emit('user disconnected');
});
};
this.checkOut = function(playerid, playerToken) {
var player = players[playerid];
console.log(playerToken);
console.log(player);
if (player.playerToken == playerToken) {
if (players.length == 1)
players = new Array();
players.slice(playerid, 1);
status--;
}
};
this.getIndex = function() {
return index;
};
this.getStatus = function() {
return status;
}
}
function Player(id, name, playerToken, socket) {
this.id = id;
this.name = name;
this.playerToken = playerToken;
var socket = socket;
this.emit = function(emitName, data) {
socket.emit("cueBall", { cueBall: data.cueBall });
};
this.go = function(data) {
socket.emit("go", data);
}
}
function roomList() {
var length = rooms.length,
list = new Array();
for (var i = 0; i < length; i++) {
var room = rooms[i];
list.push({
id: room.getIndex(),
status: room.getStatus()
});
}
return list;
}
function initRooms(callback) {
for (var i = 0; i < roomMax; i++) {
var token = createToken(i);
rooms[i] = new Room(i, token);
}
callback();
}
function checkInRoom(id) {
}
function createPlayerToken(i) {
return "player token of player No." + i;
}
function createToken(i) {
return "room token of room No." + i;
}
initRooms(function() {
var io = require('socket.io').listen(8010);
io.set('log level', 1);
io.sockets.on('connection', function (socket) {
socket.on("roomList", function(data) {
var list = roomList();
socket.emit("roomList", { roomList: list });
});
socket.on("checkIn", function(data) {
var roomIndex = data.roomId,
playerName = data.playerName,
room = rooms[roomIndex];
if (room.getStatus() < 2) {
room.checkIn(playerName, socket);
}
});
socket.on("checkOut", function(data) {
console.log(data);
var roomIndex = data.roomId,
room = rooms[roomIndex],
playerid = data.playerid,
playerToken = data.playerToken;
if (room.getStatus() > 0) {
room.checkOut(playerid, playerToken);
}
});
});
});
ps:求个NAE的邀请码
8 回复
邀请码已发。 欢迎在NAE上部署好,让大家来玩玩!
看起来不错. 放到github上吧.
wow,求链接!
不错啊,话说我也想搞个 web game 来玩玩
楼主在杭州么,或者说楼主在阿里技术嘉年华期间在杭州么。我们可以搭个机器,现场让大家玩哦。
这么给力的说
这个要顶的。