前端实现双人联机版俄罗斯方块小游戏2(实现双人联机)

思路整理

1.游戏开始,双方都收到start消息,同时调用start方法

socket.on('start', function () {
        document.getElementById('waiting').inneHTML = '';
        start();
    });

2.start方法中,调用game.init方法,同时发送init消息给server,server收到后会转发给另一个游戏玩家

 game.init(doms, type, dir);
        socket.emit('init', {
            type: type,
            dir: dir
        });
        bindKeyEvent();
        var t = generateType();
        var d = generateDir();
        game.performNext(t, d);
        socket.emit('next', {
            type: t,
            dir: d
        })
//wsServer.js中 server收到消息
socket.on('init', function (data) {
    // 接收消息后,将其匹配给另一个socket
    if (socket.clientCount % 2 == 0) {
        socketMap[socket.clientCount - 1].emit('init', data);
    } else {
        socketMap[socket.clientCount + 1].emit('init', data);
    }
});

3.另一个游戏玩家在remote.js中接收init,会驱动对方去调用start方法(next消息同init消息)

var bindEvents = function () {
        socket.on('init', function (data) {
            // 调用start,接收init消息和传递的参数,实现两个用户相连接(在对方区域中调用了start)
            start(data.type, data.dir);
        });
        socket.on('next', function (data) {
            // 驱动对方游戏区域也调用performNext函数
            game.performNext(data.type, data.dir);
        });
    }

整体代码

local.js

var Local = function (socket) {
    // 游戏对象
    var game;
    // 时间间隔 200毫秒
    var INTERVAL = 500;
    // 定时器
    var timer = null;
    // 绑定键盘事件
    // 时间计数器
    var timeConut = 0;
    var time = 0;
    var bindKeyEvent = function () {
        document.onkeydown = function (e) {
            if (e.keyCode == 38) {
                // 向上
                game.rotate();
                socket.emit("rotate");
            } else if (e.keyCode == 39) {
                // 向右
                game.right();
                socket.emit("right");
            } else if (e.keyCode == 40) {
                // 向下
                game.down();
                socket.emit("down");
            } else if (e.keyCode == 37) {
                // 向左
                game.left();
                socket.emit("left");
            } else if (e.keyCode =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值