5 lines
31 KiB
JavaScript
5 lines
31 KiB
JavaScript
"use strict";const t=require("../../common/vendor.js"),Rt=require("./composables/useGameSfx.js"),At=require("./composables/useGamePlatform.js"),It=require("./composables/useGameAuth.js");Math||Dt();const Dt=()=>"../components/TongjiIcon.js",Ot="https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/games/food/",x=5,i=4,ze=5,Et=3,Pt=5,Bt=100,Ta=3,Ft=2,Gt=2,Nt=6,Ke=300,_a={__name:"index",setup(qt){const Ca=.05+ze*.01,La=.86-ze*.028,$e=[{source:"同行鼓励",text:"你需要加油哦!再向前一点,就能超过上一名。",tone:"warm"},{source:"同行鼓励",text:"你太棒了!今天也在认真认识食物。",tone:"bright"},{source:"开心鼓励",text:"你肯定是个大美女(大帅哥)!保持好心情。",tone:"bright"},{source:"亲友留言示例",text:"游戏虽好,可不要贪吃哦!",tone:"family"},{source:"亲友留言示例",text:"差不多行了,赶快洗洗睡吧!",tone:"family"},{source:"亲友留言示例",text:"你太努力了,你是我的榜样!",tone:"warm"},{source:"亲友留言示例",text:"好样的!",tone:"bright"},{source:"亲友自定义留言示例",text:"我血糖已经正常了,你们玩吧。",tone:"family",userGenerated:!0}],te={corn:{name:"玉米",short:"玉米",emoji:"🌽",color:"yellow",level:"mid",levelLabel:"中糖"},egg:{name:"鸡蛋",short:"鸡蛋",emoji:"🥚",color:"cream",level:"low",levelLabel:"低糖"},tomato:{name:"番茄",short:"番茄",emoji:"🍅",color:"red",level:"low",levelLabel:"低糖"},potato:{name:"红薯",short:"红薯",emoji:"🍠",color:"purple",level:"mid",levelLabel:"中糖"},cucumber:{name:"黄瓜",short:"黄瓜",emoji:"🥒",color:"yellow",level:"low",levelLabel:"低糖"},lettuce:{name:"生菜",short:"生菜",emoji:"🥬",color:"cream",level:"low",levelLabel:"低糖"},grainMantou:{name:"杂粮馒头",short:"杂粮馒头",emoji:"🫓",color:"red",level:"mid",levelLabel:"中糖"},wonton:{name:"馄饨",short:"馄饨",emoji:"🥟",color:"purple",level:"mid",levelLabel:"中糖"},celery:{name:"芹菜",short:"芹菜",emoji:"🌿",color:"yellow",level:"low",levelLabel:"低糖"},mushroom:{name:"香菇",short:"香菇",emoji:"🍄",color:"cream",level:"low",levelLabel:"低糖"},chicken:{name:"鸡肉",short:"鸡肉",emoji:"🍗",color:"red",level:"mid",levelLabel:"中糖"},taro:{name:"芋头",short:"芋头",emoji:"🥔",color:"purple",level:"mid",levelLabel:"中糖"},broccoli:{name:"西兰花",short:"西兰花",emoji:"🥦",color:"yellow",level:"low",levelLabel:"低糖"},milk:{name:"牛奶",short:"牛奶",emoji:"🥛",color:"cream",level:"low",levelLabel:"低糖"},brownRice:{name:"糙米饭",short:"糙米饭",emoji:"🍙",color:"red",level:"mid",levelLabel:"中糖"},apple:{name:"苹果",short:"苹果",emoji:"🍎",color:"yellow",level:"low",levelLabel:"低糖"},strawberry:{name:"草莓",short:"草莓",emoji:"🍓",color:"cream",level:"low",levelLabel:"低糖"},banana:{name:"香蕉",short:"香蕉",emoji:"🍌",color:"red",level:"mid",levelLabel:"中糖"},mango:{name:"芒果",short:"芒果",emoji:"🥭",color:"purple",level:"mid",levelLabel:"中糖"},tea:{name:"红茶",short:"红茶",emoji:"🍵",color:"yellow",level:"low",levelLabel:"低糖"},blackCoffee:{name:"黑咖啡",short:"黑咖啡",emoji:"☕",color:"cream",level:"low",levelLabel:"低糖"},coffee:{name:"咖啡",short:"咖啡",emoji:"☕",color:"red",level:"mid",levelLabel:"中糖"},pineapple:{name:"菠萝",short:"菠萝",emoji:"🍍",color:"purple",level:"mid",levelLabel:"中糖"},pepper:{name:"青椒",short:"青椒",emoji:"🫑",color:"yellow",level:"low",levelLabel:"低糖"},greenBean:{name:"四季豆",short:"四季豆",emoji:"🫛",color:"cream",level:"low",levelLabel:"低糖"},shrimp:{name:"虾仁",short:"虾仁",emoji:"🦐",color:"red",level:"mid",levelLabel:"中糖"},udon:{name:"乌冬面",short:"乌冬面",emoji:"🍲",color:"purple",level:"mid",levelLabel:"中糖"},onion:{name:"洋葱",short:"洋葱",emoji:"🧅",color:"yellow",level:"low",levelLabel:"低糖"},congee:{name:"白米粥",short:"白粥",emoji:"🥣",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"白米粥煮得软烂,消化吸收通常较快。糖尿病患者应结合食用量、搭配和个人血糖情况,在医生或营养师指导下合理选择。"},eightCongee:{name:"八宝粥",short:"八宝粥",emoji:"🥣",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"八宝粥常含糯米、豆类或添加糖,实际影响与配方和食用量有关,请留意营养成分。"},centuryCongee:{name:"皮蛋瘦肉粥",short:"瘦肉粥",emoji:"🥣",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"粥类煮得软烂后通常吸收较快,搭配和食用量需要结合个人情况。"},milletCongee:{name:"小米粥",short:"小米粥",emoji:"🥣",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"小米粥的升糖影响与浓稠度和食用量有关,游戏等级需由医生最终审核。"},orangeJuice:{name:"柳橙汁",short:"橙汁",emoji:"🧃",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"果汁缺少完整水果的部分膳食纤维,饮用量和是否添加糖都需要注意。"},soda:{name:"含糖汽水",short:"汽水",emoji:"🥤",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"含糖饮料中的糖吸收较快,日常应优先选择不加糖的饮品。"},riceNoodleSoup:{name:"汤粉",short:"汤粉",emoji:"🍜",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"汤粉以精制米粉为主,实际影响与分量和配菜有关,应注意搭配。"},noodleSoup:{name:"汤面",short:"汤面",emoji:"🍜",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"汤面以精细面食为主,汤汁和分量需要注意,具体建议以医生审核为准。"},milkTea:{name:"含糖奶茶",short:"奶茶",emoji:"🧋",color:"orange",level:"high",levelLabel:"高糖",high:!0,replaceable:!0,tip:"含糖奶茶可能同时含有较多添加糖和能量,应关注配方与饮用量。"},camel:{name:"驼乳",short:"驼乳",emoji:"🥛",color:"milk",level:"prop",levelLabel:"道具",product:!0}};Object.keys(te).forEach(a=>{te[a].img=`${Ot}${a}.jpg`});const Re=[{title:"中式早餐",safe:["egg","cucumber","corn","grainMantou"],danger:"congee"},{title:"家常粥餐",safe:["celery","mushroom","chicken","taro"],danger:"centuryCongee"},{title:"粗粮早餐",safe:["broccoli","milk","brownRice","potato"],danger:"milletCongee"},{title:"水果饮品",safe:["apple","strawberry","banana","mango"],danger:"orangeJuice"},{title:"日常饮品",safe:["milk","tea","blackCoffee","coffee"],danger:"soda"},{title:"南方汤粉",safe:["pepper","greenBean","shrimp","udon"],danger:"riceNoodleSoup"},{title:"北方面食",safe:["onion","celery","corn","grainMantou"],danger:"noodleSoup"}],{enabled:q,play:y,playLayer:S,playDrop:ja,warmUp:$a}=Rt.useGameSfx(),{proxy:We}=t.getCurrentInstance(),{ensureLoggedIn:Ra}=It.useGameAuth(We),{connected:Ve,loading:Aa,syncStatus:Je,leaderboard:R,confirmedSessionLearned:Ia,connect:Xe,beginSession:Da,queueProgress:Ae,flushProgress:Ye,syncAndRefresh:Oa,recordShare:Qe,dispose:Ea}=At.useGamePlatform(We,Ra),f=t.ref([]),T=t.ref(-1),k=t.ref(0),le=t.ref(0),$=t.ref(0),V=t.ref(0),A=t.ref(0),H=t.ref(3),j=t.ref(!1),b=t.ref(!1),_=t.ref(!1),J=t.ref(0),ye=t.ref(te.congee),oe=t.ref(0),z=t.ref(0),X=t.ref(0),ne=t.ref(!1),Ze=t.ref(0),g=t.ref("交换相邻食物,三个相同即可消除"),ea=t.ref({paddingTop:"20px"}),I={x:0,y:0,index:-1},ke=t.ref(-1),Y=t.ref(-1),Q=t.ref(0),Z=t.ref(0),Me=t.ref([]),B=t.ref([]),C=t.ref(""),aa=t.ref(1),w=t.ref({visible:!1,count:0,kicker:"",title:"",reward:""}),D=t.ref(!1),xe=t.ref({number:1,title:"",foods:[]}),re=t.ref(!1),ue=t.ref(!1),K=t.ref(!1),ee=t.ref(!1),se=t.ref(!1),Ie=t.ref(0),ta=["#ff3154","#ffd928","#28c76f","#4d8dff","#a855f7","#ff7a1a"],Pa=Array.from({length:34},(a,e)=>({id:e,emoji:e%8===0?"🎉":e%11===0?"★":"",style:{left:`${(e*37+7)%100}%`,backgroundColor:e%8===0?"transparent":ta[e%ta.length],animationDelay:`${e%9*.065}s`,animationDuration:`${3.7+e%5*.36}s`,width:`${12+e%3*5}rpx`,height:`${22+e%4*6}rpx`}}));let la=0,Ba=1,W=null,ie=null,ce=null,fe=null,ve=null,ae=0,Se=0,oa=!1,De="";const p=t.computed(()=>Re[J.value%Re.length]),O=t.computed(()=>{const a=p.value.safe,e=[{key:a[0],label:`消除 7 个${v(a[0]).short}`,target:7,kind:"food"},{key:"special",label:"制造 1 个惊喜棋子",target:1,kind:"special"},{key:"combo",label:"完成连消 ×2",target:Gt,kind:"combo"},{key:a[1],label:`消除 8 个${v(a[1]).short}`,target:8,kind:"food"}];return e[oe.value%e.length]}),Fa=t.computed(()=>Math.min(100,z.value/O.value.target*100)),na=t.computed(()=>f.value.filter(a=>a&&v(a.key).high).length),Ga=t.computed(()=>Array.from({length:x},(a,e)=>f.value.slice(e*i,e*i+i).map((l,o)=>({...l,index:e*i+o})))),Na=t.computed(()=>Math.max(0,$.value-Ia.value)),Te=t.computed(()=>{var a;return Number(((a=R.value.me)==null?void 0:a.count)||0)+Na.value}),me=t.computed(()=>{const a=Array.isArray(R.value.players)?R.value.players:[],e=t.index.getStorageSync("userData")||{},l=String(e.nickname||"我");return(a.length?a.map((n,r)=>({...n,isMe:!!(n.is_me||n.isMe),avatarUrl:n.avatar||"",avatar:String(n.name||"同行").slice(0,1),tone:r%7+1,count:n.is_me||n.isMe?Te.value:Number(n.count||0)})):[{id:"local-me",name:l,avatar:l.slice(0,1)||"我",avatarUrl:e.avatar||"",count:Te.value,tone:1,isMe:!0}]).sort((n,r)=>r.count-n.count||Number(r.best_score||0)-Number(n.best_score||0)).map((n,r)=>({...n,rank:r+1}))}),he=t.computed(()=>{var a;return((a=me.value.find(e=>e.isMe))==null?void 0:a.rank)||1}),Oe=t.computed(()=>0),ra=t.computed(()=>he.value===1),Ua=t.computed(()=>{const a=me.value.findIndex(e=>e.isMe);return a<=0?0:Math.max(1,me.value[a-1].count-Te.value+1)}),de=t.computed(()=>$e[Ie.value%$e.length]),qa=t.computed(()=>{const a=R.value.week_start,e=R.value.week_end;return!a||!e?Va(new Date):`${ua(a)}—${ua(e)}`}),Ha=t.computed(()=>R.value.sex_label||"同行"),za=t.computed(()=>Math.max(1,Number(R.value.member_count||me.value.length))),Ka=t.computed(()=>Aa.value?"连接中":Ve.value?Je.value==="pending"||Je.value==="syncing"?"保存中":"真实周榜":"离线记录中");t.onShareAppMessage(()=>(Qe(),{title:sa(),path:Ja()})),t.onShareTimeline(()=>{Qe();const a=String(R.value.invite_code||"");return{title:sa(),query:a?`from=share&invite_code=${encodeURIComponent(a)}`:"from=share"}});function Wa(){var l;let a=20,e=t.index.upx2px(28);try{const o=t.index.getSystemInfoSync();a=Number(((l=o.safeAreaInsets)==null?void 0:l.top)||o.statusBarHeight)||20;const n=typeof t.index.getMenuButtonBoundingClientRect=="function"?t.index.getMenuButtonBoundingClientRect():null;n&&n.width>0&&(a=Math.max(a,Number(n.top)||0),e=Math.max(e,(Number(o.windowWidth)||0)-Number(n.left)+t.index.upx2px(8)))}catch{}ea.value={paddingTop:`${a}px`,paddingRight:`${e}px`}}t.onLoad((a={})=>{Wa(),le.value=Number(t.index.getStorageSync("tongji_endless_best")||0),De=String(a.invite_code||"").trim(),ia(),se.value=!0,Xe(De)}),t.onShow(()=>{Xe(De).then(a=>{a&&Ye()})}),t.onUnload(()=>{($.value>0||_.value)&&(Ae($.value,k.value,_.value),Ye()),Ea(),W&&clearTimeout(W),ie&&clearTimeout(ie),ce&&clearTimeout(ce),fe&&clearTimeout(fe),ve&&clearTimeout(ve)});function _e(a,e=""){return{id:Ba++,key:a,special:e}}function v(a){return te[a]||te.corn}function Va(a){const e=new Date(a),l=e.getDay()||7,o=new Date(e);o.setDate(e.getDate()-l+1);const n=new Date(o);n.setDate(o.getDate()+6);const r=u=>`${u.getMonth()+1}月${u.getDate()}日`;return`${r(o)}—${r(n)}`}function ua(a){const e=String(a).split("-").map(Number);return e.length!==3?String(a):`${e[1]}月${e[2]}日`}function sa(){return $.value>0?`我在识糖小课堂认识了${$.value}份食物,一起来挑战吧`:"识糖小课堂:边玩边认识常见食物"}function Ja(){const a=String(R.value.invite_code||"");return`/tongji/endless-game/index${a?`?from=share&invite_code=${encodeURIComponent(a)}`:"?from=share"}`}function Xa(){if(E(),!_.value){if(b.value||K.value||D.value||w.value.visible){g.value="本次消除完成后即可查看同行榜";return}se.value=!0,Oa($.value,k.value),y("select",.72)}}function Ya(){E(),se.value=!1,y("select",.86),G()}function Qa(){E(),Ie.value=(Ie.value+1)%$e.length,y("select",.68)}function ia(){W&&clearTimeout(W),Da(),J.value=0,f.value=Ue(Ne(p.value)),T.value=-1,k.value=0,$.value=0,V.value=0,A.value=0,H.value=3,j.value=!1,b.value=!1,_.value=!1,oe.value=0,z.value=0,X.value=0,ne.value=!1,Me.value=[],B.value=[],C.value="",w.value.visible=!1,D.value=!1,re.value=!1,ue.value=!1,K.value=!1,ee.value=!1,ae=0,Se=0,ge(),g.value="交换相邻食物,三个相同即可消除",G()}function ca(){if(getCurrentPages().length>1){t.index.navigateBack({delta:1,fail:()=>t.index.redirectTo({url:"/tongji/pages/weekly"})});return}t.index.redirectTo({url:"/tongji/pages/weekly"})}function Za(){t.index.showModal({title:"玩法说明",content:`当前难度:${ze}/10
|
||
|
||
交换相邻食物,三个相同即可消除。四连、直线五连会生成火焰惊喜棋子;横向三个与竖向三个相交的 L/T 形五消,会生成范围爆破棋子,再次消除可清除周围九格。连消×2会计入连消小目标,连续普通消除后会出现一次连消机会;连消×3可获得额外惊喜奖励。完成小目标直接获得 1 罐驼乳粉;驼乳粉可替换本组指定稀食或饮品,三个驼乳连消后进入下一组食品。主动三消“高糖”食物代表吃掉,会结束本局;火焰特效波及高糖食物代表将它移出餐盘,不算吃掉。没有可走步时会自动洗牌。`,showCancel:!1,confirmText:"知道了"})}function et(){q.value=!q.value;try{t.index.setStorageSync("tongji_game_sfx_enabled",q.value?"1":"0")}catch{}q.value&&(E(),y("select",.8)),t.index.showToast({title:q.value?"音效已开启":"音效已关闭",icon:"none"})}function E(){oa||!q.value||(oa=!0,$a())}function at(a){const e=v(a.key);return[`is-${e.color}`,`is-level-${e.level}`,{"is-selected":T.value===a.index,"is-high":e.high,"is-camel-target":j.value&&e.replaceable,"is-clearing":Me.value.includes(a.index),"is-fire-clearing":B.value.includes(a.index),"is-dragging":ke.value===a.index||Y.value===a.index}]}function tt(a){return ke.value===a?{transform:`translate(${Q.value}px, ${Z.value}px) scale(1.05)`,zIndex:6}:Y.value===a?{transform:`translate(${-Q.value*.72}px, ${-Z.value*.72}px) scale(.96)`,zIndex:4}:{}}function lt(a,e){var o;E();const l=(o=a.touches)==null?void 0:o[0];l&&(I.x=l.clientX,I.y=l.clientY,I.index=e,ke.value=e,Y.value=-1,Q.value=0,Z.value=0)}function ot(a,e){var c;const l=(c=a.touches)==null?void 0:c[0];if(!l||I.index!==e||b.value)return;const o=l.clientX-I.x,n=l.clientY-I.y,r=Math.abs(o)>Math.abs(n);Q.value=r?Math.max(-82,Math.min(82,o)):0,Z.value=r?0:Math.max(-82,Math.min(82,n));let u=e;r&&Math.abs(o)>10&&(u+=o>0?1:-1),!r&&Math.abs(n)>10&&(u+=n>0?i:-i),Y.value=u>=0&&u<x*i&&Ce(e,u)?u:-1}async function nt(a,e){var u;const l=(u=a.changedTouches)==null?void 0:u[0];if(!l||I.index!==e){ge();return}const o=l.clientX-I.x,n=l.clientY-I.y;if(Math.max(Math.abs(o),Math.abs(n))<32){ge();return}let r=e;if(Math.abs(o)>Math.abs(n)?r+=o>0?1:-1:r+=n>0?i:-i,la=Date.now()+350,r>=0&&r<x*i&&Ce(e,r)){const c=Math.abs(o)>Math.abs(n);Q.value=c?o>0?78:-78:0,Z.value=c?0:n>0?78:-78,Y.value=r,y("swap",.85),await N(85),ge(),fa(e,r,!0)}else ge(),y("swapFail",.65)}function ge(){ke.value=-1,Y.value=-1,Q.value=0,Z.value=0}async function rt(a){if(E(),Date.now()<la||b.value||_.value)return;const e=f.value[a];if(j.value){if(!v(e.key).replaceable){g.value=`本组驼乳粉用于替换${v(p.value.danger).short}`;return}f.value[a]=_e("camel"),f.value=[...f.value],H.value-=1,j.value=!1,T.value=-1,S("insulin","sparkle",55,.5),L("light");const o=F(f.value);o.length?(b.value=!0,g.value="驼乳棋子连起来了!",await ma(o,a),b.value=!1,pa()):(g.value=`已将${v(p.value.danger).short}移出餐盘,凑齐三个驼乳可换主题`,Fe()||G());return}if(T.value<0){T.value=a,y("select",.75),g.value="再选择一个相邻食物进行交换";return}if(T.value===a){T.value=-1,y("deselect",.65);return}if(!Ce(T.value,a)){T.value=a,g.value="只能交换上下左右相邻的食物";return}const l=T.value;T.value=-1,fa(l,a)}function ut(){E(),!(b.value||H.value<=0||_.value)&&(j.value=!j.value,T.value=-1,g.value=j.value?`请选择橙色边框的${v(p.value.danger).short}进行替换`:"已取消使用驼乳粉")}function Ce(a,e){const l=Math.floor(a/i),o=a%i,n=Math.floor(e/i),r=e%i;return Math.abs(l-n)+Math.abs(o-r)===1}async function fa(a,e,l=!1){if(b.value||_.value)return;b.value=!0,l||y("swap",.85),va(a,e),await N(130);const o=F(f.value);if(!o.length){va(a,e),y("swapFail",.8),L("light"),g.value="这一步没有形成三连,再试一次",b.value=!1,Fe()||G();return}const r=[...new Set(o.flatMap(u=>u.indices))].map(u=>f.value[u]).find(u=>v(u.key).high);if(r){y("lose",.9),L("heavy"),ye.value=v(r.key),Ma(),_.value=!0,Ae($.value,k.value,!0),b.value=!1;return}await ma(o,e),b.value=!1,_.value||pa()}function va(a,e){const l=[...f.value];[l[a],l[e]]=[l[e],l[a]],f.value=l}async function ma(a,e){const l=O.value.kind==="combo";let o=a,n=0,r=0,u=0,c=!0;for(;o.length&&n<Ta;){n+=1,V.value=n;const s=new Set(o.flatMap(h=>h.indices));let m=-1,d="";const P=c?kt(o):null;if(c){const h=o.find(M=>M.indices.length>=4);P?(m=P.intersection,d="burst",s.delete(m),u=1):h&&(m=h.indices.includes(e)?e:h.indices[0],d=h.indices.length>=5?"all":h.direction,s.delete(m),u=1)}B.value=[];const U=dt(s),qe=o.filter(h=>h.indices.every(M=>{var we;return((we=f.value[M])==null?void 0:we.key)==="camel"})).sort((h,M)=>M.indices.length-h.indices.length)[0],xa=P?[...new Set([...P.row.indices,...P.col.indices])]:[],_t=xa.length===5&&xa.every(h=>{var M;return((M=f.value[h])==null?void 0:M.key)==="camel"})?5:0,Sa=Math.max(_t,(qe==null?void 0:qe.indices.length)||0);Sa>=3&&ft(Sa,s);const je=[...s].map(h=>f.value[h]).filter(Boolean).filter(h=>{const M=v(h.key);return!M.high&&!M.product}),Ct=B.value.some(h=>{var M;return v((M=f.value[h])==null?void 0:M.key).high}),He=Math.max(...o.map(h=>h.indices.length),d==="burst"||U.hasBurst?5:3);Me.value=[...s];const Lt=Ct?"fire-high":U.hasBurst?"burst-triggered":U.hasFire?"fire-triggered":d;ht(He,n,Lt),st(He,n),L(He>=5||n>=3?"medium":"light"),r+=je.length,$.value+=je.length,Mt(je);const jt=A.value>0?2:1;k.value+=(je.length*12+Math.max(0,n-1)*20+u*35)*jt,Ae($.value,k.value,!1),await N(U.hasFire?330:210);const be=[...f.value];s.forEach(h=>{be[h]=null}),m>=0&&be[m]&&(be[m]={...be[m],special:d}),f.value=be,Me.value=[],B.value=[],u&&O.value.kind==="special"&&Be(u),await N(70);const $t=c&&l&&X.value>=Nt-1;gt($t),ja(s.size),await N(190),o=F(f.value),o.some(h=>h.indices.some(M=>{var we;return v((we=f.value[M])==null?void 0:we.key).high}))?(f.value=ka(f.value),o=[],g.value="自动掉落避开了高糖连消,棋盘已整理"):n>=Ta&&o.length&&(f.value=ka(f.value),o=[],g.value="连消奖励已结算,棋盘已稳定"),c=!1,u=0}if(n>=3&&ct(n),l&&(n>=Ft?(X.value=0,Be(1)):X.value+=1),r>0&&A.value>0&&(A.value-=1),ae>=3){const s=ae;ae=0;const m=s>=5?2300:s===4?2e3:1250;await N(m),vt()}}function st(a,e){e>=3?S("comboMega","blast",70,.55):e===2?S("combo3","pop",60,.5):a>=5?S("match5","blast",65,.55):a>=4?S("match4","sparkle",55,.5):S("match3","pop",45,.45)}function it(a){const e=Math.max(0,Pt-H.value),l=Math.min(a,e),o=a-l;return{granted:l,overflow:o,overflowScore:o*Bt}}function Le(a){const e=it(a);return H.value+=e.granted,k.value+=e.overflowScore,e}function ct(a){k.value+=Ke;const e=Le(1),l=Ee(e);g.value=`${a} 连消惊喜:+${Ke} 分${l?` · ${l}`:""}`,Se=Date.now()+1800,e.granted>0&&ga(),ha(),S("comboMega","fanfare",100,.82),L("medium"),t.index.showToast({title:`${a} 连消惊喜:+${Ke} 分${e.granted>0?"、驼乳粉 +1":""}`,icon:"none"})}function Ee(a){const e=[];return a.granted>0&&e.push(`驼乳粉 ×${a.granted}`),a.overflow>0&&e.push(`满仓多余奖励换 ${a.overflowScore} 分`),e.join(" · ")}function ft(a,e){if(ae=Math.max(ae,a),a>=5){k.value+=1554;const l=Le(4);A.value=Math.max(A.value,6),f.value.forEach((o,n)=>{v(o==null?void 0:o.key).high&&e.add(n)}),Pe(5,"驼乳五连双倍大奖",`+1554 分 · ${Ee(l)} · 双倍得分 ×6`),ha(),mt();return}if(a===4){k.value+=288;const l=Le(1),o=f.value.findIndex((n,r)=>v(n==null?void 0:n.key).high&&!e.has(r));o>=0&&e.add(o),Pe(4,"驼乳超级四连",`+288 分 · ${Ee(l)} · 移出一份高糖食物`),S("match5","fanfare",90,.7),setTimeout(()=>y("tap",1.16,.58),260),L("medium");return}k.value+=77,Pe(3,"驼乳幸运三连","+77 分 · 轻量连消奖励"),S("match3","sparkle",44,.38),L("light")}function vt(){const a=p.value;J.value=(J.value+1)%Re.length;const e=p.value,l={};a.safe.forEach((n,r)=>{l[n]=e.safe[r]}),l[a.danger]=e.danger;const o=f.value.map(n=>!n||!l[n.key]?n:{...n,key:l[n.key]});f.value=o,(F(o).length||!pe(o))&&(f.value=Ue(Ne(e))),oe.value=0,z.value=0,X.value=0,T.value=-1,j.value=!1,ye.value=v(e.danger),xe.value={number:J.value+1,title:e.title,foods:[...e.safe,e.danger].map(n=>({key:n,...v(n)}))},D.value=!0,g.value=`已进入${e.title},橙框${v(e.danger).short}可替换`,S("fanfare","sparkle",100,.65),fe&&clearTimeout(fe),fe=setTimeout(()=>{D.value=!1},1800)}function Pe(a,e,l){ie&&clearTimeout(ie),w.value={visible:!0,count:a,kicker:a>=5?"JACKPOT · 777":a===4?"ONE MORE · 再来一罐":"LUCKY · 小惊喜",title:e,reward:l};const o=a>=5?2200:a===4?1900:1150;ie=setTimeout(()=>{w.value.visible=!1},o)}function ha(){ce&&clearTimeout(ce),ee.value=!1,setTimeout(()=>{ee.value=!0},20),ce=setTimeout(()=>{ee.value=!1},6e3)}function mt(){y("tap",.9,.82),setTimeout(()=>y("tap",1,1.05),150),setTimeout(()=>y("tap",1.08,1.35),300),setTimeout(()=>S("comboMega","fanfare",100,.85),430),setTimeout(()=>S("blast","sparkle",90,.75),690),L("medium"),setTimeout(()=>L("medium"),170),setTimeout(()=>L("heavy"),430)}function ht(a,e,l=""){aa.value=Math.min(3,e>=3||a>=5?3:a>=4?2:1),l==="fire-high"?C.value="火焰移出高糖!":e>=3?C.value=`${e} 连消!`:l==="fire-triggered"?C.value="火焰清除!":l==="burst-triggered"?C.value="范围爆破!":l==="burst"?C.value="L形惊喜!":a>=5?C.value="五连惊喜!":a>=4?C.value="四连!":C.value="消除!",setTimeout(()=>{C.value=""},520)}function L(a="light"){try{t.index.vibrateShort({type:a})}catch{}}function dt(a){const e=[...a],l=new Set,o=new Set;let n=!1,r=!1;for(;e.length;){const u=e.shift();if(l.has(u))continue;l.add(u);const c=f.value[u];if(!(c!=null&&c.special))continue;r=!0;const s=[];if(c.special==="row"){const m=Math.floor(u/i);for(let d=0;d<i;d+=1)s.push(m*i+d)}else if(c.special==="col"){const m=u%i;for(let d=0;d<x;d+=1)s.push(d*i+m)}else if(c.special==="burst"){n=!0;const m=Math.floor(u/i),d=u%i;for(let P=Math.max(0,m-1);P<=Math.min(x-1,m+1);P+=1)for(let U=Math.max(0,d-1);U<=Math.min(i-1,d+1);U+=1)s.push(P*i+U)}else f.value.forEach((m,d)=>{(m==null?void 0:m.key)===c.key&&s.push(d)});s.forEach(m=>o.add(m)),s.forEach(m=>{a.has(m)||(a.add(m),e.push(m))})}return B.value=[...o],{hasBurst:n,hasFire:r}}function gt(a=!1){const e=Array(x*i).fill(null);for(let r=0;r<i;r+=1){const u=[];for(let c=x-1;c>=0;c-=1){const s=f.value[c*i+r];s&&u.push(s)}u.forEach((c,s)=>{e[(x-1-s)*i+r]=c})}const l=a?pt(e):[],o=new Set(l),n=l.length?bt(e,l):"";for(let r=0;r<x;r+=1)for(let u=0;u<i;u+=1){const c=r*i+u;if(!e[c]){const s=o.has(c)?n:wt(e,c,u);e[c]=_e(s)}}return f.value=e,l.length===3}function pt(a){const e=new Set(a.map((l,o)=>l?-1:o).filter(l=>l>=0));for(let l=0;l<x;l+=1)for(let o=0;o<=i-3;o+=1){const n=[0,1,2].map(r=>l*i+o+r);if(n.every(r=>e.has(r)))return n}for(let l=0;l<i;l+=1)for(let o=0;o<=x-3;o+=1){const n=[0,1,2].map(r=>(o+r)*i+l);if(n.every(r=>e.has(r)))return n}return[]}function bt(a,e){var l;return((l=p.value.safe.map(o=>({key:o,nearby:a.reduce((n,r,u)=>(r==null?void 0:r.key)===o&&e.some(c=>Ce(c,u))?n+1:n,0)})).sort((o,n)=>o.nearby-n.nearby)[0])==null?void 0:l.key)||p.value.safe[0]}function wt(a,e,l){for(let n=0;n<16;n+=1){const r=yt(a,l);if(!da(a,e,r))return r}return[...p.value.safe,p.value.danger].find(n=>!da(a,e,n))||p.value.safe[(e+l)%p.value.safe.length]}function da(a,e,l){const o=Math.floor(e/i),n=e%i,r=s=>{var m;return s===e?l:(m=a[s])==null?void 0:m.key};let u=1;for(let s=n-1;s>=0&&r(o*i+s)===l;s-=1)u+=1;for(let s=n+1;s<i&&r(o*i+s)===l;s+=1)u+=1;if(u>=3)return!0;let c=1;for(let s=o-1;s>=0&&r(s*i+n)===l;s-=1)c+=1;for(let s=o+1;s<x&&r(s*i+n)===l;s+=1)c+=1;return c>=3}function yt(a,e=-1){if(a.filter(n=>n&&v(n.key).high).length<Et&&Math.random()<Ca)return p.value.danger;const o=p.value.safe;return e>=0&&Math.random()<La?o[e%o.length]:o[Math.floor(Math.random()*o.length)]}function kt(a){const e=a.filter(o=>o.direction==="row"&&o.indices.length===3),l=a.filter(o=>o.direction==="col"&&o.indices.length===3);for(const o of e)for(const n of l){const r=o.indices.find(u=>n.indices.includes(u));if(r!==void 0)return{intersection:r,row:o,col:n}}return null}function F(a){var l,o,n,r;const e=[];for(let u=0;u<x;u+=1){let c=0;for(;c<i;){let s=c+1;for(;s<i&&((l=a[u*i+s])==null?void 0:l.key)===((o=a[u*i+c])==null?void 0:o.key);)s+=1;a[u*i+c]&&s-c>=3&&e.push({direction:"row",indices:Array.from({length:s-c},(m,d)=>u*i+c+d)}),c=s}}for(let u=0;u<i;u+=1){let c=0;for(;c<x;){let s=c+1;for(;s<x&&((n=a[s*i+u])==null?void 0:n.key)===((r=a[c*i+u])==null?void 0:r.key);)s+=1;a[c*i+u]&&s-c>=3&&e.push({direction:"col",indices:Array.from({length:s-c},(m,d)=>(c+d)*i+u)}),c=s}}return e}function Mt(a){O.value.kind==="food"&&Be(a.filter(e=>e.key===O.value.key).length)}function Be(a){if(!a||(z.value+=a,z.value<O.value.target))return;k.value+=120;const e=Le(1);e.granted>0?(ga(),g.value="小目标完成,驼乳粉已放入道具栏"):g.value=`驼乳粉已满,多余奖励换 ${e.overflowScore} 分`,t.index.showToast({title:e.granted>0?"小目标完成:驼乳粉 +1":`驼乳粉已满:奖励换 ${e.overflowScore} 分`,icon:"none"}),oe.value=(oe.value+1)%4,z.value=0,X.value=0}function ga(){ve&&clearTimeout(ve),Ze.value+=1,ne.value=!0,Se=Date.now()+1600,S("boost","sparkle",75,.55),L("light"),ve=setTimeout(()=>{ne.value=!1},1150)}function pa(){if(Ma(),!Fe()){if(D.value){G();return}if(Date.now()<Se){G();return}g.value=V.value>=2?`漂亮!完成 ${V.value} 连消`:"食物已从上方补充,继续挑战",G()}}function Fe(){return xt()||K.value?!1:(wa(),!0)}function xt(){return pe(f.value)}function pe(a){return!!ba(a)}function ba(a){for(let e=0;e<a.length;e+=1){const l=[];e%i<i-1&&l.push(e+1),e+i<a.length&&l.push(e+i);for(const o of l){const n=a.map(u=>({...u}));[n[e],n[o]]=[n[o],n[e]];const r=F(n);if(r.length&&!r.flatMap(u=>u.indices).some(u=>v(n[u].key).high))return{from:e,to:o}}}return null}async function wa(){if(K.value||_.value)return;K.value=!0,b.value=!0,ue.value=!1,re.value=!0,T.value=-1,j.value=!1,g.value="没有可消除组合,正在重新洗牌",y("reshuffle",.9),L("medium"),await N(760);const a=f.value.map(l=>({...l}));let e=null;for(let l=0;l<240;l+=1){const o=Ge(a);if(!F(o).length&&pe(o)){e=o;break}}f.value=e||ya(),ue.value=!0,g.value="洗牌完成,新的消除机会已经出现",S("drop","sparkle",70,.55),L("light"),await N(520),re.value=!1,K.value=!1,b.value=!1,G()}function Ge(a){const e=a.map(l=>({...l}));for(let l=e.length-1;l>0;l-=1){const o=Math.floor(Math.random()*(l+1));[e[l],e[o]]=[e[o],e[l]]}return e}function ya(){return Ue(Ne(p.value))}function Ne(a){const[e,l,o,n]=a.safe,r=a.danger;return[e,l,o,n,l,o,n,e,o,n,e,r,n,e,r,l,e,l,o,n]}function Ue(a){let e=a.map(l=>_e(l));for(let l=0;l<240;l+=1){if(!F(e).length&&pe(e))return e;e=Ge(e)}return St(p.value).map(l=>_e(l))}function St(a){const[e,l,o,n]=a.safe,r=a.danger;return[n,e,r,o,n,o,l,r,o,e,l,e,n,n,e,e,l,n,o,l]}function ka(a){const e=a.filter(Boolean).map(l=>({...l}));if(e.length===x*i)for(let l=0;l<300;l+=1){const o=Ge(e);if(!F(o).length&&pe(o))return o}return ya()}function Tt(a){var n,r;if(!a)return"";const e=v((n=f.value[a.from])==null?void 0:n.key).short,l=v((r=f.value[a.to])==null?void 0:r.key).short,o=a.to===a.from+1?"向右":"向下";return`提示:把${e}${o}与${l}交换`}function G(){W&&clearTimeout(W),W=setTimeout(()=>{if(b.value||_.value||D.value)return;const a=ba(f.value);if(!a){wa();return}g.value=Tt(a)},5e3)}function Ma(){k.value<=le.value||(le.value=k.value,t.index.setStorageSync("tongji_endless_best",le.value))}function N(a){return new Promise(e=>setTimeout(e,a))}return(a,e)=>t.e({a:ee.value},ee.value?{b:t.f(t.unref(Pa),(l,o,n)=>({a:t.t(l.emoji),b:l.id,c:l.emoji?1:"",d:t.s(l.style)}))}:{},{c:t.p({name:"chevron-left",size:"md",color:"#155e4b"}),d:t.o(ca,"cd"),e:t.t(J.value+1),f:t.t(p.value.title),g:t.p({name:"volume",size:"sm",color:t.unref(q)?"#155e4b":"#94a3b8"}),h:t.o(et,"35"),i:t.p({name:"info",size:"sm",color:"#155e4b"}),j:t.o(Za,"e4"),k:t.s(ea.value),l:t.t($.value),m:t.t(k.value),n:t.t(he.value),o:b.value||K.value||D.value||w.value.visible?1:"",p:t.o(Xa,"7c"),q:t.p({name:"trophy",size:"sm",color:"#8a5a10"}),r:t.t(O.value.label),s:t.t(Math.min(z.value,O.value.target)),t:t.t(O.value.target),v:Fa.value+"%",w:ne.value},ne.value?{x:v("camel").img,y:Ze.value}:{},{z:t.t(Math.max(V.value,1)),A:V.value>=3?1:"",B:A.value>0},A.value>0?{C:t.t(A.value)}:{},{D:t.t(na.value),E:t.f(3,(l,o,n)=>({a:l,b:l<=na.value?1:""})),F:t.f(Ga.value,(l,o,n)=>({a:t.f(l,(r,u,c)=>t.e({a:r.special},r.special?t.e({b:r.special==="row"||r.special==="col"},r.special==="row"||r.special==="col"?{}:r.special==="burst"?{}:{},{c:r.special==="burst",d:t.n(`is-${r.special}`)}):{},{e:B.value.includes(r.index)},B.value.includes(r.index)?{}:{},{f:v(r.key).img,g:t.t(v(r.key).short),h:t.t(v(r.key).levelLabel||"低糖"),i:t.n(`is-${v(r.key).level||"low"}`),j:j.value&&v(r.key).replaceable},j.value&&v(r.key).replaceable?{}:{},{k:r.id,l:t.n(at(r)),m:t.s(tt(r.index)),n:t.o(s=>rt(r.index),r.id),o:t.o(s=>lt(s,r.index),r.id),p:t.o(s=>ot(s,r.index),r.id),q:t.o(s=>nt(s,r.index),r.id)})),b:o})),G:b.value?1:"",H:C.value},C.value?{I:t.t(C.value),J:t.n(`is-level-${aa.value}`)}:{},{K:w.value.visible},w.value.visible?t.e({L:t.t(w.value.kicker),M:w.value.count===3},w.value.count===3?{N:t.f(3,(l,o,n)=>({a:l})),O:v("camel").img}:w.value.count===4?{Q:t.f(5,(l,o,n)=>t.e({a:l<5},l<5?{b:v("camel").img}:{},{c:l,d:l===5?1:""}))}:{R:t.f(5,(l,o,n)=>({a:l})),S:v("camel").img,T:t.f(3,(l,o,n)=>({a:l}))},{P:w.value.count===4,U:t.t(w.value.title),V:w.value.count>=5},w.value.count>=5?{}:{},{W:t.t(w.value.reward),X:t.n(`is-match-${w.value.count}`)}):{},{Y:t.p({name:"bulb",size:"sm",color:"#9a6718"}),Z:t.t(g.value),aa:v("camel").img,ab:t.p({name:"refresh",size:"sm",color:"#ffffff"}),ac:t.t(v(p.value.danger).short),ad:t.t(H.value),ae:j.value?1:"",af:H.value<=0||b.value?1:"",ag:t.o(ut,"1c"),ah:se.value},se.value?t.e({ai:t.t(Ka.value),aj:t.unref(Ve)?"":1,ak:t.t(qa.value),al:t.t(Ha.value),am:t.t(za.value),an:t.t(he.value),ao:t.t(Te.value),ap:Oe.value>0},Oe.value>0?{aq:t.t(he.value),ar:t.t(Oe.value)}:{as:t.t(he.value)},{at:ra.value},ra.value?{}:{av:t.t(Ua.value)},{aw:t.f(me.value,(l,o,n)=>t.e({a:t.t(l.rank),b:l.avatarUrl},l.avatarUrl?{c:l.avatarUrl}:{d:t.t(l.avatar)},{e:t.n(`is-tone-${l.tone}`),f:t.t(l.name),g:l.isMe},l.isMe?{}:{},{h:t.t(l.count),i:l.id,j:l.isMe?1:""})),ax:t.t(de.value.source),ay:t.o(Qa,"02"),az:t.t(de.value.text),aA:de.value.userGenerated},de.value.userGenerated?{}:{},{aB:t.n(`is-${de.value.tone}`),aC:t.o(Ya,"f2"),aD:t.o(()=>{},"9c")}):{},{aE:re.value},re.value?{aF:t.p({name:"refresh",size:"lg",color:"#ffffff"}),aG:t.t(ue.value?"洗牌完成":"没有可消除组合"),aH:t.t(ue.value?"新的消除机会已经出现":"正在为您重新洗牌,请稍候"),aI:t.o(()=>{},"40")}:{},{aJ:D.value},D.value?{aK:t.t(xe.value.number),aL:t.t(xe.value.title),aM:t.f(xe.value.foods,(l,o,n)=>({a:l.img,b:t.t(l.short),c:l.key,d:l.high?1:""})),aN:t.o(()=>{},"01")}:{},{aO:_.value},_.value?{aP:t.t(ye.value.name),aQ:t.t(ye.value.tip),aR:t.t(k.value),aS:t.t(le.value),aT:t.o(ia,"33"),aU:t.o(ca,"98"),aV:t.o(()=>{},"72")}:{},{aW:t.o(E,"77"),aX:t.o(E,"a4")})}},Ut=t._export_sfc(_a,[["__scopeId","data-v-ace1d107"]]);_a.__runtimeHooks=6;wx.createPage(Ut);
|
||
//# sourceMappingURL=../../../.sourcemap/mp-weixin/tongji/endless-game/index.js.map
|