合体积木

news2024/11/28 4:41:07

欢迎来到程序小院

合体积木

玩法:点击积木移动,将积木合并一起,移动步数越少获得⭐️⭐️越多,
共52关卡,每关卡都有不同的积木摆放,快去闯关吧^^。

开始游戏

html

<canvas id="gameCanvas" width="640" height="864"></canvas>

css

body,html {
  -webkit-touch-callout: none;               
  -webkit-text-size-adjust: none;             
  -webkit-user-select: none;              
  -webkit-tap-highlight-color: transparent;
  margin: 			0;
  padding: 			0;
  font-family: 		Arial, Verdana, sans-serif;
  font-size: 			12px;
  font-weight:		normal;
  color: 				#ccc;
  background-color:	#fff;
}
.portraitLock {
  position: absolute;
  display: none;
  width: 100%;
  height: 100%;
  background-color:	#fff;
}
.rotatePhoneIcon {
  width: 60%;
  margin: 30px auto;
  display: block;
}

js

function att(e) {
    new Jok.JokEngine("gameCanvas");
    (new Jok.JokG).jokEngine.initState(new PreloadState)
}

function init() {
   att(0);
}
var Jok = Jok || {};
Jok.JokState = function() {
    createjs.Container.call(this);
    this.name = ""
};
Jok.JokState.prototype = Object.create(createjs.Container.prototype);
Jok.JokState.prototype.constructor = Jok.JokState;
Jok.JokState.prototype.dispose = function() {};
Jok.JokState.prototype.create = function() {};
Jok.JokState.prototype.update = function() {};
SplashScreenZibbo = function() {
    Jok.JokState.call(this)
};
SplashScreenZibbo.prototype = Object.create(Jok.JokState.prototype);
SplashScreenZibbo.prototype.constructor = SplashScreenZibbo;
SplashScreenZibbo.prototype.create = function() {
    console.log("SplashScreenZibbo.create");
    var e = new createjs.Container;
    this.addChild(e);
    this.shape = new createjs.Shape;
    this.shape.x = -(new Jok.JokG).width / 2;
    this.shape.y = -(new Jok.JokG).height / 2;
    this.shape.graphics.beginFill("rgba(255,255,255,1)").rect(0, 0, (new Jok.JokG).width,
    (new Jok.JokG).height);
    e.addChild(this.shape);
    var t = new createjs.Bitmap((new Jok.JokG).queue.getResult("zibboLogoBig"));
    t.x = -t.getBounds().width / 2;
    t.y = -t.getBounds().height / 2;
    e.addChild(t);
    console.log("bmp.x = " + t.x);
    this.timeBegin = createjs.Ticker.getTime();
    this.transScreen = true;
    e.on("click", createjs.proxy(ZibboUtils.logoAction, this));
    e.cursor = "pointer";
    if ((new Jok.JokG).showZibbo) {
        console.log("new Jok.JokG().showZibbo = " + (new Jok.JokG).showZibbo)
    }
};
SplashScreenZibbo.prototype.openUrl = function() {
    ZibboUtils.logoAction()
};
SplashScreenZibbo.prototype.update = function() {
    if (createjs.Ticker.getTime() - this.timeBegin > 500 && this.transScreen) {
        this.transScreen = false;
        (new Jok.JokG).jokEngine.transitionScreen(new MainMenu, null, null)
    }
};
ZibboUtils = function() {};
ZibboUtils.prototype.constructor = ZibboUtils;
ZibboUtils.walkAction = function() {
    ZibboUtils.buttonAction("walkthrough")
};
ZibboUtils.moreAction = function() {
    ZibboUtils.buttonAction("more_games")
};
ZibboUtils.logoAction = function() {
    ZibboUtils.buttonAction("logo")
};
ZibboUtils.buttonAction = function(e) {};
ZibboUtils.openUrl = function(e) {
    e = e || "http://play68.com";
    var t = window.open(e, "_blank");
    t.focus()
};
MyButtonBase = function(e, t, n, r) {
    createjs.Container.call(this);
    this.actionFunc = e;
    this._actionDefault = null;
    this.x = t.x;
    this.y = t.y;
    this._scaleBegin = n;
    this.scaleX = this._scaleBegin.x;
    this.scaleY = this._scaleBegin.y;
    if (r)
        if (r.length > 0) {
            this.sprDown = new createjs.Sprite(Jok.JokG().animLoader.spriteSheet, r);
            this.sprDown.stop();
            this.addChild(this.sprDown)
        }
    this.onWork();
    this.TIME_ANIM = 300;
    this.SCALE_ANIM = 1.11;
    this.tweenSize = null;
    this.eventScaleBegin = createjs.proxy(this.scaleBegin, this);
    this.eventScaleEnd = createjs.proxy(this.scaleEnd, this)
};
MyButtonBase.prototype = Object.create(createjs.Container.prototype);
MyButtonBase.prototype.constructor = MyButtonBase;
MyButtonBase.prototype.addBmpTTT = function(e, t, n, r) {
    console.log("bmp = " + e);
    console.log("MyButtonBase.prototype.addBmpTTT  width = " + n);
    if (n);
    else if (e.getBounds()) {
        n = e.getBounds().width;
        r = e.getBounds().height
    } else {
        n = 202;
        r = 50
    } if (t) {
        e.x = -n / 2;
        e.y = -r / 2
    }
    var i = new createjs.Shape((new createjs.Graphics).beginFill("#000000").
    drawRect(e.x, e.y, n, r));
    this.hitArea = i;
    this.addChild(e);
    console.log("this.addChild(bmp);")
};
MyButtonBase.prototype.initUp = function(e) {
    this.sprUp = new createjs.Sprite(Jok.JokG().animLoader.spriteSheet, e);
    this.sprUp.stop();
    this.addChild(this.sprUp)
};
MyButtonBase.prototype.action = function(e) {
    if (this.tweenSize == null) {
        (new MusicManager).playMouse();
        if (this.actionFunc != null) this.actionFunc();
        this.tweenSize = createjs.Tween.get(this).to({
            scaleX: this._scaleBegin.x * this.SCALE_ANIM,
            scaleY: this._scaleBegin.y * this.SCALE_ANIM
        }, this.TIME_ANIM, createjs.Ease.quartInOut).call(this.eventScaleBegin)
    }
};
MyButtonBase.prototype.scaleBegin = function(e) {
    this.tweenSize = createjs.Tween.get(this).to({
        scaleX: this._scaleBegin.x,
        scaleY: this._scaleBegin.y
    }, this.TIME_ANIM, createjs.Ease.quartInOut).call(this.eventScaleEnd)
};
MyButtonBase.prototype.scaleEnd = function(e) {
    this.tweenSize = null
};
MyButtonBase.prototype.onSetAction = function(e) {
    this.offWork();
    this._actionDefault = e;
    this.onWork()
};
MyButtonBase.prototype.onWork = function() {
    if (!this.hasEventListener("click"))
        if (this._actionDefault != null) this.on("click", this._actionDefault);
        else this.eventAction = this.on("click", createjs.proxy(this.action, this));
    this.cursor = "pointer"
};
MyButtonBase.prototype.offWork = function() {
    console.log("MyButtonBase.prototype.offWork");
    if (this.hasEventListener("click")) this.off("click", this.eventAction);
    this.cursor = "arrow"
};
FieldContainer = function(e, t) {
    createjs.Container.call(this);
    this.gameManager = t;
    this.field = e;
    this.fieldsSteps = [];
    this.addSaveStep();
    this.x = -this.gameManager.FIELD_WIDTH / 2 * this.gameManager.CELL_SIZE + 
    this.gameManager.CELL_SIZE;
    this.y = -207;
    this.BLUE_ID = 1;
    this.ORANGE_ID = 2;
    this.BLACK_ID = 3;
    this.PURPLE_ID = 4;
    this._moveClipsNames = {};
    this._moveClipsNames["" + this.BLUE_ID] = "tile_a_";
    this._moveClipsNames["" + this.ORANGE_ID] = "tile_c_";
    this._moveClipsNames["" + this.BLACK_ID] = "tile_black_";
    this._moveClipsNames["" + this.PURPLE_ID] = "tile_b_";
    this.figures = [];
    this._moveComplete = true;
    this._numMove = 0;
    this.findFigures();
    this.drawBlackCells();
    this.initMouse()
};
FieldContainer.prototype = Object.create(createjs.Container.prototype);
FieldContainer.prototype.constructor = FieldContainer;
FieldContainer.prototype.initMouse = function() {
    this.stage = (new Jok.JokG).stage;
    this._mouseDown = false;
    this._step = false;
    this._oldPos = new createjs.Point(this.stage.mouseX, this.stage.mouseY);
    this.onMouse();
    this.MOUSE_X_Y_DIFF_MIN = 5;
    this.MOUSE_PATH_MIN = 3
};
FieldContainer.prototype.offMouse = function() {
    this.stage.off("stagemousemove", this.eventMove);
    this.stage.off("stagemousedown", this.eventMouseDown);
    this.stage.off("stagemouseup", this.eventMouseUp)
};
FieldContainer.prototype.onMouse = function() {
    this.eventMove = this.stage.on("stagemousemove", createjs.proxy(this.cccMouseMove,
    this));
    this.eventMouseDown = this.stage.on("stagemousedown", createjs.proxy(this.
    cccMouseDown, this));
    this.eventMouseUp = this.stage.on("stagemouseup", createjs.proxy(this.cccMouseUp, 
    this))
};
FieldContainer.prototype.cccMouseMove = function(e) {
    if (this._mouseDown && this._step && this._moveComplete) {
        var t = this.stage.mouseX;
        var n = this.stage.mouseY;
        var r = Math.abs(t - this._oldPos.x);
        var i = Math.abs(n - this._oldPos.y);
        if (Math.abs(r - i) < this.MOUSE_X_Y_DIFF_MIN || r < this.MOUSE_PATH_MIN && 
        i < this.MOUSE_PATH_MIN) {
            this._oldPos.x = t;
            this._oldPos.y = n;
            return
        }
        this._step = false;
        this._numMove = 0;
        this._moveComplete = false;
        if (r > i)
            if (t > this._oldPos.x) this.step(1, 0);
            else this.step(-1, 0);
        else if (n > this._oldPos.y) this.step(0, 1);
        else this.step(0, -1);
        this._oldPos.x = t;
        this._oldPos.y = n
    }
};
FieldContainer.prototype.cccMouseDown = function(e) {
    this._mouseDown = true;
    this._step = true;
    this._oldPos.x = this.stage.mouseX;
    this._oldPos.y = this.stage.mouseY
};
FieldContainer.prototype.cccMouseUp = function(e) {
    this._mouseDown = false
};
FieldContainer.prototype.findFigures = function() {
    var e = new FigureBlocks(this.field, this.gameManager, this);
    var t = 0;
    var n = 0;
    for (t = 0; t < this.gameManager.FIELD_WIDTH; t++)
        for (n = 0; n < this.gameManager.FIELD_HEIGHT; n++)
            if (!this.cellOnFigere(t, n))
                if (e.findAllCells(t, n)) {
                    this.figures.push(e);
                    this.addChild(e);
                    var e = new FigureBlocks(this.field, this.gameManager, this)
                }
};
FieldContainer.prototype.cellOnFigere = function(e, t) {
    for (var n = 0; n < this.figures.length; n++)
        if (this.figures[n].isCellFigure(e, t)) return true;
    return false
};
FieldContainer.prototype.drawBlackCells = function() {
    this.drawOne(this.BLACK_ID)
};
FieldContainer.prototype.testDrawFiled = function() {
    this.removeAllChildren();
    this.drawOne(this.BLACK_ID);
    this.drawOne(this.BLUE_ID);
    this.drawOne(this.ORANGE_ID);
    this.drawOne(this.PURPLE_ID)
};
FieldContainer.prototype.drawOne = function(e) {
    var t = -1;
    var n = -1;
    var r = new createjs.Container;
    this.addChild(r);
    for (t = -1; t < this.gameManager.FIELD_WIDTH; t++)
        for (n = -1; n < this.gameManager.FIELD_HEIGHT; n++) {
            var i = this.getSprTile(t, n, e);
            if (i != null) {
                i.x = this.gameManager.CELL_SIZE * t;
                i.y = this.gameManager.CELL_SIZE * n;
                r.addChild(i)
            }
        }
};
FieldContainer.prototype.getSprTile = function(e, t, n) {
    var r = this.getTileId(e, t);
    var i = this.getTileId(e + 1, t);
    var s = this.getTileId(e + 1, t + 1);
    var o = this.getTileId(e, t + 1);
    if (r != n) r = 0;
    else r = 1; if (i != n) i = 0;
    else i = 1; if (s != n) s = 0;
    else s = 1; if (o != n) o = 0;
    else o = 1; if (r == 0 && i == 0 && s == 0 && o == 0) return null;
    var u = new createjs.Sprite(Jok.JokG().animLoader.spriteSheet,
    this._moveClipsNames["" + n] + r + "_" + i + "_" + s + "_" + o);
    u.stop();
    return u
};
FieldContainer.prototype.getTileId = function(e, t) {
    if (e <= -1 || t <= -1 || e >= this.gameManager.FIELD_WIDTH ||
    t >= this.gameManager.FIELD_HEIGHT) return 0;
    return this.field[e][t]
};
FieldContainer.prototype.getFigureByCell = function(e, t) {
    for (var n = 0; n < this.figures.length; n++)
        if (this.figures[n].isCellFigure(e, t)) return this.figures[n];
    console.log("OMFG figures = NULL )) cellX = " + e + " cellY = " + t);
    return null
};
FieldContainer.prototype.step = function(e, t) {
    for (var n = 0; n < this.figures.length; n++) this.figures[n].step(e, t);
    var r = false;
    while (true) {
        r = false;
        for (var n = 0; n < this.figures.length; n++)
            if (this.figures[n].postStep()) r = true;
        if (!r) break
    }
    for (var n = 0; n < this.figures.length; n++) this.figures[n].preGo();
    var i = false;
    for (n = 0; n < this.figures.length; n++)
        if (this.figures[n].go(e, t)) i = true;
    if (i) {
        (new MusicManager).playStep();
        this.gameManager.gui.starBar.addStep();
        this.addSaveStep()
    }
};
FieldContainer.prototype.checkFigureConnection = function() {
    var e = false;
    for (var t = 0; t < this.figures.length; t++)
        for (var n = t + 1; n < this.figures.length; n++)
            if (this.figures[t].connectToFigure(this.figures[n])) e = true;
    if (e) {
        for (var t = 0; t < this.figures.length; t++)
            if (this.figures[t].connecting) {
                this.removeChild(this.figures[t]);
                this.figures.splice(t, 1);
                t--
            }
        this.findFigures();
        if (!this.checkWin())(new MusicManager).playConnect()
    }
};
FieldContainer.prototype.checkWin = function() {
    var e = {};
    e["" + this.BLUE_ID] = 0;
    e["" + this.ORANGE_ID] = 0;
    e["" + this.BLACK_ID] = 0;
    e["" + this.PURPLE_ID] = 0;
    for (var t = 0; t < this.figures.length; t++) e["" + this.figures[t].cellId]++;
    for (var t in e)
        if (e[t] > 1) return false;
    this.gameManager.setGameOver();
    console.log("WIN!!!");
    // updateShare(this.gameManager.levelId + 1);
    // Play68.setRankingScoreDesc(this.gameManager.levelId + 1, 
    Play68.rankingShowType.RANKING_SHOW_NO);
    return true
};
FieldContainer.prototype.moveComplete = function() {
    this._numMove++;
    if (this._numMove == this.figures.length) {
        this._moveComplete = true;
        this.checkFigureConnection()
    }
};
FieldContainer.prototype.addSaveStep = function() {
    var e = [];
    for (var t = 0; t < this.field.length; t++) e.push(this.field[t].slice(0));
    this.fieldsSteps.push(e);
    this.traceSteps()
};
FieldContainer.prototype.deleteStep = function() {
    if (this.gameManager.gui.starBar.stepNow > 0) {
        var e = this.fieldsSteps[this.gameManager.gui.starBar.stepNow - 1];
        for (var t = 0; t < e.length; t++)
            for (var n = 0; n < e[t].length; n++) this.field[t][n] = e[t][n];
        this.fieldsSteps.pop();
        console.log(this.fieldsSteps.length);
        this.gameManager.gui.starBar.stepNow = this.gameManager.gui.starBar.stepNow - 2;
        this.gameManager.gui.starBar.addStep();
        for (var t = 0; t < this.figures.length; t++) this.removeChild(this.figures[t]);
        this.figures.length = 0;
        this.findFigures()
    }
    this.traceSteps()
};
FieldContainer.prototype.traceSteps = function() {};
FigureBlocks = function(e, t, n) {
    createjs.Container.call(this);
    this.gameManager = t;
    this.field = e;
    this.fieldContainer = n;
    this._moveClipsNames = this.fieldContainer._moveClipsNames;
    this.cells = [];
    this.id = (new Jok.JokG).getNewid();
    this.figuresStep = [];
    this.connecting = false;
    this.tweenMove = null;
    this.eventMoveComplete = createjs.proxy(this.moveComplete, this);
    this.MOVE_TIME = 320;
    this.MOVE_CLOSE_PATH = this.gameManager.CELL_SIZE / 10
};
FigureBlocks.prototype = Object.create(createjs.Container.prototype);
FigureBlocks.prototype.constructor = FigureBlocks;
FigureBlocks.prototype.setCells = function(e) {
    this.cells = e
};
FigureBlocks.prototype.findAllCells = function(e, t) {
    this.cells.length = 0;
    if (this.field[e][t] == 0 || this.field[e][t] == this.fieldContainer.BLACK_ID) 
    return false;
    this.cellId = this.field[e][t];
    this.addCell(e, t);
    this.drawOne(this.cellId);
    return true
};
FigureBlocks.prototype.testFigure = function() {
    var e = "" + this.cellId + "    ";
    for (var t = 0; t < this.cells.length; t++) e += "" + this.cells[t].x + 
    " " + this.cells[t].y + "     ";
    console.log(e)
};
FigureBlocks.prototype.addCell = function(e, t) {
    if (e <= -1 || t <= -1 || e >= this.gameManager.FIELD_WIDTH || t >= 
    this.gameManager.FIELD_HEIGHT) return;
    if (this.field[e][t] != this.cellId) return;
    if (!this.isCellFigure(e, t)) {
        this.cells.push(new createjs.Point(e, t));
        this.addCell(e - 1, t);
        this.addCell(e + 1, t);
        this.addCell(e, t - 1);
        this.addCell(e, t + 1)
    }
};
FigureBlocks.prototype.isCellFigure = function(e, t) {
    var n = 0;
    for (n = 0; n < this.cells.length; n++)
        if (this.cells[n].x == e && t == this.cells[n].y) return true;
    return false
};
FigureBlocks.prototype.drawOne = function(e) {
    var t = -1;
    var n = -1;
    for (t = -1; t < this.gameManager.FIELD_WIDTH; t++)
        for (n = -1; n < this.gameManager.FIELD_HEIGHT; n++) {
            var r = this.getSprTile(t, n, e);
            if (r != null) {
                r.x = this.gameManager.CELL_SIZE * t;
                r.y = this.gameManager.CELL_SIZE * n;
                this.addChild(r)
            }
        }
    this.casheAllTTTT()
};
FigureBlocks.prototype.casheAllTTTT = function() {};
FigureBlocks.prototype.getSprTile = function(e, t, n) {
    var r = this.getTileId(e, t);
    var i = this.getTileId(e + 1, t);
    var s = this.getTileId(e + 1, t + 1);
    var o = this.getTileId(e, t + 1);
    if (r != n) r = 0;
    else r = 1; if (i != n) i = 0;
    else i = 1; if (s != n) s = 0;
    else s = 1; if (o != n) o = 0;
    else o = 1; if (r == 0 && i == 0 && s == 0 && o == 0) return null;
    var u = new createjs.Sprite(Jok.JokG().animLoader.spriteSheet, 
    this._moveClipsNames["" + n] + r + "_" + i + "_" + s + "_" + o);
    u.stop();
    return u
};

