118 lines
3.1 KiB
TypeScript
118 lines
3.1 KiB
TypeScript
/**
|
|
* 格子仿画 - 3x3 网格形状数据
|
|
* 适用于入门级,低龄儿童
|
|
*/
|
|
|
|
import { GridCell, ShapeTemplate } from '../types/gridTypes';
|
|
|
|
// ==================== 3x3 形状模板 ====================
|
|
|
|
/** 简单十字形 */
|
|
export const CROSS_3X3: ShapeTemplate = {
|
|
id: 'cross-3x3-001',
|
|
name: '十字形',
|
|
recommendedSize: { rows: 3, cols: 3 },
|
|
category: 'geometric',
|
|
difficulty: 1,
|
|
supportSymmetry: true,
|
|
symmetryType: 'both',
|
|
isComplete: true,
|
|
cells: [
|
|
{ x: 1, y: 0, color: '#FFFF00' }, // 顶部
|
|
{ x: 0, y: 1, color: '#FFFF00' }, // 左侧
|
|
{ x: 1, y: 1, color: '#FFFF00' }, // 中心
|
|
{ x: 2, y: 1, color: '#FFFF00' }, // 右侧
|
|
{ x: 1, y: 2, color: '#FFFF00' }, // 底部
|
|
],
|
|
};
|
|
|
|
/** L形 */
|
|
export const L_SHAPE_3X3: ShapeTemplate = {
|
|
id: 'l-3x3-001',
|
|
name: 'L形',
|
|
recommendedSize: { rows: 3, cols: 3 },
|
|
category: 'geometric',
|
|
difficulty: 1,
|
|
supportSymmetry: false,
|
|
isComplete: true,
|
|
cells: [
|
|
{ x: 0, y: 0, color: '#0000FF' },
|
|
{ x: 0, y: 1, color: '#0000FF' },
|
|
{ x: 0, y: 2, color: '#0000FF' },
|
|
{ x: 1, y: 2, color: '#0000FF' },
|
|
{ x: 2, y: 2, color: '#0000FF' },
|
|
],
|
|
};
|
|
|
|
/** 对角线 */
|
|
export const DIAGONAL_3X3: ShapeTemplate = {
|
|
id: 'diagonal-3x3-001',
|
|
name: '对角线',
|
|
recommendedSize: { rows: 3, cols: 3 },
|
|
category: 'geometric',
|
|
difficulty: 1,
|
|
supportSymmetry: true,
|
|
symmetryType: 'both',
|
|
isComplete: true,
|
|
cells: [
|
|
{ x: 0, y: 0, color: '#FF0000' },
|
|
{ x: 1, y: 1, color: '#FF0000' },
|
|
{ x: 2, y: 2, color: '#FF0000' },
|
|
],
|
|
};
|
|
|
|
/** 小房子 */
|
|
export const HOUSE_3X3: ShapeTemplate = {
|
|
id: 'house-3x3-001',
|
|
name: '小房子',
|
|
recommendedSize: { rows: 3, cols: 3 },
|
|
category: 'object',
|
|
difficulty: 1,
|
|
supportSymmetry: true,
|
|
symmetryType: 'vertical',
|
|
isComplete: true,
|
|
cells: [
|
|
{ x: 1, y: 0, color: '#FF0000' }, // 屋顶
|
|
{ x: 0, y: 1, color: '#FFFF00' }, // 左侧墙
|
|
{ x: 1, y: 1, color: '#FFFF00' }, // 中间墙
|
|
{ x: 2, y: 1, color: '#FFFF00' }, // 右侧墙
|
|
{ x: 1, y: 2, color: '#8B4513' }, // 门
|
|
],
|
|
};
|
|
|
|
/** 小星星 */
|
|
export const STAR_3X3: ShapeTemplate = {
|
|
id: 'star-3x3-001',
|
|
name: '小星星',
|
|
recommendedSize: { rows: 3, cols: 3 },
|
|
category: 'geometric',
|
|
difficulty: 1,
|
|
supportSymmetry: true,
|
|
symmetryType: 'both',
|
|
isComplete: true,
|
|
cells: [
|
|
{ x: 1, y: 0, color: '#FFD700' }, // 顶部
|
|
{ x: 0, y: 1, color: '#FFD700' },
|
|
{ x: 1, y: 1, color: '#FFD700' }, // 中心
|
|
{ x: 2, y: 1, color: '#FFD700' },
|
|
{ x: 1, y: 2, color: '#FFD700' }, // 底部
|
|
],
|
|
};
|
|
|
|
/** 所有 3x3 形状模板 */
|
|
export const ALL_3X3_SHAPES: ShapeTemplate[] = [
|
|
CROSS_3X3,
|
|
L_SHAPE_3X3,
|
|
DIAGONAL_3X3,
|
|
HOUSE_3X3,
|
|
STAR_3X3,
|
|
];
|
|
|
|
/**
|
|
* 随机获取一个 3x3 形状
|
|
*/
|
|
export function getRandom3x3Shape(): ShapeTemplate {
|
|
const randomIndex = Math.floor(Math.random() * ALL_3X3_SHAPES.length);
|
|
return ALL_3X3_SHAPES[randomIndex];
|
|
}
|