import MatchConnectDraw from '../shared/service/matchConnectDraw'; import { createFocusPage } from '../shared/common/focusPageMixin'; import { MatchConnectData } from '../shared/service/matchConnectDraw'; createFocusPage({ canvas: null as Canvas | null, ctx: null as RenderingContext | null, boxHeight: 0, boxWidth: 0, drawService: null as MatchConnectDraw | null, matchData: null as MatchConnectData | null, data: { pageTitle: '连连看', functionId: '', hasContent: false, showShareDialog: false, }, onLoad(options: { id?: string }) { const functionId = options.id || 'match-connect'; this.setData({ functionId, }); this.initPageInfo(functionId, '连连看'); }, onReady() { this.initCanvas({ createDrawService: ( canvas: Canvas, ctx: RenderingContext, options?: Record, ) => { return new MatchConnectDraw(canvas, ctx, options); }, drawServiceOptions: { title: this.data.pageTitle, subTitle: '快来根据物品连一连吧!', functionId: this.data.functionId, }, onCanvasReady: () => { // 初始随机生成 this.onRandom(); }, }); }, /** * 绘制Canvas内容 */ async drawCanvas() { if (!this.ctx || !this.drawService || !this.matchData) { return; } try { await this.drawService.draw(this.matchData); this.setData({ hasContent: true }); } catch (error) { console.error('绘制失败:', error); this.setData({ hasContent: false }); } }, /** * 随机生成 */ onRandom() { // 从33张图片中随机选择5张不重复的图片 const allImageIndices = Array.from({ length: 33 }, (_, i) => i + 1); const shuffled = [...allImageIndices].sort(() => Math.random() - 0.5); const selectedImages = shuffled.slice(0, 5); // 创建参考序列(顺序) const referenceSequence = [...selectedImages]; // 创建6个框,每个框包含5张图片的索引(位置由绘制服务随机生成) const boxes: Array<{ imageIndices: number[]; }> = []; for (let boxIndex = 0; boxIndex < 6; boxIndex++) { // 每个框使用相同的5张图片 boxes.push({ imageIndices: [...selectedImages], }); } this.matchData = { referenceSequence, boxes, }; this.drawCanvas(); }, });