源码

需要源码请关注添加好友哦^ ^

转载:欢迎来到本站,转载请注明文章出处https://ormcc.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多播路由选择

目录 1 多播路由选择 1.1 转发多播数据报时使用三种方法 (1) 洪泛与剪除 RPB 的要点&#xff1a; 1.检查&#xff0c;转发 2.形成以源为根节点的多播转发树 3.剪枝与嫁接 (2) 隧道技术 (tunneling) (3) 基于核心的发现技术 1.2 几种多播路由选择协议 1 多播路由选择 …

C++实战Opencv第二天——色彩空间转换函数和opencv中图像对象创建与赋值(从零开始,保姆教学)

OpenCV是一个强大的计算机视觉库&#xff0c;使用C作为主要编程语言&#xff0c;对于图像处理和计算机视觉领域具有重要意义。其提供了丰富的功能和算法&#xff0c;使得开发者能够快速实现各种图像处理和计算机视觉应用。OpenCV C为图像处理和计算机视觉领域的开发者提供了一个…

前端JavaScript篇之JavaScript 类数组对象的定义?如何将类数组对象转换为真正的数组

目录 JavaScript 类数组对象的定义&#xff1f;如何将类数组对象转换为真正的数组如何将类数组对象转换为真正的数组 JavaScript 类数组对象的定义&#xff1f;如何将类数组对象转换为真正的数组 类数组对象指的是具有类似数组结构&#xff08;类似于数组的属性或方法&#xf…

