this.socket = socket // socket对象,玩家通过它来监听数据 this.name = name // 玩家的名称 this.color = null // 玩家棋子的颜色 this.state = 0 // 0代表空闲, 1在游戏中 this.pipei = false // 是否在匹配 this.gamePlay = null // 棋局对象 this.flag = true // 是否轮到这个玩家出棋 this.fz = false // 是否是房主
Player类对象监听的事件
// 监听玩家是否退出游戏 this.socket.on('disconnect', function () { // 删除数组中的玩家 // players.splice(players.indexOf(self), 1) // 删不掉 // delete players[players.indexOf(self)] // 新的删除方式 players = players.filter(function (value) { return value.name !== self.name }) playerCount-- // 如果退出游戏的玩家正在进行游戏,那么这局游戏也该退出 if (self.state === 0) { gameCount-- } console.log(self.name + '已退出游戏') }) // 玩家开始匹配 this.socket.on('play', function () { // 如果空闲玩家总数大于或等于2,那么开始游戏 if (playerCount >= 2) { self.pipei = true // 如果已经有人在开始匹配了,那么这个玩家就不需要走下面函数了,因为继续执行的话相当于再开一个棋局 if (isExistFZ(self) > 0) { // 保持不动就好,房主会自动找到你的 return } // 如果没有房主,那么这个玩家将成为房主 self.fz = true // 可用的玩家数 var player2 = null self.timer = setInterval(function () { console.log('正在匹配...') if (player2 = findPlayer(self)) { console.log('匹配成功') self.gamePlay = new Game(self, player2) player2.gamePlay = self.gamePlay clearInterval(self.timer) } }, 1000) } else { socket.emit('player less') } }) // 玩家取消匹配按钮 this.socket.on('clearPlay', function () { clearInterval(self.timer) }) // 监听数据,玩家下棋的时候触发 this.socket.on('data', function (data) { if (self.flag) { add_pieces(self.gamePlay, data, self.color) } }) // 最后将当前玩家实例放到players全局玩家数组中去 players.push(this)
Game(棋局类)
// 棋盘的格子数 this.column = 21 this.arr = init_arr() // 存储棋盘坐标的二位数组 // 一局棋局上的两个玩家 this.play1 = play1 this.play2 = play2 // 修改游戏状态 this.play1.state = 1 this.play2.state = 1 // 在游戏中,是否匹配为false this.play1.pipei = false this.play2.pipei = false this.play1.fz = false this.play1.fz = false // 随机给两个玩家分配棋子颜色 this.play1.color = ~~(Math.random() * 2) === 0 ? 'white' : 'black' this.play2.color = this.play1.color === 'white' ? 'black' : 'white' // 谁是白棋谁先走 this.play1.flag = this.play1.color === 'white'? true: false this.play2.flag = this.play2.color === 'white'? true: false
添加棋子方法
// 添加棋子 function add_pieces(self, position, color) { if (self.arr[position.x][position.y] === undefined) { self.arr[position.x][position.y] = color if (color === self.play1.color) { self.play1.flag = false self.play2.flag = true } else if (color === self.play2.color) { self.play1.flag = true self.play2.flag = false } check_result(self, self.arr, position, color) } } // 初始化数组 function init_arr() { var arr = [] for (var i = 0; i < 21; i++) { arr.push(new Array(21)) } return arr }
如果大家喜欢的话,请在github上下载我的源码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章: