将单机下棋游戏改造成联网实时对战下棋

北京阳光环球广告有限公司  http://www.sunad.net.cn  2018-05-08  浏览量:1000


Tags: 百度SEO公司   seo整站优化   SEO关键字优化   阳光环球   手机网站建设设计   手机建站公司   手机网站定制设计  

import BGS from '../../js/bmobgamesdk/bgsapi';//根据你自己的存放路径更改
let model = BGS.instance;
 
model.Init('3f729baax0', 'ws://139.159.220.251:29175', function (succ, msg) {
  if (succ) {
    // 用bmob小程序sdk进行登录注册
    // _getUser(listener);
  } else{
    // 提醒失败,并给重新init的按钮
  }
});
4. 创建房间,获得Bgs.instance.Init的第二个参数
 
import BGS from '../../js/bmobgamesdk/bgsapi';//根据你自己的存放路径更改
let model = BGS.instance;
 
var userId =  Bmob.User.current().id;
model.CreateRoom(userId, 2, function(isOK, res) {
        console.log("res >", res);
        if (isOK) {
          var roomInfo = res.roomInfo;
          console.log('对战开房成功', _data);
          // 创建房间成功,跳转游戏房间页面,别忘了把房间信息roomInfo传递过去
        } else {
          common.showModal('对战开房失败,' + res);
        }
      });
运行游戏,打开network抓包,创建一个房间,查看这个操作的返回结果,返回结果为
{
    "address": "a.b.c.d", // 服务器ip
    "roomInfo": {
        "ports": {
            "websocket": efgh // 服务器端口
        },
        "rid": xxx, // 房间id
        "joinKey": yyy // 房间密匙
    }
}
 
这样,你就获得了初始化sdk的第二个参数,是 ws://a.b.c.d:efgh 这样的格式
 
 
 
5. 加入房间,初始化监听器
 
import BGS from '../../js/bmobgamesdk/bgsapi';//根据你自己的存放路径更改
let model = BGS.instance;
 
if (this.isConnected)
  return;
t('连接房间');
this.mRoomActListener = this.onRoomAction.bind(this);
this.mOfflineListener = this.onOffline.bind(this);
model.RegistRoomActListener(this.mRoomActListener);// 注册系统通知监听,详细参考官网下载的demo
model.RegistOfflineListener(this.mOfflineListener);// 注册掉线通知监听
 
let emptyFun = function() {};
model.SetGameRuntimeListeners(
  emptyFun,//这三个监听器本游戏中没有涉及
  emptyFun,
  emptyFun,
  this.onTransfer.bind(this),// 玩家间交互信息的监听器
  this.onCloudNotify.bind(this)//云端代码通知的监听器
);
 
// 加入房间
// 这里的roomData就是创建房间时让你保存的roomInfo啦
model.JoinRoom(that.roomData.rid, that.roomData.joinKey, userId, model.get('seatKey'), function(isOK, data) {
  if (isOK) {
    common.toast('加入房间成功');
    console.log("房间信息:", data);
 let
      playerCount = data.playerCount,
      no = data.no,
      isPlaying = data.isPlaying,
      players = data.players,
      masterId = data.master;
 
    // 根据返回的房间信息做些保存或处理,这里不详细写出来,大家根据自己的情况灵活变通...
 
    if (data.seatKey)
      model.set('seatKey', data.seatKey);
    that.isConnected = true;
 
    return;
  }
//加入房间失败
  if (data.indexOf("204") > -1)
    data = "房间已关闭";
  else if (data.indexOf("206") > -1)
    data = "房间已满员";
  else if (data.indexOf("201") > -1)
    data = "未知错误";
  else if (data.indexOf("203") > -1)
    data = "没有登陆";
  else if (data.indexOf("208") > -1)
    data = "游戏中";
  else if (data.indexOf("204") > -1)
    data = "房间不存在";
  else if (data.indexOf("202") > -1)
    data = "参数错误";
 
  console.log('加入房间失败:', data);
}.bind(this));
 
// 收到客户端的回调
onTransfer(no, res) {
    console.log("收到客户端的回调:" + no, res)
    let flag = res.shift();
    switch (flag) {
      case 1: // 下棋
        t('收到客户端的下棋数据');
        t(res);
        break;
      case 2: // 被请求悔棋
        // ...
 
    }
},
// 收到云端代码服务端的回调
onCloudNotify(notify) {
   notify = JSON.parse(model.bytesToString(notify, 0, notify.length));
   console.log("收到服务器的回调:", notify);
  // ...
},
 
6. 实现下棋数据的实时交互
 
// 玩家之间交互数据,上面的onTransfer会收到对方发送的
// 要以byte数组形式,一般把数组的第一位作为自定义交互类型flag,后面的为要交互的数据
model.SendTransferToAllExceptSelf([1, ...]);
 
// sdk特别提供了把string和byte数组互转的方法
model.stringToBytes('string'); // string转byte[]
model.model.bytesToString(bs, 0, bs.length); // byte[]转string
 
// 调用云端代码,参数为云端代码方法名
model.CloudAction('Ready');
7. 实现云端代码逻辑
 
打开 Eclipse 或 Android Studio,创建Java项目,导入 BmobGame_JavaCloud_vx.x.x_xxxxxx.jar,并创建 Player.java 和 Room.java,分别继承自 PlayerBase.class 和 RoomBase.class 后,编写游戏逻辑代码。写好后提交到官网管理后台的云函数处。
这两个java文件的编写主要查看另一篇教程。

本文地址:http://www.sunad.net.cn/content-104-794-1.html

  • SEO知识
  • SEO热点问题
  • SEO工具
  • 建站知识
  • 网站设计
  • 网站开发

北京阳光环球广告有限公司网络分公司 版权所有 违者必究 京ICP备13002036号-1

在线咨询
热线电话
扫一扫

扫一扫

全国免费服务热线
010-83687575

返回顶部