西瓜书学习笔记——流形学习(公式推导+举例应用)

文章目录 等度量映射&#xff08;仅保留点与其邻近点的距离&#xff09;算法介绍实验分析 局部线性嵌入&#xff08;不仅保留点与其邻近点的距离还要保留邻近关系&#xff09;算法介绍实验分析 等度量映射&#xff08;仅保留点与其邻近点的距离&#xff09; 算法介绍 等度量映…

vue中 日期选择--本日、本周、本月、本年选择器实现(基于elementui)

效果图&#xff1a; 由于项目需要图标统计展示&#xff0c;需要日期美观化选择如上图所示&#xff0c;代码如下&#xff1a; <template><div class"el-page body"><el-row><el-col class"statistic-analysis-report-style" :span&qu…

Elastic Search 6.x 版本 rollover 配置

背景 业务里有发送消息的请求&#xff0c;如短信、邮件、企信等&#xff0c;这些数据都会存储到 ES 中&#xff0c;用于数据的查询和问题排查等。每天都有几十万至几百万的数据&#xff0c;手动删除数据也比较繁琐&#xff0c;可以通过 ES 的 rollover 机制来实现根据条件自动…

PHP框架详解 - symfony框架

首先说一下为什么要写symfony框架&#xff0c;这个框架也属于PHP的一个框架&#xff0c;小编接触也是3年前&#xff0c;原因是小编接触Golang&#xff0c;发现symfony框架有PHP框架的东西也有Golang的东西&#xff0c;所以决定总结一下&#xff0c;有需要的同学可以参看小编的G…

