Commit e0fcb941 authored by zjz1994's avatar zjz1994

代码暂存

parent bf6a5999
......@@ -96,19 +96,19 @@
"assets": [
{
"name": "bg1",
"url": "//yun.duiba.com.cn/aurora/assets/b2c76b2a753317e5ea935bab22097a43a4c9f7cb.png",
"url": "//yun.duiba.com.cn/aurora/assets/e6ab7c1e191d30a2b068fa4a0e867040b9396226.png",
"uuid": "bg1",
"ext": ".png"
},
{
"name": "bg2",
"url": "//yun.duiba.com.cn/aurora/assets/7f8261a9dd7b83cdc3b95b6f3f385e7a91e49682.png",
"url": "//yun.duiba.com.cn/aurora/assets/a2d611fa5af2b26ffd57a24ff524d2a0a4fe1564.png",
"uuid": "bg2",
"ext": ".png"
},
{
"name": "bg3",
"url": "//yun.duiba.com.cn/aurora/assets/872c688f9c2f495fe234277256923804df2ab75e.png",
"url": "//yun.duiba.com.cn/aurora/assets/89258aed59e36471a4136ce7fbc4ca7e300caf07.png",
"uuid": "bg3",
"ext": ".png"
},
......@@ -120,13 +120,13 @@
},
{
"name": "yindao1",
"url": "//yun.duiba.com.cn/aurora/assets/f21d5429dbd947e66613bd6c5d864fdcfd104bd4.png",
"url": "//yun.duiba.com.cn/aurora/assets/4449285320882460ae0dd0b59b3c73e0bb92def6.png",
"uuid": "yindao1",
"ext": ".png"
},
{
"name": "yindao2",
"url": "//yun.duiba.com.cn/aurora/assets/7ece2d8c438ec06004f7f40d9798ab72f0e6a244.png",
"url": "//yun.duiba.com.cn/aurora/assets/1c914031834736b93e9b2a94a4e8a643871795f7.png",
"uuid": "yindao2",
"ext": ".png"
},
......
{
"name": "消消乐",
"desc": "消消乐模块",
"props": {},
"assets": [
{
"name": "底图",
"url": "//yun.duiba.com.cn/aurora/assets/109e30fa662276e0ee4f2e2c35b85bee6f300050.png",
"uuid": "map",
"ext": ".png"
},
{
"name": "房子",
"url": "//yun.duiba.com.cn/aurora/assets/df155804a46c708a714365b7247141ba0add45e5.png",
"uuid": "home",
"ext": ".png"
},
{
"name": "白虎",
"url": "//yun.duiba.com.cn/aurora/assets/b486b4a72c58850bbd1930b994e08802e34fb3e3.png",
"uuid": "btiger",
"ext": ".png"
},
{
"name": "雌虎",
"url": "//yun.duiba.com.cn/aurora/assets/c41afceb285432ed2c17c643df96efc20893adc8.png",
"uuid": "gtiger",
"ext": ".png"
},
{
"name": "猴子",
"url": "//yun.duiba.com.cn/aurora/assets/ef7bc5d1fc38267adba71e07d517330f249d23ba.png",
"uuid": "monkey",
"ext": ".png"
},
{
"name": "鸟",
"url": "//yun.duiba.com.cn/aurora/assets/9ad18dfa34e1729e9893ac362975f9e062263f70.png",
"uuid": "bird",
"ext": ".png"
},
{
"name": "树熊",
"url": "//yun.duiba.com.cn/aurora/assets/277aa43d9f1bf3dd7a18e627335a166f0509684c.png",
"uuid": "koala",
"ext": ".png"
},
{
"name": "选中框",
"url": "//yun.duiba.com.cn/aurora/assets/a3ce52a41ed53ccfa7ce404dbc10102961c4a805.png",
"uuid": "selected",
"ext": ".png"
}
],
"events": {
"in": {
"game-init": {
"alias": "初始化第一关",
"data": {}
},
"game-reset": {
"alias": "关卡通过重玩之类的重置关卡",
"data": {}
},
"game-start": {
"alias": "开始"
}
},
"out": {
"game-score-update": {
"alias": "分数更新",
"data": {
"score": "分数"
}
},
"game-time-update": {
"alias": "倒计时更新",
"data": {
"time": "剩余时间"
}
},
"game-over": {
"alias": "游戏结束",
"data": {
"score": "分数",
"reason": "结束原因(1:时间到了,2:过关)"
}
}
}
},
"id": "xiaoxiaole",
"code": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('tslib')) :\n\ttypeof define === 'function' && define.amd ? define(['tslib'], factory) :\n\t(global = global || self, global.xiaoxiaole = factory(global.tslib));\n}(this, (function (tslib) { 'use strict';\n\n\tfunction getTexture(uuid) {\r\n\t return engine.Texture.from(getAssetByUUID(uuid).uuid);\r\n\t}\r\n\tfunction getTextureByName(name) {\r\n\t return getTexture(engine.getAssetByName(name).uuid);\r\n\t}\r\n\t//# sourceMappingURL=utils.js.map\n\n\tvar Element = (function (_super) {\r\n\t tslib.__extends(Element, _super);\r\n\t function Element() {\r\n\t var _this = _super.call(this) || this;\r\n\t _this.width = MapData.itemsize;\r\n\t _this.height = MapData.itemsize;\r\n\t _this.eimage = new engine.Image();\r\n\t _this.addChild(_this.eimage);\r\n\t _this.touch = true;\r\n\t _this.addEventListener(engine.MouseEvent.CLICK, _this.selectele, _this);\r\n\t return _this;\r\n\t }\r\n\t Object.defineProperty(Element.prototype, \"touch\", {\r\n\t set: function (touch) {\r\n\t this.mouseEnabled = touch;\r\n\t this.mouseChildren = touch;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Element.prototype.init = function (type) {\r\n\t this.scaleX = 1;\r\n\t this.scaleY = 1;\r\n\t this.type = type;\r\n\t var ename = MapData.getEtypeImgName(type);\r\n\t this.eimage.texture = getTextureByName(ename);\r\n\t var imgwid = this.eimage.texture.width;\r\n\t var imghei = this.eimage.texture.height;\r\n\t this.eimage.x = (this.width - imgwid) / 2;\r\n\t this.eimage.y = (this.height - imghei) / 2;\r\n\t };\r\n\t Element.prototype.setrc = function (r, c) {\r\n\t this.inrow = r;\r\n\t this.incol = c;\r\n\t };\r\n\t Element.prototype.selectele = function (e) {\r\n\t engine.globalEvent.dispatchEvent(GameEvent.SelectEle, {\r\n\t r: this.inrow,\r\n\t c: this.incol\r\n\t });\r\n\t };\r\n\t Element.prototype.flyToHome = function () {\r\n\t };\r\n\t Element.prototype.changePos = function () {\r\n\t };\r\n\t return Element;\r\n\t}(engine.Container));\r\n\t//# sourceMappingURL=Element.js.map\n\n\tvar ElementType;\r\n\t(function (ElementType) {\r\n\t ElementType[ElementType[\"btiger\"] = 1] = \"btiger\";\r\n\t ElementType[ElementType[\"gtiger\"] = 2] = \"gtiger\";\r\n\t ElementType[ElementType[\"monkey\"] = 3] = \"monkey\";\r\n\t ElementType[ElementType[\"bird\"] = 4] = \"bird\";\r\n\t ElementType[ElementType[\"koala\"] = 5] = \"koala\";\r\n\t})(ElementType || (ElementType = {}));\r\n\tvar GameEvent;\r\n\t(function (GameEvent) {\r\n\t GameEvent[\"SelectEle\"] = \"SelectEle\";\r\n\t})(GameEvent || (GameEvent = {}));\r\n\tvar MapData = (function () {\r\n\t function MapData() {\r\n\t }\r\n\t MapData.getRy = function (r) {\r\n\t return this.paddingb + r * (this.itemsize + this.paddingi);\r\n\t };\r\n\t MapData.getCx = function (c) {\r\n\t return this.paddingb + c * (this.itemsize + this.paddingi);\r\n\t };\r\n\t MapData.getRCPos = function (r, c) {\r\n\t var x = this.getCx(c);\r\n\t var y = this.getRy(r);\r\n\t return [x, y];\r\n\t };\r\n\t MapData.adaptElePos = function (pos, wid, hei) {\r\n\t var x = pos[0] + (this.itemsize - wid) / 2;\r\n\t var y = pos[1] + (this.itemsize - hei) / 2;\r\n\t return [x, y];\r\n\t };\r\n\t MapData.getEtypeImgName = function (type) {\r\n\t var ename;\r\n\t switch (type) {\r\n\t case ElementType.btiger:\r\n\t ename = \"白虎\";\r\n\t break;\r\n\t case ElementType.gtiger:\r\n\t ename = \"雌虎\";\r\n\t break;\r\n\t case ElementType.monkey:\r\n\t ename = \"猴子\";\r\n\t break;\r\n\t case ElementType.bird:\r\n\t ename = \"\";\r\n\t break;\r\n\t case ElementType.koala:\r\n\t ename = \"树熊\";\r\n\t break;\r\n\t default:\r\n\t console.error(\"未定义元素类型\");\r\n\t break;\r\n\t }\r\n\t return ename;\r\n\t };\r\n\t MapData.getRandEtype = function () {\r\n\t var eletypeArr = [ElementType.btiger, ElementType.gtiger, ElementType.monkey, ElementType.bird, ElementType.koala];\r\n\t var etype = eletypeArr[Math.floor(Math.random() * eletypeArr.length)];\r\n\t return etype;\r\n\t };\r\n\t MapData.getOneEle = function (type) {\r\n\t var ele;\r\n\t if (this.elePool.length > 0) {\r\n\t ele = this.elePool.shift();\r\n\t }\r\n\t else {\r\n\t ele = new Element();\r\n\t }\r\n\t ele.name = \"ele_\" + this.eleidx;\r\n\t this.eleidx += 1;\r\n\t ele.init(type);\r\n\t return ele;\r\n\t };\r\n\t MapData.recoverEle = function (ele) {\r\n\t this.elePool.push(ele);\r\n\t };\r\n\t MapData.getDistance = function (p1, p2) {\r\n\t var p1x = p1[0];\r\n\t var p1y = p1[1];\r\n\t var p2x = p2[0];\r\n\t var p2y = p2[1];\r\n\t var dis = Math.sqrt(Math.pow(p1x - p2x, 2) + Math.pow(p1y - p2y, 2));\r\n\t return dis;\r\n\t };\r\n\t MapData.itemsize = 129;\r\n\t MapData.paddingb = 10;\r\n\t MapData.paddingi = 5;\r\n\t MapData.row = 5;\r\n\t MapData.col = 5;\r\n\t MapData.posData = {};\r\n\t MapData.eleidx = 1;\r\n\t MapData.elePool = [];\r\n\t return MapData;\r\n\t}());\r\n\t//# sourceMappingURL=MapData.js.map\n\n\tvar GameView = (function (_super) {\r\n\t tslib.__extends(GameView, _super);\r\n\t function GameView() {\r\n\t var _this = _super.call(this) || this;\r\n\t _this.lattices = {};\r\n\t _this.eliminateArr = [];\r\n\t _this.selectArr = [];\r\n\t _this.conty = 140;\r\n\t _this.homex = 528;\r\n\t _this.anispeed = 860;\r\n\t _this.once(engine.Event.ADDED_TO_STAGE, _this.setup, _this);\r\n\t return _this;\r\n\t }\r\n\t GameView.prototype.setup = function () {\r\n\t this.selectimg = new engine.Image(getTextureByName(\"选中框\"));\r\n\t this.selectimg.mouseEnabled = false;\r\n\t var row = MapData.row;\r\n\t var col = MapData.col;\r\n\t this.homeimg = new engine.Image(getTextureByName(\"房子\"));\r\n\t this.addChild(this.homeimg);\r\n\t this.homeimg.x = this.homex;\r\n\t this.container = new engine.Container();\r\n\t this.addChild(this.container);\r\n\t this.container.y = this.conty;\r\n\t this.anicontainer = new engine.Container();\r\n\t this.addChild(this.anicontainer);\r\n\t this.anicontainer.mouseEnabled = false;\r\n\t this.anicontainer.mouseChildren = false;\r\n\t var map = new engine.Image(getTextureByName(\"底图\"));\r\n\t this.container.addChild(map);\r\n\t for (var r = 0; r < row; r++) {\r\n\t for (var c = 0; c < col; c++) {\r\n\t var rcpos = MapData.getRCPos(r, c);\r\n\t MapData.posData[r + \"_\" + c] = rcpos;\r\n\t }\r\n\t }\r\n\t this.tanix = this.homex + this.homeimg.texture.width / 2;\r\n\t this.taniy = this.homeimg.texture.height / 2;\r\n\t engine.globalEvent.addEventListener(GameEvent.SelectEle, this.selectele, this);\r\n\t this.removeEventListener(engine.Event.ADDED_TO_STAGE, this.setup, this);\r\n\t };\r\n\t GameView.prototype.init = function () {\r\n\t this.initContainer();\r\n\t };\r\n\t GameView.prototype.reset = function () {\r\n\t };\r\n\t GameView.prototype.start = function () {\r\n\t };\r\n\t GameView.prototype.initContainer = function () {\r\n\t this.lattices = {};\r\n\t var testdata = [\r\n\t [1, 2, 5, 3, 4],\r\n\t [3, 1, 2, 4, 5],\r\n\t [2, 5, 3, 4, 1],\r\n\t [5, 4, 1, 2, 3],\r\n\t [4, 1, 3, 5, 2],\r\n\t ];\r\n\t for (var r = 0; r < testdata.length; r++) {\r\n\t var rdata = testdata[r];\r\n\t for (var c = 0; c < rdata.length; c++) {\r\n\t var rctype = rdata[c];\r\n\t var rcele = MapData.getOneEle(rctype);\r\n\t var rcpos = MapData.getRCPos(r, c);\r\n\t this.container.addChild(rcele);\r\n\t rcele.x = rcpos[0];\r\n\t rcele.y = rcpos[1];\r\n\t var rcidx = r + \"_\" + c;\r\n\t this.lattices[rcidx] = rcele.name;\r\n\t this.setLatticeEleRc(rcidx);\r\n\t }\r\n\t }\r\n\t this.checkEliminate();\r\n\t };\r\n\t GameView.prototype.setLatticeEleRc = function (rcidx) {\r\n\t var rename = this.lattices[rcidx];\r\n\t var rcnode = this.container.getChildByName(rename);\r\n\t var er = Number(rcidx.split(\"_\")[0]);\r\n\t var ec = Number(rcidx.split(\"_\")[1]);\r\n\t rcnode.setrc(er, ec);\r\n\t };\r\n\t GameView.prototype.selectele = function (e) {\r\n\t var data = e.data;\r\n\t var sr = data.r;\r\n\t var sc = data.c;\r\n\t var sname = sr + \"_\" + sc;\r\n\t if (this.selectArr.length == 0) {\r\n\t this.selectArr.push(sname);\r\n\t }\r\n\t else if (this.selectArr.length == 1) {\r\n\t var aselect = this.selectArr[0];\r\n\t var asr = aselect.split(\"_\")[0];\r\n\t var asc = aselect.split(\"_\")[1];\r\n\t if ((sr == asr && Math.abs(sc - asc) == 1) || (sc == asc && Math.abs(sr - asr) == 1)) {\r\n\t this.selectArr.push(sname);\r\n\t }\r\n\t else {\r\n\t this.selectArr[0] = sname;\r\n\t }\r\n\t }\r\n\t if (this.selectArr.length == 1) {\r\n\t this.setSelectShow();\r\n\t }\r\n\t else if (this.selectArr.length == 2) {\r\n\t this.changeElePos();\r\n\t }\r\n\t };\r\n\t GameView.prototype.setSelectShow = function () {\r\n\t var rcname = this.selectArr[0];\r\n\t var r = rcname.split(\"_\")[0];\r\n\t var c = rcname.split(\"_\")[1];\r\n\t var rcpos = MapData.getRCPos(r, c);\r\n\t this.container.addChild(this.selectimg);\r\n\t this.selectimg.x = rcpos[0];\r\n\t this.selectimg.y = rcpos[1];\r\n\t };\r\n\t GameView.prototype.changeElePos = function () {\r\n\t var _this = this;\r\n\t this.container.removeChild(this.selectimg);\r\n\t this.changeEnable(false);\r\n\t var sname1 = this.selectArr[0];\r\n\t var sname2 = this.selectArr[1];\r\n\t var sename1 = this.lattices[sname1];\r\n\t var sename2 = this.lattices[sname2];\r\n\t this.lattices[sname1] = sename2;\r\n\t this.lattices[sname2] = sename1;\r\n\t this.setLatticeEleRc(sname1);\r\n\t this.setLatticeEleRc(sname2);\r\n\t this.checkEliminate();\r\n\t var snode1 = this.container.getChildByName(sename1);\r\n\t var snode2 = this.container.getChildByName(sename2);\r\n\t var snode1x = snode1.x;\r\n\t var snode1y = snode1.y;\r\n\t var snode2x = snode2.x;\r\n\t var snode2y = snode2.y;\r\n\t var changetime = Math.ceil((MapData.itemsize / this.anispeed) * 2 * 1000);\r\n\t if (this.eliminateArr.length > 0) {\r\n\t engine.Tween.get(snode1).to({\r\n\t x: snode2x,\r\n\t y: snode2y\r\n\t }, changetime);\r\n\t engine.Tween.get(snode2).to({\r\n\t x: snode1x,\r\n\t y: snode1y\r\n\t }, changetime)\r\n\t .call(function () {\r\n\t _this.eliminate();\r\n\t });\r\n\t }\r\n\t else {\r\n\t engine.Tween.get(snode1).to({\r\n\t x: snode2x,\r\n\t y: snode2y\r\n\t }, changetime)\r\n\t .wait(100)\r\n\t .to({\r\n\t x: snode1x,\r\n\t y: snode1y\r\n\t }, changetime);\r\n\t engine.Tween.get(snode2).to({\r\n\t x: snode1x,\r\n\t y: snode1y\r\n\t }, changetime)\r\n\t .wait(100)\r\n\t .to({\r\n\t x: snode2x,\r\n\t y: snode2y\r\n\t }, changetime)\r\n\t .call(function () {\r\n\t _this.lattices[sname1] = sename1;\r\n\t _this.lattices[sname2] = sename2;\r\n\t _this.setLatticeEleRc(sname1);\r\n\t _this.setLatticeEleRc(sname2);\r\n\t _this.selectArr = new Array();\r\n\t _this.changeEnable(true);\r\n\t });\r\n\t }\r\n\t };\r\n\t GameView.prototype.eliminate = function () {\r\n\t for (var i = 0; i < this.eliminateArr.length; i++) {\r\n\t var ielidata = this.eliminateArr[i];\r\n\t var ielidxname = ielidata.idxname;\r\n\t var ielitype = ielidata.type;\r\n\t var ieliname = this.lattices[ielidxname];\r\n\t var ielinode = this.container.getChildByName(ieliname);\r\n\t var ielix = ielinode.x;\r\n\t var ieliy = ielinode.y;\r\n\t this.container.removeChild(ielinode);\r\n\t this.lattices[ielidxname] = \"empty\";\r\n\t this.goHomeAni(ielitype, ielix, ieliy);\r\n\t }\r\n\t this.fall();\r\n\t };\r\n\t GameView.prototype.fall = function () {\r\n\t return tslib.__awaiter(this, void 0, void 0, function () {\r\n\t var fallData, fcutr, fc, r, c, idxname, elename, frcname, fetype, fele, cutr, fepos, fallPromise, _loop_1, this_1, f;\r\n\t return tslib.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t fallData = new Array();\r\n\t fcutr = new Array();\r\n\t for (fc = 0; fc < MapData.col; fc++) {\r\n\t fcutr.push(-1);\r\n\t }\r\n\t for (r = MapData.row - 1; r > -1; r--) {\r\n\t for (c = MapData.col - 1; c > -1; c--) {\r\n\t idxname = r + \"_\" + c;\r\n\t elename = this.lattices[idxname];\r\n\t if (elename == \"empty\") {\r\n\t frcname = this.getFallRcEle(r, c);\r\n\t if (!frcname) {\r\n\t fetype = MapData.getRandEtype();\r\n\t fele = MapData.getOneEle(fetype);\r\n\t cutr = fcutr[c];\r\n\t fepos = MapData.getRCPos(cutr, c);\r\n\t fcutr[c] = cutr - 1;\r\n\t this.container.addChild(fele);\r\n\t fele.x = fepos[0];\r\n\t fele.y = fepos[1];\r\n\t frcname = fele.name;\r\n\t }\r\n\t this.lattices[idxname] = frcname;\r\n\t this.setLatticeEleRc(idxname);\r\n\t fallData.push({\r\n\t rcname: frcname,\r\n\t trow: r,\r\n\t tcol: c\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t fallPromise = new Array();\r\n\t _loop_1 = function (f) {\r\n\t var fdata = fallData[f];\r\n\t var frcname = fdata.rcname;\r\n\t var ftrow = fdata.trow;\r\n\t var ftcol = fdata.tcol;\r\n\t var ftpos = MapData.getRCPos(ftrow, ftcol);\r\n\t var frcnode = this_1.container.getChildByName(frcname);\r\n\t var nepos = [frcnode.x, frcnode.y];\r\n\t var fdis = MapData.getDistance(ftpos, nepos);\r\n\t var ftime = Math.ceil((fdis / this_1.anispeed) * 1000);\r\n\t var ifallpromise = new Promise(function (res) {\r\n\t engine.Tween.get(frcnode)\r\n\t .to({\r\n\t x: ftpos[0],\r\n\t y: ftpos[1]\r\n\t }, ftime).call(function () {\r\n\t res();\r\n\t });\r\n\t });\r\n\t fallPromise.push(ifallpromise);\r\n\t };\r\n\t this_1 = this;\r\n\t for (f = 0; f < fallData.length; f++) {\r\n\t _loop_1(f);\r\n\t }\r\n\t return [4, Promise.all(fallPromise)];\r\n\t case 1:\r\n\t _a.sent();\r\n\t this.checkEliminate();\r\n\t if (this.eliminateArr.length > 0) {\r\n\t return [2, this.eliminate()];\r\n\t }\r\n\t else {\r\n\t this.selectArr = new Array();\r\n\t this.changeEnable(true);\r\n\t }\r\n\t return [2];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t GameView.prototype.goHomeAni = function (ielitype, ielix, ieliy) {\r\n\t var aniele = MapData.getOneEle(ielitype);\r\n\t aniele.touch = false;\r\n\t var anix = ielix;\r\n\t var aniy = ieliy + this.conty;\r\n\t this.anicontainer.addChild(aniele);\r\n\t aniele.x = anix;\r\n\t aniele.y = aniy;\r\n\t var anidis = MapData.getDistance([this.tanix, this.taniy], [anix, aniy]);\r\n\t var anitime = Math.ceil((anidis / this.anispeed) * 1000);\r\n\t engine.Tween.get(aniele)\r\n\t .to({\r\n\t x: this.tanix,\r\n\t y: this.taniy,\r\n\t scaleX: 0,\r\n\t scaleY: 0\r\n\t }, anitime);\r\n\t };\r\n\t GameView.prototype.changeEnable = function (v) {\r\n\t for (var key in this.lattices) {\r\n\t var kname = this.lattices[key];\r\n\t var ele = this.container.getChildByName(kname);\r\n\t ele.touch = v;\r\n\t }\r\n\t };\r\n\t GameView.prototype.attionEliminate = function () {\r\n\t };\r\n\t GameView.prototype.checkEliminate = function () {\r\n\t this.eliminateArr = new Array();\r\n\t for (var r = MapData.row - 1; r > -1; r--) {\r\n\t for (var c = MapData.col - 1; c > -1; c--) {\r\n\t var edata = this.getEliminate(r, c);\r\n\t if (edata) {\r\n\t var etype = edata.etype;\r\n\t var earr = edata.arr;\r\n\t this.checkAddEli(etype, earr);\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\t GameView.prototype.getEliminate = function (x, y) {\r\n\t var checktype = this.getEleTypeByRc(x, y);\r\n\t var relearr = new Array();\r\n\t relearr.push(x + \"_\" + y);\r\n\t for (var r = x - 1; r > -1; r--) {\r\n\t var reletype = this.getEleTypeByRc(r, y);\r\n\t if (checktype == reletype) {\r\n\t relearr.push(r + \"_\" + y);\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\t }\r\n\t var celearr = new Array();\r\n\t celearr.push(x + \"_\" + y);\r\n\t for (var c = y - 1; c > -1; c--) {\r\n\t var celetype = this.getEleTypeByRc(x, c);\r\n\t if (checktype == celetype) {\r\n\t celearr.push(x + \"_\" + c);\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\t }\r\n\t var eliminatearr = new Array();\r\n\t if (relearr.length >= 3) {\r\n\t eliminatearr.push.apply(eliminatearr, relearr);\r\n\t }\r\n\t if (celearr.length >= 3) {\r\n\t eliminatearr.push.apply(eliminatearr, celearr);\r\n\t }\r\n\t if (eliminatearr.length > 0) {\r\n\t return {\r\n\t etype: checktype,\r\n\t arr: eliminatearr\r\n\t };\r\n\t }\r\n\t else {\r\n\t return false;\r\n\t }\r\n\t };\r\n\t GameView.prototype.getEleTypeByRc = function (r, c) {\r\n\t var rc = r + \"_\" + c;\r\n\t var elename = this.lattices[rc];\r\n\t var ele = this.container.getChildByName(elename);\r\n\t var eletype = ele.type;\r\n\t return eletype;\r\n\t };\r\n\t GameView.prototype.checkAddEli = function (etype, earr) {\r\n\t for (var e = 0; e < earr.length; e++) {\r\n\t var ename = earr[e];\r\n\t var needadd = true;\r\n\t for (var i = 0; i < this.eliminateArr.length; i++) {\r\n\t var ielidata = this.eliminateArr[i];\r\n\t var ielidxname = ielidata.idxname;\r\n\t if (ielidxname == ename) {\r\n\t needadd = false;\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (needadd) {\r\n\t this.eliminateArr.push({\r\n\t idxname: ename,\r\n\t type: etype\r\n\t });\r\n\t }\r\n\t }\r\n\t };\r\n\t GameView.prototype.getFallRcEle = function (r, c) {\r\n\t for (var fr = r - 1; fr > -1; fr--) {\r\n\t var frc = fr + \"_\" + c;\r\n\t var frcname = this.lattices[frc];\r\n\t if (frcname != \"empty\") {\r\n\t this.lattices[frc] = \"empty\";\r\n\t return frcname;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t return GameView;\r\n\t}(engine.Container));\r\n\t//# sourceMappingURL=GameView.js.map\n\n\tvar GameWrapper = (function (_super) {\r\n\t tslib.__extends(GameWrapper, _super);\r\n\t function GameWrapper() {\r\n\t var _this = _super.call(this) || this;\r\n\t _this._gameView = new GameView();\r\n\t _this.addChild(_this._gameView);\r\n\t engine.globalEvent.addEventListener('game-init', _this.init, _this);\r\n\t engine.globalEvent.addEventListener('game-reset', _this.reset, _this);\r\n\t engine.globalEvent.addEventListener('game-start', _this.start, _this);\r\n\t return _this;\r\n\t }\r\n\t GameWrapper.prototype.init = function () {\r\n\t this._gameView.init();\r\n\t };\r\n\t GameWrapper.prototype.reset = function () {\r\n\t this._gameView.reset();\r\n\t };\r\n\t GameWrapper.prototype.start = function () {\r\n\t this._gameView.start();\r\n\t };\r\n\t return GameWrapper;\r\n\t}(engine.Container));\r\n\t//# sourceMappingURL=GameWrapper.js.map\n\n\tvar props = {};\r\n\tfunction prepareProps() {\r\n\t var metaProps = getProps();\r\n\t engine.injectProp(props, metaProps);\r\n\t}\r\n\tfunction injectProps(p) {\r\n\t engine.injectProp(props, p);\r\n\t}\r\n\t//# sourceMappingURL=props.js.map\n\n\tfunction index (props) {\r\n\t prepareProps();\r\n\t injectProps(props);\r\n\t var instance = new GameWrapper();\r\n\t return instance;\r\n\t}\r\n\t//# sourceMappingURL=index.js.map\n\n\treturn index;\n\n})));\n"
}
......@@ -97,19 +97,19 @@
"assets": [
{
"name": "bg1",
"url": "//yun.duiba.com.cn/aurora/assets/b2c76b2a753317e5ea935bab22097a43a4c9f7cb.png",
"url": "//yun.duiba.com.cn/aurora/assets/e6ab7c1e191d30a2b068fa4a0e867040b9396226.png",
"uuid": "bg1",
"ext": ".png"
},
{
"name": "bg2",
"url": "//yun.duiba.com.cn/aurora/assets/7f8261a9dd7b83cdc3b95b6f3f385e7a91e49682.png",
"url": "//yun.duiba.com.cn/aurora/assets/a2d611fa5af2b26ffd57a24ff524d2a0a4fe1564.png",
"uuid": "bg2",
"ext": ".png"
},
{
"name": "bg3",
"url": "//yun.duiba.com.cn/aurora/assets/872c688f9c2f495fe234277256923804df2ab75e.png",
"url": "//yun.duiba.com.cn/aurora/assets/89258aed59e36471a4136ce7fbc4ca7e300caf07.png",
"uuid": "bg3",
"ext": ".png"
},
......@@ -121,13 +121,13 @@
},
{
"name": "yindao1",
"url": "//yun.duiba.com.cn/aurora/assets/f21d5429dbd947e66613bd6c5d864fdcfd104bd4.png",
"url": "//yun.duiba.com.cn/aurora/assets/4449285320882460ae0dd0b59b3c73e0bb92def6.png",
"uuid": "yindao1",
"ext": ".png"
},
{
"name": "yindao2",
"url": "//yun.duiba.com.cn/aurora/assets/7ece2d8c438ec06004f7f40d9798ab72f0e6a244.png",
"url": "//yun.duiba.com.cn/aurora/assets/1c914031834736b93e9b2a94a4e8a643871795f7.png",
"uuid": "yindao2",
"ext": ".png"
},
......
......@@ -2,7 +2,7 @@
* Created by renjianfeng on 2020-03-13.
*/
const customId = 'food-fell';
const customId = 'xiaoxiaole';
(async function () {
let customModule = await fetch(`../meta.json`);
......@@ -45,23 +45,9 @@ function launchWithCustomModule(customModule) {
}, 100);
setTimeout(() => {
engine.globalEvent.dispatchEvent('food-fell-reset', {
"goodsProbability": [0.8,0.1,0.1],
"countDown": 30,
"acceleratedSpeed":0.1
});
engine.globalEvent.dispatchEvent('food-fell-start');
engine.globalEvent.dispatchEvent('game-init');
}, 500);
});
engine.globalEvent.addEventListener('food-fell-time-update', (e) => {
console.log(e.type, e.data);
});
engine.globalEvent.addEventListener('food-fell-score-update', (e) => {
console.log(e.type, e.data);
});
engine.globalEvent.addEventListener('food-fell-game-over', (e) => {
console.log(e.type, e.data);
});
}
function getAssetByUUID(uuid) {
......
......@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<title>美食从天而降</title>
<title>消消乐</title>
<meta name="viewport"
content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
......@@ -22,7 +22,7 @@
height: 100%;
overflow: hidden;
position: absolute;
background-color: red;
/* background-color: red; */
}
</style>
</head>
......
"use strict";var tslib=require("tslib"),props={};function prepareProps(){var e=getProps();engine.injectProp(props,e)}function injectProps(e){engine.injectProp(props,e)}function getTexture(e){return engine.Texture.from(getAssetByUUID(e).uuid)}function getTextureByName(e){return getTexture(engine.getAssetByName(e).uuid)}function createSvga(e,t){var o=new svga.Svga;return o.source="asset://"+engine.getAssetByName(e).uuid,o}var Goods=function(s){function e(){var e,t=s.call(this)||this;e=t._body=new engine.Rect;var o=new engine.Sprite(getTextureByName("雨滴"));o.npcType="rain";var n=new engine.Sprite(getTextureByName("石块"));n.npcType="stone";var i=new engine.Sprite(getTextureByName("炸弹"));return i.npcType="boom",o.visible=!1,n.visible=!1,i.visible=!1,e.addChild(o),e.addChild(n),e.addChild(i),t.addChild(e),e.width=1e-4,e.height=1e-4,e.mouseEnabled=!1,t}return tslib.__extends(e,s),e.prototype.getRandomNumberByRange=function(e,t){return Math.floor(Math.random()*(t-e)+e)},e.prototype.reset=function(){this.visible=!0,this.rotation=0,this.anchorOffsetY=0,this.y=0,this.x=630*Math.random()+30,this.rotation=0;var e=Math.random();e<props.goodsProbability[0]?this.showNpc("rain"):e>=props.goodsProbability[0]&&e<=props.goodsProbability[0]+props.goodsProbability[1]?this.showNpc("stone"):e>props.goodsProbability[0]+props.goodsProbability[1]&&this.showNpc("boom")},e.prototype.showNpc=function(e){for(var t=0;t<this._body.children.length;t++)this._body.children[t].visible=!1,this._body.children[t].mouseEnabled=!1;for(t=0;t<this._body.children.length;t++)this._body.children[t].npcType==e&&(this.npcType=e,this._body.children[t].visible=!0,this._body.children[t].mouseEnabled=!1)},Object.defineProperty(e.prototype,"anchorOffsetY",{set:function(e){this._body.y=e},enumerable:!0,configurable:!0}),e}(engine.Container),ObjectPool=engine.ObjectPool,PoolName="goods";ObjectPool.registerPool(PoolName,function(){return new Goods},function(e,t){e.reset()});var ObjectPool$1=engine.ObjectPool,GameView=function(e){function t(){var t=e.call(this)||this;return t.goodsItems=[],t.moveCatchX=0,t.playerCatchX=0,t.onDownStage=function(e){t.moveCatchX=e.localX,t.playerCatchX=t.player.x},t.onMoveStage=function(e){t.gameIng&&(t.player.x=t.playerCatchX+(e.localX-t.moveCatchX))},t.onOutStage=function(e){t.moveCatchX=0},t.once(engine.Event.ADDED_TO_STAGE,t.setup,t),t}return tslib.__extends(t,e),t.prototype.setup=function(){var e=this;this._hasSetup||(this._hasSetup=!0,this.NpcBg=new engine.Container,this.NpcBg.alpha=1,this.NpcBg.width=0,this.NpcBg.height=0,this.addChild(this.NpcBg),this.player=new engine.Container,this.player.mouseEnabled=!1,this.addChild(this.player),this.waterSvga=createSvga("水花"),this.playerSvga=createSvga("玩家"),this.boomSvga=createSvga("炸弹svga"),this.player.addChild(this.playerSvga),this.player.addChild(this.waterSvga),this.player.addChild(this.boomSvga),this.playerSvga.gotoAndPlay(1),this.visible=!1,setTimeout(function(){e.visible=!0,e.player.anchorY=e.player.height/2,e.player.anchorX=e.player.width/2,console.log(e.player.width),console.log(e.playerSvga.width),e.player.x=375-e.player.width/2,e.player.y=props.playerPositionY},300),this.rectBg=new engine.Rect,this.rectBg.alpha=0,this.rectBg.width=750,this.rectBg.height=1624,this.addChild(this.rectBg),this.rectBg.addEventListener(engine.MouseEvent.MOUSE_DOWN,this.onDownStage,this),this.rectBg.addEventListener(engine.MouseEvent.MOUSE_MOVE,this.onMoveStage,this),this.rectBg.addEventListener(engine.MouseEvent.MOUSE_OUT,this.onOutStage,this))},t.prototype.reset=function(){this.recycleGoods()},t.prototype.start=function(){var e=this;this.score=0,this.speed=1,this.gameIng=!0,this.creatNpc(),this.beginNpc(),this.countdown=props.countDown,this.countdownTimer=setInterval(function(){e.gameIng&&(0<e.countdown?(engine.globalEvent.dispatchEvent("food-fell-time-update",{time:e.countdown}),e.countdown-=1):(engine.globalEvent.dispatchEvent("food-fell-game-over",{score:e.score,reason:1}),e.died()))},1e3)},t.prototype.beginNpc=function(){var e=this;this.timer=setTimeout(function(){e.gameIng&&(e.speed+=props.acceleratedSpeed,e.creatNpc()),e.beginNpc()},2e3/this.speed)},t.prototype.pause=function(){this.gameIng=!1},t.prototype.revive=function(){this.gameIng=!0},t.prototype.resume=function(){this.reset(),this.start()},t.prototype.creatNpc=function(){var e=this,t=this._goods=ObjectPool$1.getObject(PoolName);this.goodsItems.push(t),this.NpcBg.addChild(t),t.addEventListener(engine.Event.ENTER_FRAME,t.onGoodsEnter=function(){1624<t.y?e.removeNpc(t):e.gameIng&&(t.y+=4*e.speed,e.hasHit(e.player,t)&&("rain"==t.npcType?(console.log("碰到雨滴"),e.score+=props.rainScore,e.waterSvga.visible=!0,e.waterSvga.play(!1,!1),e.waterSvga.once(engine.Event.END_FRAME,function(){e.waterSvga.visible=!1},e)):"stone"==t.npcType?(console.log("碰到石头"),e.score+=props.stoneScore):"boom"==t.npcType&&(console.log("碰到炸弹"),e.boomSvga.visible=!0,e.boomSvga.play(!1,!1),e.boomSvga.once(engine.Event.END_FRAME,function(){e.boomSvga.visible=!1},e),engine.globalEvent.dispatchEvent("food-fell-game-over",{score:e.score,reason:2}),e.died()),engine.globalEvent.dispatchEvent("food-fell-score-update",{score:e.score}),e.removeNpc(t)))},this)},t.prototype.died=function(){this.score=0,this.pause()},t.prototype.removeNpc=function(e){this.NpcBg.removeChild(e),ObjectPool$1.recycleObject(PoolName,e),e.removeEventListener(engine.Event.ENTER_FRAME,e.onGoodsEnter,this);var t=this.goodsItems.indexOf(e);-1<t&&this.goodsItems.splice(t,1)},t.prototype.recycleGoods=function(){clearTimeout(this.timer),clearInterval(this.countdownTimer);for(var e=0,t=this.goodsItems;e<t.length;e++){var o=t[e];o&&(this.removeChild(o),ObjectPool$1.recycleObject(PoolName,o),o.removeEventListener(engine.Event.ENTER_FRAME,o.onGoodsEnter,this))}this.goodsItems=[]},t.prototype.hasHit=function(e,t){return Math.abs(e.x+e.width/2-(t.x+t.width/2))<e.width/2+t.width/2&&Math.abs(e.y+e.height/2-(t.y+t.height/2))<e.height/2+t.height/2},t}(engine.Container),GameWrapper=function(o){function e(){var e=o.call(this)||this;engine.globalEvent.addEventListener("food-fell-reset",e.reset,e),engine.globalEvent.addEventListener("food-fell-start",e.start,e),engine.globalEvent.addEventListener("food-fell-pause",e.pause,e),engine.globalEvent.addEventListener("food-fell-resume",e.resume,e),engine.globalEvent.addEventListener("food-fell-revive",e.revive,e),engine.globalEvent.addEventListener("food-fell-clear",e.clear,e),e.addEventListener(engine.MouseEvent.CLICK,e.onTap,e);var t=e._gameView=new GameView;return e.addChild(t),e}return tslib.__extends(e,o),e.prototype.reset=function(e){injectProps(e.data),this._gameView.visible=!0,this._gameView.reset()},e.prototype.start=function(e){injectProps(e.data),this._status=1,this._gameView.start()},e.prototype.pause=function(){this._gameView.pause()},e.prototype.resume=function(){this._gameView.resume()},e.prototype.revive=function(){this._gameView.revive()},e.prototype.clear=function(){this._gameView.visible=!1},e.prototype.onTap=function(e){},e}(engine.Container);function index(e){return prepareProps(),injectProps(e),new GameWrapper}module.exports=index;
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('tslib')) :
typeof define === 'function' && define.amd ? define(['tslib'], factory) :
(global = global || self, global.xiaoxiaole = factory(global.tslib));
}(this, (function (tslib) { 'use strict';
function getTexture(uuid) {
return engine.Texture.from(getAssetByUUID(uuid).uuid);
}
function getTextureByName(name) {
return getTexture(engine.getAssetByName(name).uuid);
}
//# sourceMappingURL=utils.js.map
var Element = (function (_super) {
tslib.__extends(Element, _super);
function Element() {
var _this = _super.call(this) || this;
_this.width = MapData.itemsize;
_this.height = MapData.itemsize;
_this.eimage = new engine.Image();
_this.addChild(_this.eimage);
_this.touch = true;
_this.addEventListener(engine.MouseEvent.CLICK, _this.selectele, _this);
return _this;
}
Object.defineProperty(Element.prototype, "touch", {
set: function (touch) {
this.mouseEnabled = touch;
this.mouseChildren = touch;
},
enumerable: true,
configurable: true
});
Element.prototype.init = function (type) {
this.scaleX = 1;
this.scaleY = 1;
this.type = type;
var ename = MapData.getEtypeImgName(type);
this.eimage.texture = getTextureByName(ename);
var imgwid = this.eimage.texture.width;
var imghei = this.eimage.texture.height;
this.eimage.x = (this.width - imgwid) / 2;
this.eimage.y = (this.height - imghei) / 2;
};
Element.prototype.setrc = function (r, c) {
this.inrow = r;
this.incol = c;
};
Element.prototype.selectele = function (e) {
engine.globalEvent.dispatchEvent(GameEvent.SelectEle, {
r: this.inrow,
c: this.incol
});
};
Element.prototype.flyToHome = function () {
};
Element.prototype.changePos = function () {
};
return Element;
}(engine.Container));
//# sourceMappingURL=Element.js.map
var ElementType;
(function (ElementType) {
ElementType[ElementType["btiger"] = 1] = "btiger";
ElementType[ElementType["gtiger"] = 2] = "gtiger";
ElementType[ElementType["monkey"] = 3] = "monkey";
ElementType[ElementType["bird"] = 4] = "bird";
ElementType[ElementType["koala"] = 5] = "koala";
})(ElementType || (ElementType = {}));
var GameEvent;
(function (GameEvent) {
GameEvent["SelectEle"] = "SelectEle";
})(GameEvent || (GameEvent = {}));
var MapData = (function () {
function MapData() {
}
MapData.getRy = function (r) {
return this.paddingb + r * (this.itemsize + this.paddingi);
};
MapData.getCx = function (c) {
return this.paddingb + c * (this.itemsize + this.paddingi);
};
MapData.getRCPos = function (r, c) {
var x = this.getCx(c);
var y = this.getRy(r);
return [x, y];
};
MapData.adaptElePos = function (pos, wid, hei) {
var x = pos[0] + (this.itemsize - wid) / 2;
var y = pos[1] + (this.itemsize - hei) / 2;
return [x, y];
};
MapData.getEtypeImgName = function (type) {
var ename;
switch (type) {
case ElementType.btiger:
ename = "白虎";
break;
case ElementType.gtiger:
ename = "雌虎";
break;
case ElementType.monkey:
ename = "猴子";
break;
case ElementType.bird:
ename = "鸟";
break;
case ElementType.koala:
ename = "树熊";
break;
default:
console.error("未定义元素类型");
break;
}
return ename;
};
MapData.getRandEtype = function () {
var eletypeArr = [ElementType.btiger, ElementType.gtiger, ElementType.monkey, ElementType.bird, ElementType.koala];
var etype = eletypeArr[Math.floor(Math.random() * eletypeArr.length)];
return etype;
};
MapData.getOneEle = function (type) {
var ele;
if (this.elePool.length > 0) {
ele = this.elePool.shift();
}
else {
ele = new Element();
}
ele.name = "ele_" + this.eleidx;
this.eleidx += 1;
ele.init(type);
return ele;
};
MapData.recoverEle = function (ele) {
this.elePool.push(ele);
};
MapData.getDistance = function (p1, p2) {
var p1x = p1[0];
var p1y = p1[1];
var p2x = p2[0];
var p2y = p2[1];
var dis = Math.sqrt(Math.pow(p1x - p2x, 2) + Math.pow(p1y - p2y, 2));
return dis;
};
MapData.itemsize = 129;
MapData.paddingb = 10;
MapData.paddingi = 5;
MapData.row = 5;
MapData.col = 5;
MapData.posData = {};
MapData.eleidx = 1;
MapData.elePool = [];
return MapData;
}());
//# sourceMappingURL=MapData.js.map
var GameView = (function (_super) {
tslib.__extends(GameView, _super);
function GameView() {
var _this = _super.call(this) || this;
_this.lattices = {};
_this.eliminateArr = [];
_this.selectArr = [];
_this.conty = 140;
_this.homex = 528;
_this.anispeed = 860;
_this.once(engine.Event.ADDED_TO_STAGE, _this.setup, _this);
return _this;
}
GameView.prototype.setup = function () {
this.selectimg = new engine.Image(getTextureByName("选中框"));
this.selectimg.mouseEnabled = false;
var row = MapData.row;
var col = MapData.col;
this.homeimg = new engine.Image(getTextureByName("房子"));
this.addChild(this.homeimg);
this.homeimg.x = this.homex;
this.container = new engine.Container();
this.addChild(this.container);
this.container.y = this.conty;
this.anicontainer = new engine.Container();
this.addChild(this.anicontainer);
this.anicontainer.mouseEnabled = false;
this.anicontainer.mouseChildren = false;
var map = new engine.Image(getTextureByName("底图"));
this.container.addChild(map);
for (var r = 0; r < row; r++) {
for (var c = 0; c < col; c++) {
var rcpos = MapData.getRCPos(r, c);
MapData.posData[r + "_" + c] = rcpos;
}
}
this.tanix = this.homex + this.homeimg.texture.width / 2;
this.taniy = this.homeimg.texture.height / 2;
engine.globalEvent.addEventListener(GameEvent.SelectEle, this.selectele, this);
this.removeEventListener(engine.Event.ADDED_TO_STAGE, this.setup, this);
};
GameView.prototype.init = function () {
this.initContainer();
};
GameView.prototype.reset = function () {
};
GameView.prototype.start = function () {
};
GameView.prototype.initContainer = function () {
this.lattices = {};
var testdata = [
[1, 2, 5, 3, 4],
[3, 1, 2, 4, 5],
[2, 5, 3, 4, 1],
[5, 4, 1, 2, 3],
[4, 1, 3, 5, 2],
];
for (var r = 0; r < testdata.length; r++) {
var rdata = testdata[r];
for (var c = 0; c < rdata.length; c++) {
var rctype = rdata[c];
var rcele = MapData.getOneEle(rctype);
var rcpos = MapData.getRCPos(r, c);
this.container.addChild(rcele);
rcele.x = rcpos[0];
rcele.y = rcpos[1];
var rcidx = r + "_" + c;
this.lattices[rcidx] = rcele.name;
this.setLatticeEleRc(rcidx);
}
}
this.checkEliminate();
};
GameView.prototype.setLatticeEleRc = function (rcidx) {
var rename = this.lattices[rcidx];
var rcnode = this.container.getChildByName(rename);
var er = Number(rcidx.split("_")[0]);
var ec = Number(rcidx.split("_")[1]);
rcnode.setrc(er, ec);
};
GameView.prototype.selectele = function (e) {
var data = e.data;
var sr = data.r;
var sc = data.c;
var sname = sr + "_" + sc;
if (this.selectArr.length == 0) {
this.selectArr.push(sname);
}
else if (this.selectArr.length == 1) {
var aselect = this.selectArr[0];
var asr = aselect.split("_")[0];
var asc = aselect.split("_")[1];
if ((sr == asr && Math.abs(sc - asc) == 1) || (sc == asc && Math.abs(sr - asr) == 1)) {
this.selectArr.push(sname);
}
else {
this.selectArr[0] = sname;
}
}
if (this.selectArr.length == 1) {
this.setSelectShow();
}
else if (this.selectArr.length == 2) {
this.changeElePos();
}
};
GameView.prototype.setSelectShow = function () {
var rcname = this.selectArr[0];
var r = rcname.split("_")[0];
var c = rcname.split("_")[1];
var rcpos = MapData.getRCPos(r, c);
this.container.addChild(this.selectimg);
this.selectimg.x = rcpos[0];
this.selectimg.y = rcpos[1];
};
GameView.prototype.changeElePos = function () {
var _this = this;
this.container.removeChild(this.selectimg);
this.changeEnable(false);
var sname1 = this.selectArr[0];
var sname2 = this.selectArr[1];
var sename1 = this.lattices[sname1];
var sename2 = this.lattices[sname2];
this.lattices[sname1] = sename2;
this.lattices[sname2] = sename1;
this.setLatticeEleRc(sname1);
this.setLatticeEleRc(sname2);
this.checkEliminate();
var snode1 = this.container.getChildByName(sename1);
var snode2 = this.container.getChildByName(sename2);
var snode1x = snode1.x;
var snode1y = snode1.y;
var snode2x = snode2.x;
var snode2y = snode2.y;
var changetime = Math.ceil((MapData.itemsize / this.anispeed) * 2 * 1000);
if (this.eliminateArr.length > 0) {
engine.Tween.get(snode1).to({
x: snode2x,
y: snode2y
}, changetime);
engine.Tween.get(snode2).to({
x: snode1x,
y: snode1y
}, changetime)
.call(function () {
_this.eliminate();
});
}
else {
engine.Tween.get(snode1).to({
x: snode2x,
y: snode2y
}, changetime)
.wait(100)
.to({
x: snode1x,
y: snode1y
}, changetime);
engine.Tween.get(snode2).to({
x: snode1x,
y: snode1y
}, changetime)
.wait(100)
.to({
x: snode2x,
y: snode2y
}, changetime)
.call(function () {
_this.lattices[sname1] = sename1;
_this.lattices[sname2] = sename2;
_this.setLatticeEleRc(sname1);
_this.setLatticeEleRc(sname2);
_this.selectArr = new Array();
_this.changeEnable(true);
});
}
};
GameView.prototype.eliminate = function () {
for (var i = 0; i < this.eliminateArr.length; i++) {
var ielidata = this.eliminateArr[i];
var ielidxname = ielidata.idxname;
var ielitype = ielidata.type;
var ieliname = this.lattices[ielidxname];
var ielinode = this.container.getChildByName(ieliname);
var ielix = ielinode.x;
var ieliy = ielinode.y;
this.container.removeChild(ielinode);
this.lattices[ielidxname] = "empty";
this.goHomeAni(ielitype, ielix, ieliy);
}
this.fall();
};
GameView.prototype.fall = function () {
return tslib.__awaiter(this, void 0, void 0, function () {
var fallData, fcutr, fc, r, c, idxname, elename, frcname, fetype, fele, cutr, fepos, fallPromise, _loop_1, this_1, f;
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
fallData = new Array();
fcutr = new Array();
for (fc = 0; fc < MapData.col; fc++) {
fcutr.push(-1);
}
for (r = MapData.row - 1; r > -1; r--) {
for (c = MapData.col - 1; c > -1; c--) {
idxname = r + "_" + c;
elename = this.lattices[idxname];
if (elename == "empty") {
frcname = this.getFallRcEle(r, c);
if (!frcname) {
fetype = MapData.getRandEtype();
fele = MapData.getOneEle(fetype);
cutr = fcutr[c];
fepos = MapData.getRCPos(cutr, c);
fcutr[c] = cutr - 1;
this.container.addChild(fele);
fele.x = fepos[0];
fele.y = fepos[1];
frcname = fele.name;
}
this.lattices[idxname] = frcname;
this.setLatticeEleRc(idxname);
fallData.push({
rcname: frcname,
trow: r,
tcol: c
});
}
}
}
fallPromise = new Array();
_loop_1 = function (f) {
var fdata = fallData[f];
var frcname = fdata.rcname;
var ftrow = fdata.trow;
var ftcol = fdata.tcol;
var ftpos = MapData.getRCPos(ftrow, ftcol);
var frcnode = this_1.container.getChildByName(frcname);
var nepos = [frcnode.x, frcnode.y];
var fdis = MapData.getDistance(ftpos, nepos);
var ftime = Math.ceil((fdis / this_1.anispeed) * 1000);
var ifallpromise = new Promise(function (res) {
engine.Tween.get(frcnode)
.to({
x: ftpos[0],
y: ftpos[1]
}, ftime).call(function () {
res();
});
});
fallPromise.push(ifallpromise);
};
this_1 = this;
for (f = 0; f < fallData.length; f++) {
_loop_1(f);
}
return [4, Promise.all(fallPromise)];
case 1:
_a.sent();
this.checkEliminate();
if (this.eliminateArr.length > 0) {
return [2, this.eliminate()];
}
else {
this.selectArr = new Array();
this.changeEnable(true);
}
return [2];
}
});
});
};
GameView.prototype.goHomeAni = function (ielitype, ielix, ieliy) {
var aniele = MapData.getOneEle(ielitype);
aniele.touch = false;
var anix = ielix;
var aniy = ieliy + this.conty;
this.anicontainer.addChild(aniele);
aniele.x = anix;
aniele.y = aniy;
var anidis = MapData.getDistance([this.tanix, this.taniy], [anix, aniy]);
var anitime = Math.ceil((anidis / this.anispeed) * 1000);
engine.Tween.get(aniele)
.to({
x: this.tanix,
y: this.taniy,
scaleX: 0,
scaleY: 0
}, anitime);
};
GameView.prototype.changeEnable = function (v) {
for (var key in this.lattices) {
var kname = this.lattices[key];
var ele = this.container.getChildByName(kname);
ele.touch = v;
}
};
GameView.prototype.attionEliminate = function () {
};
GameView.prototype.checkEliminate = function () {
this.eliminateArr = new Array();
for (var r = MapData.row - 1; r > -1; r--) {
for (var c = MapData.col - 1; c > -1; c--) {
var edata = this.getEliminate(r, c);
if (edata) {
var etype = edata.etype;
var earr = edata.arr;
this.checkAddEli(etype, earr);
}
}
}
};
GameView.prototype.getEliminate = function (x, y) {
var checktype = this.getEleTypeByRc(x, y);
var relearr = new Array();
relearr.push(x + "_" + y);
for (var r = x - 1; r > -1; r--) {
var reletype = this.getEleTypeByRc(r, y);
if (checktype == reletype) {
relearr.push(r + "_" + y);
}
else {
break;
}
}
var celearr = new Array();
celearr.push(x + "_" + y);
for (var c = y - 1; c > -1; c--) {
var celetype = this.getEleTypeByRc(x, c);
if (checktype == celetype) {
celearr.push(x + "_" + c);
}
else {
break;
}
}
var eliminatearr = new Array();
if (relearr.length >= 3) {
eliminatearr.push.apply(eliminatearr, relearr);
}
if (celearr.length >= 3) {
eliminatearr.push.apply(eliminatearr, celearr);
}
if (eliminatearr.length > 0) {
return {
etype: checktype,
arr: eliminatearr
};
}
else {
return false;
}
};
GameView.prototype.getEleTypeByRc = function (r, c) {
var rc = r + "_" + c;
var elename = this.lattices[rc];
var ele = this.container.getChildByName(elename);
var eletype = ele.type;
return eletype;
};
GameView.prototype.checkAddEli = function (etype, earr) {
for (var e = 0; e < earr.length; e++) {
var ename = earr[e];
var needadd = true;
for (var i = 0; i < this.eliminateArr.length; i++) {
var ielidata = this.eliminateArr[i];
var ielidxname = ielidata.idxname;
if (ielidxname == ename) {
needadd = false;
break;
}
}
if (needadd) {
this.eliminateArr.push({
idxname: ename,
type: etype
});
}
}
};
GameView.prototype.getFallRcEle = function (r, c) {
for (var fr = r - 1; fr > -1; fr--) {
var frc = fr + "_" + c;
var frcname = this.lattices[frc];
if (frcname != "empty") {
this.lattices[frc] = "empty";
return frcname;
}
}
return false;
};
return GameView;
}(engine.Container));
//# sourceMappingURL=GameView.js.map
var GameWrapper = (function (_super) {
tslib.__extends(GameWrapper, _super);
function GameWrapper() {
var _this = _super.call(this) || this;
_this._gameView = new GameView();
_this.addChild(_this._gameView);
engine.globalEvent.addEventListener('game-init', _this.init, _this);
engine.globalEvent.addEventListener('game-reset', _this.reset, _this);
engine.globalEvent.addEventListener('game-start', _this.start, _this);
return _this;
}
GameWrapper.prototype.init = function () {
this._gameView.init();
};
GameWrapper.prototype.reset = function () {
this._gameView.reset();
};
GameWrapper.prototype.start = function () {
this._gameView.start();
};
return GameWrapper;
}(engine.Container));
//# sourceMappingURL=GameWrapper.js.map
var props = {};
function prepareProps() {
var metaProps = getProps();
engine.injectProp(props, metaProps);
}
function injectProps(p) {
engine.injectProp(props, p);
}
//# sourceMappingURL=props.js.map
function index (props) {
prepareProps();
injectProps(props);
var instance = new GameWrapper();
return instance;
}
//# sourceMappingURL=index.js.map
return index;
})));
//# sourceMappingURL=main.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sources":["src/custom/xiaoxiaole/src/game/utils.ts","src/custom/xiaoxiaole/src/game/ele/Element.ts","src/custom/xiaoxiaole/src/game/MapData.ts","src/custom/xiaoxiaole/src/game/GameView.ts","src/custom/xiaoxiaole/src/game/GameWrapper.ts","src/custom/xiaoxiaole/src/props.ts","src/custom/xiaoxiaole/src/index.ts"],"sourcesContent":["/**\r\n * Created by rockyl on 2020-01-21.\r\n */\r\n\r\nexport function getTexture(uuid) {\r\n\treturn engine.Texture.from(getAssetByUUID(uuid).uuid);\r\n}\r\n\r\nexport function getTextureByName(name) {\r\n\treturn getTexture(engine.getAssetByName(name).uuid);\r\n}\r\n\r\nexport function playSound(name) {\r\n\tengine.playSound(engine.getAssetByName(name).uuid, {keep: true});\r\n}\r\nexport function createSvga(name, anchorName?) {\r\n\tlet inst = new svga.Svga();\r\n\tinst.source = 'asset://' + engine.getAssetByName(name).uuid;\r\n\treturn inst;\r\n}","import MapData, { ElementType, GameEvent } from \"../MapData\";\r\n\r\nimport { getTextureByName } from \"../utils\";\r\nexport default class Element extends engine.Container{\r\n type:ElementType;\r\n eimage:engine.Image;\r\n\r\n inrow;\r\n incol;\r\n set touch(touch){\r\n this.mouseEnabled = touch;\r\n this.mouseChildren = touch;\r\n }\r\n constructor(){\r\n super();\r\n this.width = MapData.itemsize;\r\n this.height = MapData.itemsize;\r\n\r\n this.eimage = new engine.Image();\r\n this.addChild(this.eimage);\r\n this.touch = true;\r\n this.addEventListener(engine.MouseEvent.CLICK,this.selectele,this);\r\n }\r\n init(type:ElementType){\r\n this.scaleX = 1;\r\n this.scaleY = 1;\r\n\r\n this.type = type;\r\n let ename = MapData.getEtypeImgName(type);\r\n this.eimage.texture = getTextureByName(ename);\r\n let imgwid = this.eimage.texture.width;\r\n let imghei = this.eimage.texture.height;\r\n\r\n // console.log(\"大小\",imgwid,imghei);\r\n this.eimage.x = (this.width - imgwid)/2;\r\n this.eimage.y = (this.height-imghei)/2;\r\n\r\n\r\n }\r\n setrc(r,c){\r\n this.inrow = r;\r\n this.incol = c;\r\n }\r\n selectele(e:engine.MouseEvent){\r\n engine.globalEvent.dispatchEvent(GameEvent.SelectEle,{\r\n r:this.inrow,\r\n c:this.incol\r\n })\r\n }\r\n\r\n //飞到小屋\r\n flyToHome(){\r\n \r\n }\r\n\r\n changePos(){\r\n\r\n }\r\n}","import Element from \"./ele/Element\";\r\n\r\nexport enum ElementType{\r\n btiger = 1,\r\n gtiger,\r\n monkey,\r\n bird,\r\n koala\r\n}\r\nexport enum GameEvent{\r\n SelectEle = \"SelectEle\",\r\n\r\n}\r\nexport default class MapData{\r\n //单格大小\r\n\tstatic itemsize = 129;\r\n\t//\r\n\tstatic paddingb = 10;\r\n\tstatic paddingi = 5;\r\n\t//\r\n\tstatic row = 5;\r\n\tstatic col = 5;\r\n //行-列,对应位置\r\n static posData = {\r\n\r\n };\r\n static eleidx = 1;\r\n static elePool = [];\r\n static getRy(r){\r\n return this.paddingb+r*(this.itemsize+this.paddingi);\r\n }\r\n static getCx(c){\r\n return this.paddingb+c*(this.itemsize+this.paddingi);\r\n }\r\n static getRCPos(r,c){\r\n let x = this.getCx(c);\r\n let y = this.getRy(r);\r\n return [x,y];\r\n }\r\n static adaptElePos(pos,wid,hei){\r\n let x = pos[0]+(this.itemsize-wid)/2;\r\n let y = pos[1]+(this.itemsize-hei)/2;\r\n return [x,y];\r\n }\r\n\r\n static getEtypeImgName(type:ElementType){\r\n let ename:string;\r\n switch(type){\r\n case ElementType.btiger:\r\n ename = \"白虎\";\r\n break;\r\n case ElementType.gtiger:\r\n ename = \"雌虎\";\r\n break;\r\n case ElementType.monkey:\r\n ename = \"猴子\";\r\n break;\r\n case ElementType.bird:\r\n ename = \"鸟\";\r\n break;\r\n case ElementType.koala:\r\n ename = \"树熊\";\r\n break;\r\n default:\r\n console.error(\"未定义元素类型\");\r\n break;\r\n }\r\n return ename;\r\n }\r\n\r\n static getRandEtype(){\r\n let eletypeArr = [ElementType.btiger,ElementType.gtiger,ElementType.monkey,ElementType.bird,ElementType.koala];\r\n let etype = eletypeArr[Math.floor(Math.random()*eletypeArr.length)];\r\n return etype;\r\n }\r\n\r\n static getOneEle(type:ElementType):Element{\r\n let ele:Element;\r\n if(this.elePool.length>0){\r\n ele = this.elePool.shift();\r\n }else{\r\n ele = new Element();\r\n }\r\n ele.name = \"ele_\"+this.eleidx;\r\n this.eleidx += 1;\r\n\r\n\r\n ele.init(type)\r\n return ele;\r\n }\r\n static recoverEle(ele:Element){\r\n this.elePool.push(ele);\r\n }\r\n static getDistance(p1,p2){\r\n let p1x = p1[0];\r\n let p1y = p1[1];\r\n \r\n let p2x = p2[0];\r\n let p2y = p2[1];\r\n\r\n let dis = Math.sqrt(Math.pow(p1x-p2x,2)+Math.pow(p1y-p2y,2));\r\n return dis;\r\n }\r\n}","/**\r\n * Created by zjz on 2020/7/10.\r\n */\r\n\r\nimport { props } from \"../props\";\r\nimport { playSound, createSvga } from \"./utils\";\r\nimport ObjectPool = engine.ObjectPool;\r\nimport { getTextureByName } from \"./utils\";\r\nimport MapData, { GameEvent } from \"./MapData\";\r\nimport Element from \"./ele/Element\";\r\n\r\n\r\n\r\nexport default class GameView extends engine.Container {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.once(engine.Event.ADDED_TO_STAGE, this.setup, this);\r\n\t}\r\n\t//元素容器\r\n\tcontainer:engine.Container;\r\n\t//动画层\r\n\tanicontainer:engine.Container;\r\n\r\n\r\n\t//格子,位置-name\r\n\tlattices = {};\r\n\t//一次消除组\r\n\teliminateArr = [];\r\n\t//选中\r\n\tselectArr = [];\r\n\tselectimg:engine.Image;\r\n\r\n\t//屋子\r\n\thomeimg:engine.Image;\r\n\r\n\tconty = 140;\r\n\thomex = 528;\r\n\r\n\ttanix;\r\n\ttaniy;\r\n\tanispeed = 860;\r\n\r\n\tsetup() {\r\n\t\tthis.selectimg = new engine.Image(getTextureByName(\"选中框\"));\r\n\t\tthis.selectimg.mouseEnabled = false;\r\n\r\n\t\tlet row = MapData.row;\r\n\t\tlet col = MapData.col;\r\n\r\n\t\tthis.homeimg = new engine.Image(getTextureByName(\"房子\"));\r\n\t\tthis.addChild(this.homeimg);\r\n\t\tthis.homeimg.x = this.homex;\r\n\r\n\t\tthis.container = new engine.Container();\r\n\t\tthis.addChild(this.container);\r\n\t\tthis.container.y = this.conty;\r\n\r\n\t\tthis.anicontainer = new engine.Container();\r\n\t\tthis.addChild(this.anicontainer);\r\n\t\tthis.anicontainer.mouseEnabled = false;\r\n\t\tthis.anicontainer.mouseChildren = false;\r\n\t\t\r\n\r\n\t\tlet map = new engine.Image(getTextureByName(\"底图\"));\r\n\t\tthis.container.addChild(map);\r\n\r\n\t\t\r\n\r\n\t\t//初始化底图\r\n\t\tfor(let r=0;r<row;r++){\r\n\t\t\tfor(let c=0;c<col;c++){\r\n\t\t\t\tlet rcpos = MapData.getRCPos(r,c);\r\n\t\t\t\tMapData.posData[r+\"_\"+c] = rcpos;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.tanix = this.homex+this.homeimg.texture.width/2;\r\n\t\tthis.taniy = this.homeimg.texture.height/2;\r\n\r\n\t\tengine.globalEvent.addEventListener(GameEvent.SelectEle,this.selectele,this);\r\n\t\tthis.removeEventListener(engine.Event.ADDED_TO_STAGE,this.setup,this);\r\n\t}\r\n\r\n\tinit(){\r\n\t\tthis.initContainer();\r\n\t}\r\n\treset(){\r\n\r\n\t}\r\n\tstart(){\r\n\r\n\t}\r\n\r\n\tinitContainer(){\r\n\t\tthis.lattices = {};\r\n\t\tlet testdata = [\r\n\t\t\t[1,2,5,3,4],\r\n\t\t\t[3,1,2,4,5],\r\n\t\t\t[2,5,3,4,1],\r\n\t\t\t[5,4,1,2,3],\r\n\t\t\t[4,1,3,5,2],\r\n\t\t]\r\n\t\tfor(let r=0;r<testdata.length;r++){\r\n\t\t\tlet rdata = testdata[r];\r\n\t\t\tfor(let c=0;c<rdata.length;c++){\r\n\t\t\t\tlet rctype = rdata[c];\r\n\t\t\t\tlet rcele = MapData.getOneEle(rctype);\r\n\t\t\t\tlet rcpos = MapData.getRCPos(r,c);\r\n\t\t\t\tthis.container.addChild(rcele);\r\n\t\t\t\t\r\n\t\t\t\trcele.x = rcpos[0];\r\n\t\t\t\trcele.y = rcpos[1];\r\n\r\n\t\t\t\tlet rcidx = r+\"_\"+c;\r\n\t\t\t\tthis.lattices[rcidx] = rcele.name;\r\n\t\t\t\tthis.setLatticeEleRc(rcidx);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.checkEliminate();\r\n\t}\r\n\t//关联\r\n\tsetLatticeEleRc(rcidx){\r\n\t\tlet rename = this.lattices[rcidx];\r\n\t\tlet rcnode:Element = this.container.getChildByName(rename);\r\n\t\tlet er = Number(rcidx.split(\"_\")[0]);\r\n\t\tlet ec = Number(rcidx.split(\"_\")[1]);\r\n\t\trcnode.setrc(er,ec);\r\n\t}\r\n\r\n\tselectele(e:engine.Event){\r\n\t\tlet data = e.data;\r\n\t\tlet sr = data.r;\r\n\t\tlet sc = data.c;\r\n\t\tlet sname = sr+\"_\"+sc;\r\n\t\tif(this.selectArr.length==0){\r\n\t\t\t// console.log(\"选中元素\",data);\r\n\t\t\tthis.selectArr.push(sname);\r\n\t\t}else if(this.selectArr.length==1){\r\n\t\t\tlet aselect = this.selectArr[0];\r\n\t\t\tlet asr = aselect.split(\"_\")[0];\r\n\t\t\tlet asc = aselect.split(\"_\")[1];\r\n\r\n\t\t\tif((sr==asr&&Math.abs(sc-asc)==1)||(sc==asc&&Math.abs(sr-asr)==1)){\r\n\t\t\t\tthis.selectArr.push(sname);\r\n\t\t\t}else{\r\n\t\t\t\tthis.selectArr[0] = sname;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.selectArr.length==1){\r\n\t\t\tthis.setSelectShow();\r\n\t\t}else if(this.selectArr.length==2){\r\n\t\t\tthis.changeElePos();\r\n\t\t}\r\n\t}\r\n\tsetSelectShow(){\r\n\t\tlet rcname = this.selectArr[0];\r\n\t\tlet r = rcname.split(\"_\")[0];\r\n\t\tlet c = rcname.split(\"_\")[1];\r\n\t\tlet rcpos = MapData.getRCPos(r,c);\r\n\r\n\t\tthis.container.addChild(this.selectimg);\r\n\t\tthis.selectimg.x = rcpos[0];\r\n\t\tthis.selectimg.y = rcpos[1];\r\n\r\n\t}\r\n\r\n\tchangeElePos(){\r\n\t\tthis.container.removeChild(this.selectimg);\r\n\t\tthis.changeEnable(false);\r\n\r\n\t\tlet sname1 = this.selectArr[0];\r\n\t\tlet sname2 = this.selectArr[1];\r\n\r\n\t\tlet sename1 = this.lattices[sname1];\r\n\t\tlet sename2 = this.lattices[sname2];\r\n\r\n\t\t// console.log(\"交换测试\",sname1,sname2,this.lattices);\r\n\r\n\t\tthis.lattices[sname1] = sename2;\r\n\t\tthis.lattices[sname2] = sename1;\r\n\t\tthis.setLatticeEleRc(sname1);\r\n\t\tthis.setLatticeEleRc(sname2);\r\n\r\n\t\tthis.checkEliminate();\r\n\t\t\r\n\t\tlet snode1 = this.container.getChildByName(sename1);\r\n\t\tlet snode2 = this.container.getChildByName(sename2);\r\n\r\n\t\tlet snode1x = snode1.x;\r\n\t\tlet snode1y = snode1.y;\r\n\r\n\t\tlet snode2x = snode2.x;\r\n\t\tlet snode2y = snode2.y;\r\n\r\n\t\tlet changetime = Math.ceil((MapData.itemsize/this.anispeed)*2*1000)\r\n\t\tif(this.eliminateArr.length>0){\r\n\t\t\tengine.Tween.get(snode1).to({\r\n\t\t\t\tx:snode2x,\r\n\t\t\t\ty:snode2y\r\n\t\t\t},changetime)\r\n\t\t\tengine.Tween.get(snode2).to({\r\n\t\t\t\tx:snode1x,\r\n\t\t\t\ty:snode1y\r\n\t\t\t},changetime)\r\n\t\t\t.call(()=>{\r\n\t\t\t\tthis.eliminate();\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tengine.Tween.get(snode1).to({\r\n\t\t\t\tx:snode2x,\r\n\t\t\t\ty:snode2y\r\n\t\t\t},changetime)\r\n\t\t\t.wait(100)\r\n\t\t\t.to({\r\n\t\t\t\tx:snode1x,\r\n\t\t\t\ty:snode1y\r\n\t\t\t},changetime)\r\n\t\t\t\r\n\t\t\tengine.Tween.get(snode2).to({\r\n\t\t\t\tx:snode1x,\r\n\t\t\t\ty:snode1y\r\n\t\t\t},changetime)\r\n\t\t\t.wait(100)\r\n\t\t\t.to({\r\n\t\t\t\tx:snode2x,\r\n\t\t\t\ty:snode2y\r\n\t\t\t},changetime)\r\n\t\t\t.call(()=>{\r\n\t\t\t\tthis.lattices[sname1] = sename1;\r\n\t\t\t\tthis.lattices[sname2] = sename2;\r\n\t\t\t\tthis.setLatticeEleRc(sname1);\r\n\t\t\t\tthis.setLatticeEleRc(sname2);\r\n\t\t\t\tthis.selectArr = new Array();\r\n\r\n\t\t\t\tthis.changeEnable(true);\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\t\r\n\t//消除\r\n\teliminate(){\r\n\t\tfor(let i=0;i<this.eliminateArr.length;i++){\r\n\t\t\tlet ielidata = this.eliminateArr[i];\r\n\t\t\tlet ielidxname = ielidata.idxname;\r\n\t\t\tlet ielitype = ielidata.type;\r\n\r\n\t\t\tlet ieliname = this.lattices[ielidxname];\r\n\t\t\tlet ielinode = this.container.getChildByName(ieliname);\r\n\t\t\tlet ielix = ielinode.x;\r\n\t\t\tlet ieliy = ielinode.y;\r\n\t\t\tthis.container.removeChild(ielinode);\r\n\r\n\t\t\tthis.lattices[ielidxname] = \"empty\";\r\n\t\t\t//元素层消除,动画层添加\r\n\t\t\tthis.goHomeAni(ielitype,ielix,ieliy);\r\n\t\t}\r\n\t\tthis.fall();\r\n\t}\r\n\t//掉落\r\n\tasync fall(){\r\n\t\tlet fallData = new Array();\r\n\t\t\r\n\t\tlet fcutr = new Array();\r\n\t\tfor(let fc=0;fc<MapData.col;fc++){\r\n\t\t\tfcutr.push(-1);\r\n\t\t}\r\n\r\n\t\tfor(let r = MapData.row-1;r>-1;r--){\r\n\t\t\tfor(let c=MapData.col-1;c>-1;c--){\r\n\t\t\t\t\r\n\t\t\t\tlet idxname = r+\"_\"+c;\r\n\t\t\t\tlet elename = this.lattices[idxname];\r\n\t\t\t\tif(elename==\"empty\"){\r\n\t\t\t\t\tlet frcname = this.getFallRcEle(r,c);\r\n\t\t\t\t\tif(!frcname){\r\n\t\t\t\t\t\tlet fetype = MapData.getRandEtype();\r\n\t\t\t\t\t\tlet fele = MapData.getOneEle(fetype);\r\n\r\n\t\t\t\t\t\tlet cutr = fcutr[c];\r\n\t\t\t\t\t\tlet fepos = MapData.getRCPos(cutr,c);\r\n\t\t\t\t\t\tfcutr[c] = cutr-1;\r\n\r\n\t\t\t\t\t\tthis.container.addChild(fele);\r\n\t\t\t\t\t\tfele.x = fepos[0];\r\n\t\t\t\t\t\tfele.y = fepos[1];\r\n\t\t\t\t\t\tfrcname = fele.name;\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.lattices[idxname] = frcname;\r\n\t\t\t\t\tthis.setLatticeEleRc(idxname);\r\n\t\t\t\t\tfallData.push({\r\n\t\t\t\t\t\trcname:frcname,\r\n\t\t\t\t\t\ttrow:r,\r\n\t\t\t\t\t\ttcol:c\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// return;\r\n\t\t// console.log(\"动画掉落组准备完毕\",fallData);\r\n\t\tlet fallPromise = new Array();\r\n\t\tfor(let f=0;f<fallData.length;f++){\r\n\t\t\tlet fdata = fallData[f];\r\n\t\t\tlet frcname = fdata.rcname;\r\n\t\t\tlet ftrow = fdata.trow;\r\n\t\t\tlet ftcol = fdata.tcol;\r\n\t\t\tlet ftpos = MapData.getRCPos(ftrow,ftcol);\r\n\t\t\tlet frcnode = this.container.getChildByName(frcname);\r\n\r\n\t\t\tlet nepos = [frcnode.x,frcnode.y];\r\n\t\t\tlet fdis = MapData.getDistance(ftpos,nepos);\r\n\t\t\tlet ftime = Math.ceil((fdis/this.anispeed)*1000);\r\n\r\n\t\t\tlet ifallpromise = new Promise(res=>{\r\n\t\t\t\tengine.Tween.get(frcnode)\r\n\t\t\t\t.to({\r\n\t\t\t\t\tx:ftpos[0],\r\n\t\t\t\t\ty:ftpos[1]\r\n\t\t\t\t},ftime).call(()=>{\r\n\t\t\t\t\tres();\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t\tfallPromise.push(ifallpromise);\r\n\t\t}\r\n\t\tawait Promise.all(fallPromise);\r\n\t\t\r\n\t\tthis.checkEliminate();\r\n\t\tif(this.eliminateArr.length>0){\r\n\t\t\treturn this.eliminate();\r\n\t\t}else{//一次操作完毕\r\n\t\t\tthis.selectArr = new Array();\r\n\t\t\tthis.changeEnable(true);\r\n\t\t}\r\n\t}\r\n\tgoHomeAni(ielitype,ielix,ieliy){\r\n\t\tlet aniele = MapData.getOneEle(ielitype);\r\n\t\taniele.touch = false;\r\n\t\tlet anix = ielix;\r\n\t\tlet aniy = ieliy + this.conty;\r\n\t\tthis.anicontainer.addChild(aniele);\r\n\t\taniele.x = anix;\r\n\t\taniele.y = aniy;\r\n\t\t\r\n\t\tlet anidis = MapData.getDistance([this.tanix,this.taniy],[anix,aniy]);\r\n\t\tlet anitime = Math.ceil((anidis/this.anispeed)*1000);\r\n\r\n\t\tengine.Tween.get(aniele)\r\n\t\t.to({\r\n\t\t\tx:this.tanix,\r\n\t\t\ty:this.taniy,\r\n\t\t\tscaleX:0,\r\n\t\t\tscaleY:0\r\n\t\t},anitime);\r\n\t}\r\n\r\n\t//修改元素点击\r\n\tchangeEnable(v:boolean){\r\n\t\tfor(let key in this.lattices){\r\n\t\t\tlet kname = this.lattices[key];\r\n\t\t\tlet ele:Element = this.container.getChildByName(kname);\r\n\t\t\tele.touch = v;\r\n\t\t}\r\n\t}\r\n\r\n\tattionEliminate(){\r\n\t\t\r\n\t}\r\n\t//检测消除\r\n\tcheckEliminate(){\r\n\t\tthis.eliminateArr = new Array();\r\n for(let r=MapData.row-1;r>-1;r--){\r\n for(let c=MapData.col-1;c>-1;c--){\r\n\t\t\t\tlet edata = this.getEliminate(r,c);\r\n\t\t\t\tif(edata){\r\n\t\t\t\t\tlet etype = edata.etype;\r\n\t\t\t\t\tlet earr = edata.arr;\r\n\t\t\t\t\tthis.checkAddEli(etype,earr);\r\n\t\t\t\t}\r\n }\r\n\t\t}\r\n\t\t\r\n\t}\r\n\tgetEliminate(x,y){\r\n\t\tlet checktype = this.getEleTypeByRc(x,y);\r\n\r\n\t\tlet relearr = new Array();\r\n\t\trelearr.push(x+\"_\"+y);\r\n\t\tfor(let r=x-1;r>-1;r--){\r\n\t\t\tlet reletype = this.getEleTypeByRc(r,y);\r\n\t\t\tif(checktype==reletype){\r\n\t\t\t\trelearr.push(r+\"_\"+y);\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet celearr = new Array();\r\n\t\tcelearr.push(x+\"_\"+y);\r\n\t\tfor(let c=y-1;c>-1;c--){\r\n\t\t\tlet celetype = this.getEleTypeByRc(x,c);\r\n\t\t\tif(checktype==celetype){\r\n\t\t\t\tcelearr.push(x+\"_\"+c);\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet eliminatearr = new Array();\r\n\t\tif(relearr.length>=3){\r\n\t\t\teliminatearr.push(...relearr);\r\n\t\t}\r\n\t\tif(celearr.length>=3){\r\n\t\t\teliminatearr.push(...celearr);\r\n\t\t}\r\n\t\tif(eliminatearr.length>0){\r\n\t\t\treturn {\r\n\t\t\t\tetype:checktype,\r\n\t\t\t\tarr:eliminatearr\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\tgetEleTypeByRc(r,c){\r\n\t\tlet rc = r+\"_\"+c;\r\n\t\tlet elename = this.lattices[rc];\r\n\t\tlet ele:Element = this.container.getChildByName(elename);\r\n\t\tlet eletype = ele.type;\r\n\t\treturn eletype;\r\n\t}\r\n\tcheckAddEli(etype,earr){\r\n\t\tfor(let e=0;e<earr.length;e++){\r\n\t\t\tlet ename = earr[e];\r\n\r\n\t\t\tlet needadd = true;\r\n\t\t\tfor(let i=0;i<this.eliminateArr.length;i++){\r\n\t\t\t\tlet ielidata = this.eliminateArr[i];\r\n\t\t\t\tlet ielidxname = ielidata.idxname;\r\n\t\t\t\tif(ielidxname==ename){\r\n\t\t\t\t\tneedadd = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(needadd){\r\n\t\t\t\tthis.eliminateArr.push({\r\n\t\t\t\t\tidxname:ename,\r\n\t\t\t\t\ttype:etype\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\t//获得这个位置掉落的元素\r\n\tgetFallRcEle(r,c){\r\n\t\tfor(let fr=r-1;fr>-1;fr--){\r\n\t\t\tlet frc = fr+\"_\"+c;\r\n\t\t\tlet frcname = this.lattices[frc];\r\n\t\t\tif(frcname!=\"empty\"){\r\n\t\t\t\tthis.lattices[frc] = \"empty\";\r\n\t\t\t\treturn frcname;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n}\r\n","/**\r\n * Created by rockyl on 2020-01-09.\r\n */\r\n\r\nimport GameView from \"./GameView\";\r\nimport {injectProps} from \"../props\";\r\n\r\n\r\nexport class GameWrapper extends engine.Container {\r\n\tprivate _gameView: GameView;\r\n\t\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis._gameView = new GameView();\r\n\t\tthis.addChild(this._gameView);\r\n\r\n\t\tengine.globalEvent.addEventListener('game-init',this.init,this);\r\n\t\tengine.globalEvent.addEventListener('game-reset',this.reset,this);\r\n\t\tengine.globalEvent.addEventListener('game-start',this.start,this);\r\n\t}\r\n\r\n\tinit(){\r\n\t\tthis._gameView.init();\r\n\t}\r\n\treset(){\r\n\t\tthis._gameView.reset();\r\n\t}\r\n\tstart(){\r\n\t\tthis._gameView.start();\r\n\t}\r\n}\r\n","/**\r\n * Created by rockyl on 2020-01-21.\r\n */\r\n\r\nexport let props: any = {};\r\n\r\nexport function prepareProps() {\r\n\tlet metaProps = getProps();\r\n\r\n\tengine.injectProp(props, metaProps);\r\n}\r\n\r\nexport function injectProps(p) {\r\n\tengine.injectProp(props, p);\r\n}\r\n","/**\r\n * Created by rockyl on 2019-11-20.\r\n */\r\n\r\nimport {GameWrapper} from \"./game/GameWrapper\";\r\nimport {injectProps, prepareProps} from \"./props\";\r\n\r\nexport default function (props) {\r\n\tprepareProps();\r\n\tinjectProps(props);\r\n\r\n\tlet instance = new GameWrapper();\r\n\treturn instance;\r\n}\r\n"],"names":["__extends"],"mappings":"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"}
\ No newline at end of file
......@@ -6,16 +6,64 @@
},
"assets": [
{
"name": "玩家icon",
"url": "//yun.duiba.com.cn/aurora/assets/50a7212a113175fa18c866b005d98f07c558dc77.png",
"uuid": "66f23d13-82a5-4cec-9496-301ec240d087",
"name": "底图",
"url": "//yun.duiba.com.cn/aurora/assets/109e30fa662276e0ee4f2e2c35b85bee6f300050.png",
"uuid": "map",
"ext": ".png"
},
{
"name": "房子",
"url": "//yun.duiba.com.cn/aurora/assets/df155804a46c708a714365b7247141ba0add45e5.png",
"uuid": "home",
"ext": ".png"
},
{
"name": "白虎",
"url": "//yun.duiba.com.cn/aurora/assets/b486b4a72c58850bbd1930b994e08802e34fb3e3.png",
"uuid": "btiger",
"ext": ".png"
},
{
"name": "雌虎",
"url": "//yun.duiba.com.cn/aurora/assets/c41afceb285432ed2c17c643df96efc20893adc8.png",
"uuid": "gtiger",
"ext": ".png"
},
{
"name": "猴子",
"url": "//yun.duiba.com.cn/aurora/assets/ef7bc5d1fc38267adba71e07d517330f249d23ba.png",
"uuid": "monkey",
"ext": ".png"
},
{
"name": "鸟",
"url": "//yun.duiba.com.cn/aurora/assets/9ad18dfa34e1729e9893ac362975f9e062263f70.png",
"uuid": "bird",
"ext": ".png"
},
{
"name": "树熊",
"url": "//yun.duiba.com.cn/aurora/assets/277aa43d9f1bf3dd7a18e627335a166f0509684c.png",
"uuid": "koala",
"ext": ".png"
},
{
"name": "选中框",
"url": "//yun.duiba.com.cn/aurora/assets/a3ce52a41ed53ccfa7ce404dbc10102961c4a805.png",
"uuid": "selected",
"ext": ".png"
}
],
"events": {
"in": {
"game-init":{
"alias": "初始化第一关",
"data": {
}
},
"game-reset": {
"alias": "重置",
"alias": "关卡通过重玩之类的重置关卡",
"data": {
}
......
/**
* Created by rockyl on 2018/8/16.
* Created by zjz on 2020/7/10.
*/
import { props } from "../props";
import { playSound, createSvga } from "./utils";
import ObjectPool = engine.ObjectPool;
import { getTextureByName } from "./utils";
import MapData, { GameEvent } from "./MapData";
import Element from "./ele/Element";
......@@ -14,7 +16,450 @@ export default class GameView extends engine.Container {
super();
this.once(engine.Event.ADDED_TO_STAGE, this.setup, this);
}
//元素容器
container:engine.Container;
//动画层
anicontainer:engine.Container;
//格子,位置-name
lattices = {};
//一次消除组
eliminateArr = [];
//选中
selectArr = [];
selectimg:engine.Image;
//屋子
homeimg:engine.Image;
conty = 140;
homex = 528;
tanix;
taniy;
anispeed = 860;
setup() {
this.selectimg = new engine.Image(getTextureByName("选中框"));
this.selectimg.mouseEnabled = false;
let row = MapData.row;
let col = MapData.col;
this.homeimg = new engine.Image(getTextureByName("房子"));
this.addChild(this.homeimg);
this.homeimg.x = this.homex;
this.container = new engine.Container();
this.addChild(this.container);
this.container.y = this.conty;
this.anicontainer = new engine.Container();
this.addChild(this.anicontainer);
this.anicontainer.mouseEnabled = false;
this.anicontainer.mouseChildren = false;
let map = new engine.Image(getTextureByName("底图"));
this.container.addChild(map);
//初始化底图
for(let r=0;r<row;r++){
for(let c=0;c<col;c++){
let rcpos = MapData.getRCPos(r,c);
MapData.posData[r+"_"+c] = rcpos;
}
}
this.tanix = this.homex+this.homeimg.texture.width/2;
this.taniy = this.homeimg.texture.height/2;
engine.globalEvent.addEventListener(GameEvent.SelectEle,this.selectele,this);
this.removeEventListener(engine.Event.ADDED_TO_STAGE,this.setup,this);
}
init(){
this.initContainer();
}
reset(){
}
start(){
}
initContainer(){
this.lattices = {};
let testdata = [
[1,2,5,3,4],
[3,1,2,4,5],
[2,5,3,4,1],
[5,4,1,2,3],
[4,1,3,5,2],
]
for(let r=0;r<testdata.length;r++){
let rdata = testdata[r];
for(let c=0;c<rdata.length;c++){
let rctype = rdata[c];
let rcele = MapData.getOneEle(rctype);
let rcpos = MapData.getRCPos(r,c);
this.container.addChild(rcele);
rcele.x = rcpos[0];
rcele.y = rcpos[1];
let rcidx = r+"_"+c;
this.lattices[rcidx] = rcele.name;
this.setLatticeEleRc(rcidx);
}
}
this.checkEliminate();
}
//关联
setLatticeEleRc(rcidx){
let rename = this.lattices[rcidx];
let rcnode:Element = this.container.getChildByName(rename);
let er = Number(rcidx.split("_")[0]);
let ec = Number(rcidx.split("_")[1]);
rcnode.setrc(er,ec);
}
selectele(e:engine.Event){
let data = e.data;
let sr = data.r;
let sc = data.c;
let sname = sr+"_"+sc;
if(this.selectArr.length==0){
// console.log("选中元素",data);
this.selectArr.push(sname);
}else if(this.selectArr.length==1){
let aselect = this.selectArr[0];
let asr = aselect.split("_")[0];
let asc = aselect.split("_")[1];
if((sr==asr&&Math.abs(sc-asc)==1)||(sc==asc&&Math.abs(sr-asr)==1)){
this.selectArr.push(sname);
}else{
this.selectArr[0] = sname;
}
}
if(this.selectArr.length==1){
this.setSelectShow();
}else if(this.selectArr.length==2){
this.changeElePos();
}
}
setSelectShow(){
let rcname = this.selectArr[0];
let r = rcname.split("_")[0];
let c = rcname.split("_")[1];
let rcpos = MapData.getRCPos(r,c);
this.container.addChild(this.selectimg);
this.selectimg.x = rcpos[0];
this.selectimg.y = rcpos[1];
}
changeElePos(){
this.container.removeChild(this.selectimg);
this.changeEnable(false);
let sname1 = this.selectArr[0];
let sname2 = this.selectArr[1];
let sename1 = this.lattices[sname1];
let sename2 = this.lattices[sname2];
// console.log("交换测试",sname1,sname2,this.lattices);
this.lattices[sname1] = sename2;
this.lattices[sname2] = sename1;
this.setLatticeEleRc(sname1);
this.setLatticeEleRc(sname2);
this.checkEliminate();
let snode1 = this.container.getChildByName(sename1);
let snode2 = this.container.getChildByName(sename2);
let snode1x = snode1.x;
let snode1y = snode1.y;
let snode2x = snode2.x;
let snode2y = snode2.y;
let changetime = Math.ceil((MapData.itemsize/this.anispeed)*2*1000)
if(this.eliminateArr.length>0){
engine.Tween.get(snode1).to({
x:snode2x,
y:snode2y
},changetime)
engine.Tween.get(snode2).to({
x:snode1x,
y:snode1y
},changetime)
.call(()=>{
this.eliminate();
})
}else{
engine.Tween.get(snode1).to({
x:snode2x,
y:snode2y
},changetime)
.wait(100)
.to({
x:snode1x,
y:snode1y
},changetime)
engine.Tween.get(snode2).to({
x:snode1x,
y:snode1y
},changetime)
.wait(100)
.to({
x:snode2x,
y:snode2y
},changetime)
.call(()=>{
this.lattices[sname1] = sename1;
this.lattices[sname2] = sename2;
this.setLatticeEleRc(sname1);
this.setLatticeEleRc(sname2);
this.selectArr = new Array();
this.changeEnable(true);
})
}
}
//消除
eliminate(){
for(let i=0;i<this.eliminateArr.length;i++){
let ielidata = this.eliminateArr[i];
let ielidxname = ielidata.idxname;
let ielitype = ielidata.type;
let ieliname = this.lattices[ielidxname];
let ielinode = this.container.getChildByName(ieliname);
let ielix = ielinode.x;
let ieliy = ielinode.y;
this.container.removeChild(ielinode);
this.lattices[ielidxname] = "empty";
//元素层消除,动画层添加
this.goHomeAni(ielitype,ielix,ieliy);
}
this.fall();
}
//掉落
async fall(){
let fallData = new Array();
let fcutr = new Array();
for(let fc=0;fc<MapData.col;fc++){
fcutr.push(-1);
}
for(let r = MapData.row-1;r>-1;r--){
for(let c=MapData.col-1;c>-1;c--){
let idxname = r+"_"+c;
let elename = this.lattices[idxname];
if(elename=="empty"){
let frcname = this.getFallRcEle(r,c);
if(!frcname){
let fetype = MapData.getRandEtype();
let fele = MapData.getOneEle(fetype);
let cutr = fcutr[c];
let fepos = MapData.getRCPos(cutr,c);
fcutr[c] = cutr-1;
this.container.addChild(fele);
fele.x = fepos[0];
fele.y = fepos[1];
frcname = fele.name;
}
this.lattices[idxname] = frcname;
this.setLatticeEleRc(idxname);
fallData.push({
rcname:frcname,
trow:r,
tcol:c
});
}
}
}
// return;
// console.log("动画掉落组准备完毕",fallData);
let fallPromise = new Array();
for(let f=0;f<fallData.length;f++){
let fdata = fallData[f];
let frcname = fdata.rcname;
let ftrow = fdata.trow;
let ftcol = fdata.tcol;
let ftpos = MapData.getRCPos(ftrow,ftcol);
let frcnode = this.container.getChildByName(frcname);
let nepos = [frcnode.x,frcnode.y];
let fdis = MapData.getDistance(ftpos,nepos);
let ftime = Math.ceil((fdis/this.anispeed)*1000);
let ifallpromise = new Promise(res=>{
engine.Tween.get(frcnode)
.to({
x:ftpos[0],
y:ftpos[1]
},ftime).call(()=>{
res();
})
})
fallPromise.push(ifallpromise);
}
await Promise.all(fallPromise);
this.checkEliminate();
if(this.eliminateArr.length>0){
return this.eliminate();
}else{//一次操作完毕
this.selectArr = new Array();
this.changeEnable(true);
}
}
goHomeAni(ielitype,ielix,ieliy){
let aniele = MapData.getOneEle(ielitype);
aniele.touch = false;
let anix = ielix;
let aniy = ieliy + this.conty;
this.anicontainer.addChild(aniele);
aniele.x = anix;
aniele.y = aniy;
let anidis = MapData.getDistance([this.tanix,this.taniy],[anix,aniy]);
let anitime = Math.ceil((anidis/this.anispeed)*1000);
engine.Tween.get(aniele)
.to({
x:this.tanix,
y:this.taniy,
scaleX:0,
scaleY:0
},anitime);
}
//修改元素点击
changeEnable(v:boolean){
for(let key in this.lattices){
let kname = this.lattices[key];
let ele:Element = this.container.getChildByName(kname);
ele.touch = v;
}
}
attionEliminate(){
}
//检测消除
checkEliminate(){
this.eliminateArr = new Array();
for(let r=MapData.row-1;r>-1;r--){
for(let c=MapData.col-1;c>-1;c--){
let edata = this.getEliminate(r,c);
if(edata){
let etype = edata.etype;
let earr = edata.arr;
this.checkAddEli(etype,earr);
}
}
}
}
getEliminate(x,y){
let checktype = this.getEleTypeByRc(x,y);
let relearr = new Array();
relearr.push(x+"_"+y);
for(let r=x-1;r>-1;r--){
let reletype = this.getEleTypeByRc(r,y);
if(checktype==reletype){
relearr.push(r+"_"+y);
}else{
break;
}
}
let celearr = new Array();
celearr.push(x+"_"+y);
for(let c=y-1;c>-1;c--){
let celetype = this.getEleTypeByRc(x,c);
if(checktype==celetype){
celearr.push(x+"_"+c);
}else{
break;
}
}
let eliminatearr = new Array();
if(relearr.length>=3){
eliminatearr.push(...relearr);
}
if(celearr.length>=3){
eliminatearr.push(...celearr);
}
if(eliminatearr.length>0){
return {
etype:checktype,
arr:eliminatearr
}
}else{
return false;
}
}
getEleTypeByRc(r,c){
let rc = r+"_"+c;
let elename = this.lattices[rc];
let ele:Element = this.container.getChildByName(elename);
let eletype = ele.type;
return eletype;
}
checkAddEli(etype,earr){
for(let e=0;e<earr.length;e++){
let ename = earr[e];
let needadd = true;
for(let i=0;i<this.eliminateArr.length;i++){
let ielidata = this.eliminateArr[i];
let ielidxname = ielidata.idxname;
if(ielidxname==ename){
needadd = false;
break;
}
}
if(needadd){
this.eliminateArr.push({
idxname:ename,
type:etype
})
}
}
}
//获得这个位置掉落的元素
getFallRcEle(r,c){
for(let fr=r-1;fr>-1;fr--){
let frc = fr+"_"+c;
let frcname = this.lattices[frc];
if(frcname!="empty"){
this.lattices[frc] = "empty";
return frcname;
}
}
return false;
}
}
......@@ -7,12 +7,25 @@ import {injectProps} from "../props";
export class GameWrapper extends engine.Container {
private _status;
private _gameView: GameView;
constructor() {
super();
let gameView = this._gameView = new GameView();
this.addChild(gameView);
this._gameView = new GameView();
this.addChild(this._gameView);
engine.globalEvent.addEventListener('game-init',this.init,this);
engine.globalEvent.addEventListener('game-reset',this.reset,this);
engine.globalEvent.addEventListener('game-start',this.start,this);
}
init(){
this._gameView.init();
}
reset(){
this._gameView.reset();
}
start(){
this._gameView.start();
}
}
import Element from "./ele/Element";
export enum ElementType{
btiger = 1,
gtiger,
monkey,
bird,
koala
}
export enum GameEvent{
SelectEle = "SelectEle",
}
export default class MapData{
//单格大小
static itemsize = 129;
//
static paddingb = 10;
static paddingi = 5;
//
static row = 5;
static col = 5;
//行-列,对应位置
static posData = {
};
static eleidx = 1;
static elePool = [];
static getRy(r){
return this.paddingb+r*(this.itemsize+this.paddingi);
}
static getCx(c){
return this.paddingb+c*(this.itemsize+this.paddingi);
}
static getRCPos(r,c){
let x = this.getCx(c);
let y = this.getRy(r);
return [x,y];
}
static adaptElePos(pos,wid,hei){
let x = pos[0]+(this.itemsize-wid)/2;
let y = pos[1]+(this.itemsize-hei)/2;
return [x,y];
}
static getEtypeImgName(type:ElementType){
let ename:string;
switch(type){
case ElementType.btiger:
ename = "白虎";
break;
case ElementType.gtiger:
ename = "雌虎";
break;
case ElementType.monkey:
ename = "猴子";
break;
case ElementType.bird:
ename = "鸟";
break;
case ElementType.koala:
ename = "树熊";
break;
default:
console.error("未定义元素类型");
break;
}
return ename;
}
static getRandEtype(){
let eletypeArr = [ElementType.btiger,ElementType.gtiger,ElementType.monkey,ElementType.bird,ElementType.koala];
let etype = eletypeArr[Math.floor(Math.random()*eletypeArr.length)];
return etype;
}
static getOneEle(type:ElementType):Element{
let ele:Element;
if(this.elePool.length>0){
ele = this.elePool.shift();
}else{
ele = new Element();
}
ele.name = "ele_"+this.eleidx;
this.eleidx += 1;
ele.init(type)
return ele;
}
static recoverEle(ele:Element){
this.elePool.push(ele);
}
static getDistance(p1,p2){
let p1x = p1[0];
let p1y = p1[1];
let p2x = p2[0];
let p2y = p2[1];
let dis = Math.sqrt(Math.pow(p1x-p2x,2)+Math.pow(p1y-p2y,2));
return dis;
}
}
\ No newline at end of file
import MapData, { ElementType, GameEvent } from "../MapData";
import { getTextureByName } from "../utils";
export default class Element extends engine.Container{
type:ElementType;
eimage:engine.Image;
inrow;
incol;
set touch(touch){
this.mouseEnabled = touch;
this.mouseChildren = touch;
}
constructor(){
super();
this.width = MapData.itemsize;
this.height = MapData.itemsize;
this.eimage = new engine.Image();
this.addChild(this.eimage);
this.touch = true;
this.addEventListener(engine.MouseEvent.CLICK,this.selectele,this);
}
init(type:ElementType){
this.scaleX = 1;
this.scaleY = 1;
this.type = type;
let ename = MapData.getEtypeImgName(type);
this.eimage.texture = getTextureByName(ename);
let imgwid = this.eimage.texture.width;
let imghei = this.eimage.texture.height;
// console.log("大小",imgwid,imghei);
this.eimage.x = (this.width - imgwid)/2;
this.eimage.y = (this.height-imghei)/2;
}
setrc(r,c){
this.inrow = r;
this.incol = c;
}
selectele(e:engine.MouseEvent){
engine.globalEvent.dispatchEvent(GameEvent.SelectEle,{
r:this.inrow,
c:this.incol
})
}
//飞到小屋
flyToHome(){
}
changePos(){
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment