四子棋对决(三)

2023-05-16

客户端

    开始场景:menuScript.js

import global from './global';
var com = require('./common');
cc.Class({
    extends: cc.Component,
    properties: {
        backAudio: {
            default: null,
            type:cc.AudioClip
        },
        readyLab: {
            default: null,
            type:cc.Label
        }
    },
    onLoad: function () {
       // cc.audioEngine.playEffect(this.backAudio, true);
        //监听服务器下发开始游戏
        global.socket.onCanPlayChess(function () {
            com.gameMode = 'rd'                //游戏模式转换
            cc.director.loadScene('gameScene');    //加载游戏场景
        });
    },
    onButtonClick(event,optData) {
        console.log('optData=' + optData);
        switch (optData) {
            case 'random'://随机匹配玩家
                //显示正在匹配中UI
                this.readyLab.node.active = true;
                //发送随机匹配请求
                global.socket.reqRandomStart({
                    accountID: global.playerData.accountid,
                    nickName: global.playerData.nickName
                }, (err, data)=>{
                    if (err) {//失败
                        console.log('失败');
                    } else {
                        console.log(console.log(JSON.stringify(data)));
                        //根据data判断下子的颜色
                        if (data.data.chessColor === 'b') {
                            com.chessColor = 'b';
                        } else {                            //是白球开始下棋关闭
                            com.chessColor = 'w';
                            com.gameState='close'
                        }

                    }
                });
                break;
            case 'af':    //与人工智障对决
                com.gameMode = 'af';
                cc.director.loadScene('gameScene');
                break;
            default: break;
        }
    }
});

 socket封装

import eventListener from './../listener/eventListener'
const scoketController = function () {
    let that = {};
    let _socket = io(defines.serverUrl);
    let _callBackMap = {};
    let _callBackIndex = 1;
    let _event=eventListener({});
    //监听服务器下发消息
    _socket.on('notify', function (data) {
        console.log('-----------监听到服务器下发的消息');
        //-------------回调部分------------
        //获取回调函数id
        let callBackIndex = data.callBackIndex;
        //执行序号为id的函数
        if (_callBackMap.hasOwnProperty(callBackIndex)) {
            let cb = _callBackMap[callBackIndex];
            if (data.data.err) {
                cb(data.data.err);
            } else {
                cb(null, data);
            }
        }
        //-------------主动监听服务器下发的消息----
        let type=data.type;
        _event.fire(type,data.data);
    });
    //向服务器发送通知
    const notify = function (type, data, callBackIndex) {
        _socket.emit('notify', {type: type, data: data,  callBackIndex: callBackIndex });
        console.log('3');
    };
    //向服务器发送请求
    const request = function (type, data, cb) {
        console.log('2');
        _callBackIndex++;
        _callBackMap[_callBackIndex] = cb;
        notify(type, data, _callBackIndex);
    };
    //请求随机匹配开始游戏
    that.reqRandomStart=function(data,cb){
        console.log('1');
        request('random',data,cb);
    };
    //请求上传棋子
    that.reqUpChess=function(data,cb){
        request('upChess',data,cb);
    };


    //监听服务器下发开始游戏
    that.onCanPlayChess=function(cb){
        _event.on('start_game',cb);
    };
    //监听玩家下的棋子
    that.onPlayChess=function(cb){
        _event.on('playChess',cb);
    };
    return that;
};
export default scoketController;

  playerData

const getRandomStr = function (count) {
    let str = '';
    for (let i = 0; i < count; i++) {
        str += Math.floor(Math.random() * 10);
    }
    return str;
};
const playerData = function () {
    let that = {};
    that.id = '1' + getRandomStr(6); //用户id
    that.accountid = '2' + getRandomStr(6);//用户账号
    that.nickName = 'xiaoming' + getRandomStr(2);//用户昵称
    that.avatar_url = 'http://ent.qingdaonews.com/images/2019-03/01/1575ec9a-81c4-4add-8e0f-832ac8cde9ad.jpg';
    that.house_card_count = getRandomStr(6);
    return that;
};
export default playerData;

  监听器istener\eventListener.js