【数据结构与算法】(7)基础数据结构之双端队列的链表实现、环形数组实现示例讲解

目录 2.6 双端队列1) 概述2) 链表实现3) 数组实现习题E01. 二叉树 Z 字层序遍历-Leetcode 103 2.6 双端队列 1) 概述 双端队列、队列、栈对比 定义特点队列一端删除&#xff08;头&#xff09;另一端添加&#xff08;尾&#xff09;First In First Out栈一端删除和添加&…

电脑上常见的绘图软件有哪些?

现在在电脑上绘图很流行&#xff0c;不仅可以随时更改&#xff0c;还可以提高绘图效率&#xff0c;绘图软件中有很多工具。市场上的计算机绘图软件种类繁多。包括艺术设计、工业绘图和3D绘图。那么每个绘图软件都有自己的特点。那么&#xff0c;哪个更适合计算机绘画软件呢&…

信任与创新 | 回顾通付盾的2023!

-END- 数信云&#xff0c;基于区块链与人工智能的数据安全应用与服务平台

基于SpringBoot的后端导出Excel文件

后端导出Excel&#xff0c;前端下载。 文章目录 后端导出Excel引入依赖写入响应 前端下载后端导出失败和成功返回的内容类型不同&#xff0c;因此需要分别判断。 工具类ServletUtils.javaFileUtils.javafile.js 后端导出Excel 引入依赖 poi 操作xls&#xff0c;doc…&#xff…

