/** * 格子仿画 - 5x5 网格形状数据 * 适用于常用尺寸,适中难度 */ import { GridCell, ShapeTemplate } from '../types/gridTypes'; // ==================== 5x5 形状模板 ==================== /** 十字形 */ export const CROSS_5X5: ShapeTemplate = { id: 'cross-5x5-001', name: '十字形', recommendedSize: { rows: 5, cols: 5 }, category: 'geometric', difficulty: 1, supportSymmetry: true, symmetryType: 'both', isComplete: true, cells: [ { x: 2, y: 0, color: '#FFFF00' }, // 顶部 { x: 2, y: 1, color: '#FFFF00' }, { x: 0, y: 2, color: '#FFFF00' }, // 左侧 { x: 1, y: 2, color: '#FFFF00' }, { x: 2, y: 2, color: '#FFFF00' }, // 中心 { x: 3, y: 2, color: '#FFFF00' }, { x: 4, y: 2, color: '#FFFF00' }, // 右侧 { x: 2, y: 3, color: '#FFFF00' }, { x: 2, y: 4, color: '#FFFF00' }, // 底部 ], }; /** X形 */ export const X_SHAPE_5X5: ShapeTemplate = { id: 'x-5x5-001', name: 'X形', recommendedSize: { rows: 5, cols: 5 }, category: 'geometric', difficulty: 2, supportSymmetry: true, symmetryType: 'both', isComplete: true, cells: [ { x: 0, y: 0, color: '#0000FF' }, { x: 1, y: 1, color: '#0000FF' }, { x: 2, y: 2, color: '#0000FF' }, { x: 3, y: 3, color: '#0000FF' }, { x: 4, y: 4, color: '#0000FF' }, { x: 4, y: 0, color: '#0000FF' }, { x: 3, y: 1, color: '#0000FF' }, { x: 1, y: 3, color: '#0000FF' }, { x: 0, y: 4, color: '#0000FF' }, ], }; /** 星星 */ export const STAR_5X5: ShapeTemplate = { id: 'star-5x5-001', name: '星星', recommendedSize: { rows: 5, cols: 5 }, category: 'geometric', difficulty: 3, supportSymmetry: true, symmetryType: 'both', isComplete: true, cells: [ { x: 2, y: 0, color: '#FFD700' }, // 顶部 { x: 1, y: 1, color: '#FFD700' }, { x: 3, y: 1, color: '#FFD700' }, { x: 0, y: 2, color: '#FFD700' }, { x: 2, y: 2, color: '#FFD700' }, // 中心 { x: 4, y: 2, color: '#FFD700' }, { x: 1, y: 3, color: '#FFD700' }, { x: 3, y: 3, color: '#FFD700' }, { x: 2, y: 4, color: '#FFD700' }, // 底部 ], }; /** Z字形 */ export const ZIGZAG_5X5: ShapeTemplate = { id: 'zigzag-5x5-001', name: 'Z字形', recommendedSize: { rows: 5, cols: 5 }, category: 'geometric', difficulty: 2, supportSymmetry: false, isComplete: true, cells: [ { x: 0, y: 0, color: '#800080' }, { x: 1, y: 0, color: '#800080' }, { x: 2, y: 0, color: '#800080' }, { x: 2, y: 1, color: '#800080' }, { x: 1, y: 2, color: '#800080' }, { x: 0, y: 2, color: '#800080' }, { x: 0, y: 3, color: '#800080' }, { x: 1, y: 3, color: '#800080' }, { x: 2, y: 4, color: '#800080' }, { x: 3, y: 4, color: '#800080' }, { x: 4, y: 4, color: '#800080' }, ], }; /** V字形 */ export const V_SHAPE_5X5: ShapeTemplate = { id: 'v-5x5-001', name: 'V字形', recommendedSize: { rows: 5, cols: 5 }, category: 'geometric', difficulty: 2, supportSymmetry: true, symmetryType: 'vertical', isComplete: true, cells: [ { x: 0, y: 0, color: '#00FF00' }, { x: 4, y: 0, color: '#00FF00' }, { x: 0, y: 1, color: '#00FF00' }, { x: 4, y: 1, color: '#00FF00' }, { x: 1, y: 2, color: '#00FF00' }, { x: 3, y: 2, color: '#00FF00' }, { x: 2, y: 3, color: '#00FF00' }, { x: 2, y: 4, color: '#00FF00' }, ], }; /** I字形 */ export const I_SHAPE_5X5: ShapeTemplate = { id: 'i-5x5-001', name: 'I字形', recommendedSize: { rows: 5, cols: 5 }, category: 'geometric', difficulty: 1, supportSymmetry: true, symmetryType: 'vertical', isComplete: true, cells: [ { x: 1, y: 0, color: '#FF7F00' }, { x: 2, y: 0, color: '#FF7F00' }, { x: 3, y: 0, color: '#FF7F00' }, { x: 2, y: 1, color: '#FF7F00' }, { x: 2, y: 2, color: '#FF7F00' }, { x: 2, y: 3, color: '#FF7F00' }, { x: 2, y: 4, color: '#FF7F00' }, { x: 1, y: 4, color: '#FF7F00' }, { x: 3, y: 4, color: '#FF7F00' }, ], }; /** 棋盘格 */ export const CHECKERBOARD_5X5: ShapeTemplate = { id: 'checkerboard-5x5-001', name: '棋盘格', recommendedSize: { rows: 5, cols: 5 }, category: 'geometric', difficulty: 3, supportSymmetry: true, symmetryType: 'both', isComplete: true, cells: [ { x: 0, y: 0, color: '#FFFF00' }, { x: 2, y: 0, color: '#FFFF00' }, { x: 4, y: 0, color: '#FFFF00' }, { x: 1, y: 1, color: '#FFFF00' }, { x: 3, y: 1, color: '#FFFF00' }, { x: 0, y: 2, color: '#FFFF00' }, { x: 2, y: 2, color: '#FFFF00' }, { x: 4, y: 2, color: '#FFFF00' }, { x: 1, y: 3, color: '#FFFF00' }, { x: 3, y: 3, color: '#FFFF00' }, { x: 0, y: 4, color: '#FFFF00' }, { x: 2, y: 4, color: '#FFFF00' }, { x: 4, y: 4, color: '#FFFF00' }, ], }; /** 心形(简化版) */ export const HEART_5X5: ShapeTemplate = { id: 'heart-5x5-001', name: '心形', recommendedSize: { rows: 5, cols: 5 }, category: 'object', difficulty: 2, supportSymmetry: true, symmetryType: 'vertical', isComplete: true, cells: [ { x: 1, y: 0, color: '#FF69B4' }, { x: 2, y: 0, color: '#FF69B4' }, { x: 3, y: 0, color: '#FF69B4' }, { x: 0, y: 1, color: '#FF69B4' }, { x: 2, y: 1, color: '#FF69B4' }, { x: 4, y: 1, color: '#FF69B4' }, { x: 1, y: 2, color: '#FF69B4' }, { x: 2, y: 2, color: '#FF69B4' }, { x: 3, y: 2, color: '#FF69B4' }, { x: 2, y: 3, color: '#FF69B4' }, { x: 2, y: 4, color: '#FF69B4' }, ], }; /** 所有 5x5 形状模板 */ export const ALL_5X5_SHAPES: ShapeTemplate[] = [ CROSS_5X5, X_SHAPE_5X5, STAR_5X5, ZIGZAG_5X5, V_SHAPE_5X5, I_SHAPE_5X5, CHECKERBOARD_5X5, HEART_5X5, ]; /** * 随机获取一个 5x5 形状 */ export function getRandom5x5Shape(): ShapeTemplate { const randomIndex = Math.floor(Math.random() * ALL_5X5_SHAPES.length); return ALL_5X5_SHAPES[randomIndex]; }