const eventListener = function (obj) {
    let Register = {};
    obj.on = function (type, method) {
        if (Register.hasOwnProperty(type)) {
            Register[type].push(method);
        } else {
            Register[type] = [method];
        }
    };
    obj.fire = function (type) {
        if (Register.hasOwnProperty(type)) {
            let hanlderList = Register[type];//获取函数列表
            for (let i = 0; i < hanlderList.length; i++) {
                let handler = hanlderList[i];
                let args = [];
                for (let j = 1; j < arguments.length; j++) {
                    args.push(arguments[j]);
                }
                handler.apply(this, args);
            }
        }
    };
    obj.removeListener = function (type) {
        Register[type] = [];
    };
    obj.removeAllListener = function (type) {
        Register = {};
    }
    return obj;
};
export default eventListener;

公共变量:common.js

module.exports = {
    gameMode: 'af',   //游戏模式
    chessColor: 'b',  //玩家棋类型
    gameState:'start' //下棋开启与关闭
}

宏定义define.js

const defines = {};
defines.serverUrl = 'http://localhost:8888'
window.defines = defines;

全局变量global.js:

import socketController from './data/socket_controller'
import playerData from  './data/playerData'
import eventListener from './listener/eventListener'
const global={};
global.socket=socketController();
global.playerData=playerData();
global.eventListener=eventListener({});
export default global;

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四子棋对决(三) 的相关文章

  • [golang] golang文件读写 os.OpenFile(fileName,os.O_APPEND|os.O_WRONLY,os.ModeAppend)

    golang golang文件读写 os OpenFile fileName os O APPEND os O WRONLY os ModeAppend 读写文件要用到的OS包 func OpenFile name string flag
  • [OHIF-Viewers]医疗数字阅片-医学影像-Cornerstone

    时常会听到圈内的朋友抱怨 34 学不动了 34 确实如此 xff0c 前端技术的横向发展和迭代速度实在是太快了 xff0c 然而人的精力却是有限的 xff0c 在中高级的技术进阶阶段 xff0c 广撒网式的学习方式往往会适得其反 那些调侃程
  • deepin remmina 采用源码编译,在菜单栏添加菜单

    usr bin env xdg open Desktop Entry Encoding 61 UTF 8 Type 61 Application X Created By 61 Categories 61 chat Icon 61 org
  • [零散笔记]deepin系统Rust 国内镜像加速

    deepin系统Rust国内镜像加速 span class token function vim span cargo config 粘贴 source crates io registry 61 34 https github com r
  • [在 Linux 上构建 Windows 程序]

    在 Linux 上构建 Windows 程序 文章目录 在 Linux 上构建 Windows 程序 64 toc 首次设置 MSVC Rust MSVC 工具链 Microsoft Windows SDKs 链接 MSVC 首次设置 GN
  • luogu P2078 朋友 基础并查集 联通块的个数

    题目背景 小明在A公司工作 xff0c 小红在B公司工作 题目描述 这两个公司的员工有一个特点 xff1a 一个公司的员工都是同性 A公司有N名员工 xff0c 其中有P对朋友关系 B公司有M名员工 xff0c 其中有Q对朋友关系 朋友的朋
  • ubuntu focal InRelease 没有数字签名 解决办法

    E 无法下载 http ppa launchpad net morphis anbox support ubuntu dists focal InRelease 403 Forbidden IP 185 125 190 52 80 E 仓库
  • Qt笔记---QMenu添加自定义菜单

    Qt笔记 QMenu添加自定义菜单 QMenu用于显示菜单栏交互 xff0c 使用QAction作为选项添加 xff0c 生成的菜单栏为默认样式 默认样式 xff1a 想要在菜单栏上显示一些其他的部件组成的选项 xff0c 可以使用QMen
  • 怎样关闭ubuntu 鼠标悬停自动点击

    终端运行 mousetweaks s
  • 将C盘虚拟机迁移到D盘

    之前没有注意把虚拟机创建在了C盘 xff0c 现在C盘空间不足 xff0c 需要迁移到D盘 首先需要关闭CentOS16虚拟机 xff0c 关闭之后 xff0c 复制整个虚拟机文件夹 把CentOS16复制到D盘这个目录下 xff1a 打开
  • VS2019 + CUDA11.0开发环境配置

    VS2019 43 CUDA11 0开发环境配置 确认系统是否支持安装VS2019安装CUDA11 0实例程序 确认系统是否支持 确认自己的设备是否支持CUDA11 0 打开NVIDIA控制面板 xff0c 一般N卡的设备都在鼠标右键就有
  • 排序算法:选择排序

    1 什么是选择排序 xff1f xff08 摘抄自百度百科 xff09 选择排序 xff08 Selection sort xff09 是一种简单直观的排序算法 它的工作原理是 xff1a 第一次从待排序的数据元素中选出最小 xff08 或
  • markdown-it 介绍,以及使用,自定义规则

    markdown it markdown it 是前端的一个 markdown 解析库 xff0c 将 markdown 解析成 Token 流 网上都有很多详细的 token 流解析过程 xff0c 请先简单看一遍 markdown it
  • apt-get update 报错

    sudo apt get update 报错 E 无法解析软件包文件 var lib apt lists ppa launchpad net rabbitvcs ppa ubuntu dists xenial main i18n Trans
  • Tiny210裸机开发初体验

    从昨天开始搞了一下Tiny210的裸机 xff0c 长时间没玩有点生疏了 由于开发板光盘自带裸机程序例程 xff0c 所以先跑一下简单的点灯 xff0c 打通调试通路然后再进行学习 首先使用了方法1 xff1a 参考国嵌视频烧录superb
  • System Verilog——C语言调用SV对象中的方法

    本文接上一篇文章 xff0c 即调用System Verilog 任务的C 任务 xff0c 简介如下 https blog csdn net qq 31348733 article details 101000399 如何在C语言中调用S
  • 程序设计思维与实践 Week15 作业

    ZJM 与纸条 ZJM 的女朋友是一个书法家 xff0c 喜欢写一些好看的英文书法 有一天 ZJM 拿到了她写的纸条 xff0c 纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物 ZJM 想知道自己收到的礼物是不是就是她送的 x
  • 利用Python的scrapy框架爬取手游排行前几名的手游信息

    初学scrapy框架 Scrapy是一个为了爬取网站数据 xff0c 提取结构性数据而编写的应用框架 可以应用在包括数据挖掘 xff0c 信息处理或存储历史数据等一系列的程序中 有关于scrapy的教学与基础知识这里不做解释 xff0c 感
  • 【ORB-SLAM3】CMake Error at CMakeLists.txt:37 (message): OpenCV > 2.4.3 not found.

    项目场景 xff1a ZED2相机配置使用ORB SLAM3 ZED2相机配置使用ORB SLAM3 xff0c 出现关于opencv的报错 问题描述 CMake Error at CMakeLists txt 37 message Ope
  • 领航-跟随型编队 (六)避障问题综述

    领航 跟随型编队避障问题指编队在运动过程中 xff0c 领航机器人根据某种方式获取与识别前方障碍物 xff0c 同时编队整体采取一定方法及时规避障碍物与防止内部碰撞 xff0c 涉及到障碍物检测 编队避障规划 编队避碰协调 xff0c 运动