【Script】使用pyOpenAnnotate搭建半自动标注工具(附python源码)

文章目录 0. Background1. Method2. Code3. Example: 雄鹿红外图像标注3.1 选择色彩空间3.2 执行阈值3.3 执行形态学操作3.4 轮廓分析以找到边界框3.5 过滤不需要的轮廓3.6 绘制边界框3.7 以需要的格式保存Reference本文将手把手教你用Python和OpenCV搭建一个半自动标注工具(包…

Flutter开发模仿百度云盘创建文件夹功能Draggable和DragTarget的混合使用

使用LongPressDraggable和DragTarget写了个类似于百度云盘管理文件和文件夹的功能&#xff08;为了避免和列表的滑动手势冲突&#xff0c;所以采用LongPressDraggable而不是Draggable&#xff09;&#xff1a; 1、拖拽文件到文件夹中 2、拖拽两个文件可以合并成一个新的文件夹…

【linux】git和gdb调试工具

在linux下提交代码同步到gitee 1.创建一个新的仓库&#xff08;演示步骤&#xff09; 2.init 这两个步骤用于识别提交代码的身份&#xff0c;一个你的名字&#xff0c;一个你的邮箱 开启本地仓库 克隆本地仓库成功 我们将这个仓库拷到了111目录底下. 我们发现少了一个.gitig…

window 镜像---负载篇

前提&#xff1a;需要修改window的powershell执行脚本的策略 步骤&#xff1a;以管理员身份打开powershell&#xff0c;执行 Get-ExecutionPolicy查看当前执行策略&#xff0c;若返回值是Restricted&#xff0c;需执行Set-ExecutionPolicy RemoteSigned powershell 版本信息&am…

SpringMVC精简知识点

SpringMVC 数据格式化基本数据类型和字符串自动转换特殊数据类型和字符串自动转换 验证及国际化应用实例注意事项和使用细节注解的结合使用数据类型转换校验核心类-DatBinder取消某个属性的绑定中文乱码解决处理json和HttpMessageConverter<T>作业布置SpringMVC文件上传自…

笔记本电脑的WIFI模块,突然不显示了,网络也连接不上

问题复现&#xff1a; 早上&#xff0c;在更新完笔记本电脑的系统之后&#xff0c;连网之后&#xff0c;网络突然直接断开&#xff0c;一查看&#xff0c;WiFi模块居然不见了&#xff0c;开机重启也是如此&#xff0c;这种情况常常出现在更新系统之后&#xff0c;WiFi模块驱动就…

MySQL集群 1主1从 主从复制(原理 及配置命令)

CSDN 成就一亿技术人&#xff01; 今天分享一期 MySQL集群方案&#xff1a;主从集群 也是最常用的一种 CSDN 成就一亿技术人&#xff01; 目录 使用主从复制的原因&#xff08;优点&#xff09; 主从复制的过程&#xff08;原理&#xff09; 了解两大线程&#xff08; I/O…

7min到40s:SpringBoot 启动优化实践!

目录 背景 1 耗时问题排查 1.1 观察 SpringBoot 启动 run 方法 1.2 监控 Bean 注入耗时 2 优化方案 2.1 如何解决扫描路径过多&#xff1f; 2.2 如何解决 Bean 初始化高耗时&#xff1f; 3 新的问题 3.1 SpringBoot 自动化装配&#xff0c;让人防不胜防 3.2 使用 sta…

大带宽服务器托管的特点和考虑因素

很多公司和企业对于使用大带宽服务器的需求和存储不一样&#xff0c;为了满足不同的用户需求&#xff0c;大带宽服务器托管是个不错的选择&#xff0c;小编为您整理发布大带宽服务器托管的特点和要考虑的因素。 大带宽服务器托管是一种服务器托管服务&#xff0c;其主要特点是…