javascript - 如何给玩家一副牌?

标签 javascript node.js sockets

我正在尝试使用node.js和socket.io构建一个多人纸牌游戏,我创建了一副有52张牌的牌,我需要给每个玩家13张牌,问题是该程序给每个人的牌都一样前 13 张牌 玩家.js

var Player = function () {
    this.data = {
        id: null,
        name: null,
        hand:[]
    };

    this.fill = function (info) {
        for(var prop in this.data) { 
            if(this.data[prop] !== 'undefined') {
                this.data[prop] = info[prop]; 
            }
        }
    };

    this.getInformation = function () {
        return this.data;
    };
};
module.exports = function (info) {
    var instance = new Player();

    instance.fill(info);

    return instance;
};

card.js

var Card = function() {

  this.data = {
      suits : ["H", "C", "S", "D"],
      pack : []
  };

  this.createPack = function(){

    this.data.pack = [];
    this.count = 0;

    for(i = 0; i < 4; i++){
        for(j = 1; j <14; j++){

            this.data.pack[this.count++] = j + this.data.suits[i];
        }   
    }
    return this.data.pack;
  };

  this.draw = function(pack, amount, hand, initial) {  
    var cards = new Array();
    cards = pack.slice(0, amount);
    pack.splice(0, amount);

    if (!initial) {
      hand.push.apply(hand, cards);
    }
     return cards;
  };
}
  module.exports = function () {

    var instance = new Card();
    return instance;
};

服务器.js

var nicknames=[];

io.on("connection", function (socket) {  

var crd = card();

  socket.on('new user', function(data, callback){
        if (nicknames.indexOf(data) != -1){
            callback(false);
        } else{
            callback(true);
            socket.user = data;
            nicknames.push(socket.user);
            updateNicknames();

           var aa = { 
               id: nicknames.indexOf(data), 
               name: socket.user,
               hand: crd.draw(crd.createPack(), 13, '', true)
             };

        var pl = player(aa);

       console.log(pl.getInformation());
        }
    });
  function updateNicknames(){
    io.sockets.emit('usernames', nicknames);
  }
});

最佳答案

为了回答你的问题,每次用户连接时,你都会创建一个新的牌组(即完整的牌组),然后处理前 13 张牌。您需要创建一副牌,可能是在创建游戏时,然后从中抽取(随机,如果您喜欢这种事情) - 当您抽取一张牌时,您会将其从牌组中删除。

服务器.js

var deck = crd.createDeck();

socket.on('new user', function(...) {
    player.hand = // draw randomly from deck and remove

关于javascript - 如何给玩家一副牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34365702/

相关文章:

javascript - 在改变网站宽度的同时改变主要的偏移量

javascript - 在不支持的 api 调用上抛出错误

indexing - 有没有快速的解决方案来从 Node.js 查询 Lucene 索引?

javascript - 如何处理 "Unhandled ' 错误事件”错误 - NodeJS

python - 套接字 block /缓冲区大小

c - 在文件描述符上使用 fwrite/将文件描述符转换为文件指针

javascript - NodeJS readFile() 检索文件名

javascript - 在 NodeJS 中创建对象的推荐方法是什么?

ruby - 缓冲套接字读取

Javascript 的 Bind 实现?