随机推荐

  • 领航跟随型编队(十)编队实验视频

    实验一 xff1a 圆形轨迹下编队生成与保持实验 如图 5 19 所示 xff0c 两个机器人完成从随机状态形成编队并沿圆形轨迹保持编队运行 xff0c 且图中下方的窗口动态显示编队的运行情况 领航机器人初始信息 xff1a 坐标 0 5m
  • 内网项目中引入NoVnc服务

    内网项目中引入NoVnc服务 背景目标方案部署步骤完成后验证效果 背景 目前项目中 xff0c 管理的实例底层为虚拟机 xff0c 而在用户或运维人员管理具体的实例时 xff0c 需另外启动VNC Viewer客户端才能配置实例 xff0c
  • Jupyter最全指南及常见问题(持续更新)

    anaconda与jupyter lab搭配使用 jupyter lab是jupyter notebook升级版 非常好用 命令行安装 xff1a pip install jupyterlab即可 安装好了之后 xff0c 命令行输入 ju
  • 头文件

    include lt iostream gt include lt algorithm gt include lt cassert gt include lt string gt include lt sstream gt include
  • MySQL 8.0 密码重置

    MySQL 版本 8 0 系统 xff1a Linux 原因 xff1a 数据库无法登录 xff08 非忘记密码 xff09 xff0c 登上后发现竟然数据库被黑了 xff0c 留了一条 BTC 的 赎回记录 首先关闭现有的mysql 服务
  • MySQL 取出每个分组中最新的一条数据(ID最大)

    场景 xff1a 由于一个摄像头管理一个范围 xff0c 且管理的某个人可以多次犯规 故 xff0c 一个摄像头可以上报有多个事件 xff0c 多个事件可能同时上报 xff0c 可能有先后顺序 需求 xff1a 现地图只显示有事件摄像头的最
  • java获取天气接口

    如下图 span class token keyword package span span class token namespace com span class token punctuation span octv span cla
  • Eclipse反编译插件(免费无需下载资源)

    分享一个适用eclipse的java反编译插件JD Decompiler 最近eclipse插件库被玩坏了 xff0c 于是重新安装插件 xff0c 站内搜索发现反编译插件竟然都要积分下载了 以下是插件官网 xff0c 看不懂英文的小伙伴用
  • JAVA基础疑难——001Boolean类型传值问题

    今天在帮助一位小伙伴解决传值的问题的时候 xff0c 发现他使用的是boolean类型的带参方法 程序执行没有问题 xff0c 但是boolen类型的值传不出来 怎么找问题都找不出来 今天就该问题所产生的原因给大家分享一下 xff0c 下面
  • 洛谷p4180 ac自动机

    匹配字符串时 xff0c 对于重复的单词我们只考虑一次 xff0c 我们开一个数组记录 xff0c 重复单词的第一个id将重复单词的出现次数全部变为第一次出现的个数相加 且在匹配时 xff0c 对于每个now只扫描一次 xff0c 不重复扫
  • Debian开启SSH

    一 Debian开启SSH 参考链接 xff1a https blog csdn net zzpzheng article details 71170572 https help aliyun com knowledge detail 41
  • IDEA配置Tomcat

    IntelliJ IDEA 2017 配置Tomcat 运行Web项目 以前都用MyEclipse写程序的 突然用了IDEA各种不习惯的说 借鉴了很多网上好的配置办法 xff0c 感谢各位大神 前期准备 IDEA JDK Tomcat请先在
  • 如何实现页面登录验证

    现在很多网站在登录的时候都需要输入验证码 xff0c 现在输入的验证码方式层出不穷有单单是数字的 字母 xff08 又分大小写 xff09 的 xff0c 有数字 字母混合的 xff0c 有给出运算表达式需要回答结果的 xff0c 还有的卡
  • REST,RESTful到底是个什么?

    0 REST不是 34 rest 34 这个单词 而是几个单词缩写 但即使那几个单词说出来 也无法理解在说什么 不是要贬低人 是我自己也理解困难 1 REST描述的是在网络中client和server的一种交互形式 REST本身不实用 实用
  • spring boot 入门

    什么是 spring boot Spring Boot是由Pivotal团队提供的全新框架 xff0c 其设计目的是用来简化新Spring应用的初始搭建以及开发过程 该框架使用了特定的方式来进行配置 xff0c 从而使开发人员不再需要定义样
  • html如何使用springboot进行跳转

    问题 xff1a 页面之间的跳转 xff0c 通常带有值的传输 xff0c 但是 xff0c 在现在比较流行的SPRING MVC WEB 开发模型中 xff0c 设计机制导致页面之间的直接接跳转和传值不被支持 xff08 网上看到的 xf
  • PowerShell升级

    PowerShell升级 1 查看版本 span class token variable PSVersionTable span 2 搜索软件包 winget search Microsoft PowerShell 3 使用 id 参数安
  • 四子棋对决(一)

    1 算法一 cc Class extends cc Component properties overLab default null type cc Label chessPrefab 棋子的预制资源 default null type
  • 四子棋对决(二)

    import com from 39 common 39 cc Class extends cc Component properties overLab default null type cc Label chessPrefab 棋子的
  • 四子棋对决(三)

    客户端 开始场景 xff1a menuScript js import global from 39 global 39 var com 61 require 39 common 39 cc Class extends cc Compone