Files
2025-12-15 17:00:06 +08:00

695 lines
22 KiB
TypeScript

/**
* 格子仿画 - 3x3 网格形状数据
* 适用于入门级,低龄儿童
*/
import { ShapeTemplate } from '../types/gridTypes';
// ==================== 3x3 形状模板 ====================
/** 所有 3x3 形状模板 总共39个形状模板 */
export const ALL_3X3_SHAPES: ShapeTemplate[] = [
/** 简单十字形 */
{
id: 'cross-3x3-001',
name: '十字形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#FFE176' }, // 顶部 - 黄色
{ x: 0, y: 1, color: '#F9A857' }, // 左侧 - 橙色
{ x: 1, y: 1, color: '#ED6D50' }, // 中心 - 红色
{ x: 2, y: 1, color: '#F9A857' }, // 右侧 - 橙色
{ x: 1, y: 2, color: '#FFE176' }, // 底部 - 黄色
],
},
/** L形 */
{
id: 'l-3x3-001',
name: 'L形',
category: 'geometric',
difficulty: 1,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#79A7ED' }, // 蓝色
{ x: 0, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 0, y: 2, color: '#53D1B6' }, // 青色
{ x: 1, y: 2, color: '#B2D94B' }, // 绿色
{ x: 2, y: 2, color: '#FFE176' }, // 黄色
],
},
/** 对角线 */
{
id: 'diagonal-3x3-001',
name: '对角线',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#ED6D50' }, // 红色
{ x: 1, y: 1, color: '#F9A857' }, // 橙色
{ x: 2, y: 2, color: '#FFE176' }, // 黄色
],
},
/** 反向对角线 */
{
id: 'reverse-diagonal-3x3-001',
name: '反向对角线',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 0, y: 2, color: '#F2A4C0' },
{ x: 1, y: 1, color: '#79A7ED' },
{ x: 2, y: 0, color: '#B2D94B' },
],
},
/** 小房子 */
{
id: 'house-3x3-001',
name: '小房子',
category: 'object',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#ED6D50' }, // 屋顶
{ x: 0, y: 1, color: '#FFE176' }, // 左侧墙
{ x: 1, y: 1, color: '#FFE176' }, // 中间墙
{ x: 2, y: 1, color: '#FFE176' }, // 右侧墙
{ x: 1, y: 2, color: '#BC8F71' }, // 门
],
},
/** 小星星 */
{
id: 'star-3x3-001',
name: '小星星',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#FFE176' }, // 顶部 - 黄色
{ x: 0, y: 1, color: '#F9A857' }, // 左侧 - 橙色
{ x: 1, y: 1, color: '#ED6D50' }, // 中心 - 红色
{ x: 2, y: 1, color: '#F9A857' }, // 右侧 - 橙色
{ x: 1, y: 2, color: '#FFE176' }, // 底部 - 黄色
],
},
/** T形 */
{
id: 't-3x3-001',
name: 'T形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#53D1B6' }, // 青色
{ x: 1, y: 0, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 0, color: '#53D1B6' }, // 青色
{ x: 1, y: 1, color: '#79A7ED' }, // 蓝色
{ x: 1, y: 2, color: '#6CD2EA' }, // 浅蓝
],
},
/** 倒T形 */
{
id: 'reverse-t-3x3-001',
name: '倒T形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 0, y: 2, color: '#ED6D50' },
{ x: 1, y: 2, color: '#F9A857' },
{ x: 2, y: 2, color: '#FFE176' },
{ x: 1, y: 1, color: '#B2D94B' },
{ x: 1, y: 0, color: '#79A7ED' },
],
},
/** 三角形 */
{
id: 'triangle-3x3-001',
name: '三角形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#FFE176' }, // 顶部 - 黄色
{ x: 0, y: 1, color: '#F9A857' }, // 左侧 - 橙色
{ x: 1, y: 1, color: '#ED6D50' }, // 中心 - 红色
{ x: 2, y: 1, color: '#F9A857' }, // 右侧 - 橙色
{ x: 0, y: 2, color: '#F2A4C0' }, // 左下 - 粉色
{ x: 1, y: 2, color: '#ED6D50' }, // 中下 - 红色
{ x: 2, y: 2, color: '#F2A4C0' }, // 右下 - 粉色
],
},
/** 正方形 */
{
id: 'square-3x3-001',
name: '正方形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#9C98DE' }, // 紫色
{ x: 1, y: 0, color: '#F2A4C0' }, // 粉色
{ x: 0, y: 1, color: '#F2A4C0' }, // 粉色
{ x: 1, y: 1, color: '#9C98DE' }, // 紫色
],
},
/** 向上箭头 */
{
id: 'arrow-up-3x3-001',
name: '向上箭头',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#6CD2EA' }, // 箭头顶部 - 浅蓝
{ x: 0, y: 1, color: '#53D1B6' }, // 左侧 - 青色
{ x: 1, y: 1, color: '#79A7ED' }, // 中心 - 蓝色
{ x: 2, y: 1, color: '#53D1B6' }, // 右侧 - 青色
{ x: 1, y: 2, color: '#6CD2EA' }, // 箭头杆 - 浅蓝
],
},
/** 数字7 */
{
id: 'number-7-3x3-001',
name: '数字7',
category: 'geometric',
difficulty: 1,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#FC9B6C' }, // 橙色
{ x: 1, y: 0, color: '#F9A857' }, // 浅橙
{ x: 2, y: 0, color: '#ED6D50' }, // 红色
{ x: 2, y: 1, color: '#F9A857' }, // 浅橙
{ x: 1, y: 2, color: '#ED6D50' }, // 红色
{ x: 2, y: 2, color: '#FC9B6C' }, // 橙色
],
},
/** 边框 */
{
id: 'frame-3x3-001',
name: '边框',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#B2D94B' }, // 绿色
{ x: 1, y: 0, color: '#53D1B6' }, // 青色
{ x: 2, y: 0, color: '#B2D94B' }, // 绿色
{ x: 0, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 0, y: 2, color: '#B2D94B' }, // 绿色
{ x: 1, y: 2, color: '#53D1B6' }, // 青色
{ x: 2, y: 2, color: '#B2D94B' }, // 绿色
],
},
/** 加号(大) */
{
id: 'plus-3x3-001',
name: '加号',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#F2A4C0' }, // 粉色
{ x: 0, y: 1, color: '#ED6D50' }, // 红色
{ x: 1, y: 1, color: '#F9A857' }, // 橙色
{ x: 2, y: 1, color: '#ED6D50' }, // 红色
{ x: 1, y: 2, color: '#F2A4C0' }, // 粉色
],
},
/** 点阵 */
{
id: 'dots-3x3-001',
name: '点阵',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#79A7ED' }, // 蓝色
{ x: 2, y: 0, color: '#6CD2EA' }, // 浅蓝
{ x: 1, y: 1, color: '#53D1B6' }, // 青色
{ x: 0, y: 2, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 2, color: '#79A7ED' }, // 蓝色
],
},
/** 向下箭头 */
{
id: 'arrow-down-3x3-001',
name: '向下箭头',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#6CD2EA' }, // 箭头杆 - 浅蓝
{ x: 0, y: 1, color: '#53D1B6' }, // 左侧 - 青色
{ x: 1, y: 1, color: '#79A7ED' }, // 中心 - 蓝色
{ x: 2, y: 1, color: '#53D1B6' }, // 右侧 - 青色
{ x: 1, y: 2, color: '#6CD2EA' }, // 箭头底部 - 浅蓝
],
},
/** 菱形 */
{
id: 'diamond-3x3-001',
name: '菱形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#FFE176' }, // 顶部 - 黄色
{ x: 0, y: 1, color: '#F9A857' }, // 左侧 - 橙色
{ x: 1, y: 1, color: '#ED6D50' }, // 中心 - 红色
{ x: 2, y: 1, color: '#F9A857' }, // 右侧 - 橙色
{ x: 1, y: 2, color: '#FFE176' }, // 底部 - 黄色
],
},
/** U形 */
{
id: 'u-3x3-001',
name: 'U形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#53D1B6' }, // 青色
{ x: 2, y: 0, color: '#53D1B6' }, // 青色
{ x: 0, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 0, y: 2, color: '#79A7ED' }, // 蓝色
{ x: 1, y: 2, color: '#B2D94B' }, // 绿色
{ x: 2, y: 2, color: '#79A7ED' }, // 蓝色
],
},
/** C形 */
{
id: 'c-3x3-001',
name: 'C形',
category: 'geometric',
difficulty: 1,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#ED6D50' }, // 红色
{ x: 1, y: 0, color: '#F9A857' }, // 橙色
{ x: 0, y: 1, color: '#FFE176' }, // 黄色
{ x: 0, y: 2, color: '#F9A857' }, // 橙色
{ x: 1, y: 2, color: '#ED6D50' }, // 红色
],
},
/** 倒三角形 */
{
id: 'inverted-triangle-3x3-001',
name: '倒三角形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#B2D94B' }, // 绿色
{ x: 1, y: 0, color: '#53D1B6' }, // 青色
{ x: 2, y: 0, color: '#B2D94B' }, // 绿色
{ x: 0, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 1, y: 1, color: '#79A7ED' }, // 蓝色
{ x: 2, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 1, y: 2, color: '#53D1B6' }, // 底部 - 青色
],
},
/** 数字1 */
{
id: 'number-1-3x3-001',
name: '数字1',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#FC9B6C' }, // 橙色
{ x: 1, y: 1, color: '#F9A857' }, // 浅橙
{ x: 1, y: 2, color: '#ED6D50' }, // 红色
],
},
/** 数字4 */
{
id: 'number-4-3x3-001',
name: '数字4',
category: 'geometric',
difficulty: 1,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#F2A4C0' }, // 粉色
{ x: 1, y: 0, color: '#ED6D50' }, // 红色
{ x: 0, y: 1, color: '#F9A857' }, // 橙色
{ x: 1, y: 1, color: '#FFE176' }, // 黄色
{ x: 2, y: 1, color: '#F2A4C0' }, // 粉色
{ x: 2, y: 2, color: '#ED6D50' }, // 红色
],
},
/** 圆形(3x3近似) */
{
id: 'circle-3x3-001',
name: '圆形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#9C98DE' }, // 紫色
{ x: 0, y: 1, color: '#F2A4C0' }, // 粉色
{ x: 2, y: 1, color: '#F2A4C0' }, // 粉色
{ x: 1, y: 2, color: '#9C98DE' }, // 紫色
],
},
/** 数字0 */
{
id: 'number-0-3x3-001',
name: '数字0',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#FFE176' }, // 黄色
{ x: 1, y: 0, color: '#F9A857' }, // 橙色
{ x: 2, y: 0, color: '#FFE176' }, // 黄色
{ x: 0, y: 1, color: '#F9A857' }, // 橙色
{ x: 2, y: 1, color: '#F9A857' }, // 橙色
{ x: 0, y: 2, color: '#FFE176' }, // 黄色
{ x: 1, y: 2, color: '#F9A857' }, // 橙色
{ x: 2, y: 2, color: '#FFE176' }, // 黄色
],
},
/** 数字8 */
{
id: 'number-8-3x3-001',
name: '数字8',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#79A7ED' }, // 蓝色
{ x: 1, y: 0, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 0, color: '#79A7ED' }, // 蓝色
{ x: 0, y: 1, color: '#53D1B6' }, // 青色
{ x: 1, y: 1, color: '#B2D94B' }, // 绿色
{ x: 2, y: 1, color: '#53D1B6' }, // 青色
{ x: 0, y: 2, color: '#79A7ED' }, // 蓝色
{ x: 1, y: 2, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 2, color: '#79A7ED' }, // 蓝色
],
},
/** 多色十字形 */
{
id: 'colorful-cross-3x3-001',
name: '多色十字形',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#FFE176' }, // 顶部 - 黄色
{ x: 0, y: 1, color: '#F9A857' }, // 左侧 - 橙色
{ x: 1, y: 1, color: '#ED6D50' }, // 中心 - 红色
{ x: 2, y: 1, color: '#F9A857' }, // 右侧 - 橙色
{ x: 1, y: 2, color: '#FFE176' }, // 底部 - 黄色
],
},
/** 多色L形 */
{
id: 'colorful-l-3x3-001',
name: '多色L形',
category: 'geometric',
difficulty: 1,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#79A7ED' }, // 蓝色
{ x: 0, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 0, y: 2, color: '#53D1B6' }, // 青色
{ x: 1, y: 2, color: '#B2D94B' }, // 绿色
{ x: 2, y: 2, color: '#FFE176' }, // 黄色
],
},
/** 多色星星 */
{
id: 'colorful-star-3x3-001',
name: '多色星星',
category: 'geometric',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#FFE176' }, // 顶部 - 黄色
{ x: 0, y: 1, color: '#F9A857' }, // 左侧 - 橙色
{ x: 1, y: 1, color: '#ED6D50' }, // 中心 - 红色
{ x: 2, y: 1, color: '#F9A857' }, // 右侧 - 橙色
{ x: 1, y: 2, color: '#FFE176' }, // 底部 - 黄色
],
},
/** 多色小房子 */
{
id: 'colorful-house-3x3-001',
name: '多色小房子',
category: 'object',
difficulty: 1,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#ED6D50' }, // 屋顶 - 红色
{ x: 0, y: 1, color: '#FFE176' }, // 左侧墙 - 黄色
{ x: 1, y: 1, color: '#F9A857' }, // 中间墙 - 橙色
{ x: 2, y: 1, color: '#FFE176' }, // 右侧墙 - 黄色
{ x: 1, y: 2, color: '#BC8F71' }, // 门 - 棕色
],
},
/** 数字2 */
{
id: 'number-2-3x3-001',
name: '数字2',
category: 'geometric',
difficulty: 2,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#79A7ED' }, // 蓝色
{ x: 1, y: 0, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 0, color: '#53D1B6' }, // 青色
{ x: 2, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 0, y: 2, color: '#53D1B6' }, // 青色
{ x: 1, y: 2, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 2, color: '#79A7ED' }, // 蓝色
],
},
/** 数字3 */
{
id: 'number-3-3x3-001',
name: '数字3',
category: 'geometric',
difficulty: 2,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#6CD2EA' }, // 浅蓝
{ x: 1, y: 0, color: '#53D1B6' }, // 青色
{ x: 2, y: 0, color: '#79A7ED' }, // 蓝色
{ x: 2, y: 1, color: '#53D1B6' }, // 青色
{ x: 0, y: 2, color: '#79A7ED' }, // 蓝色
{ x: 1, y: 2, color: '#53D1B6' }, // 青色
{ x: 2, y: 2, color: '#6CD2EA' }, // 浅蓝
],
},
/** 数字5 */
{
id: 'number-5-3x3-001',
name: '数字5',
category: 'geometric',
difficulty: 2,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#53D1B6' }, // 青色
{ x: 1, y: 0, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 0, color: '#79A7ED' }, // 蓝色
{ x: 0, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 0, y: 2, color: '#79A7ED' }, // 蓝色
{ x: 1, y: 2, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 2, color: '#53D1B6' }, // 青色
],
},
/** 数字6 */
{
id: 'number-6-3x3-001',
name: '数字6',
category: 'geometric',
difficulty: 2,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#B2D94B' }, // 绿色
{ x: 1, y: 0, color: '#53D1B6' }, // 青色
{ x: 0, y: 1, color: '#6CD2EA' }, // 浅蓝
{ x: 0, y: 2, color: '#79A7ED' }, // 蓝色
{ x: 1, y: 2, color: '#6CD2EA' }, // 浅蓝
{ x: 2, y: 2, color: '#53D1B6' }, // 青色
],
},
/** 数字9 */
{
id: 'number-9-3x3-001',
name: '数字9',
category: 'geometric',
difficulty: 2,
supportSymmetry: false,
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#F2A4C0' }, // 粉色
{ x: 1, y: 0, color: '#ED6D50' }, // 红色
{ x: 2, y: 0, color: '#F9A857' }, // 橙色
{ x: 0, y: 1, color: '#ED6D50' }, // 红色
{ x: 2, y: 1, color: '#FFE176' }, // 黄色
{ x: 1, y: 2, color: '#F9A857' }, // 橙色
{ x: 2, y: 2, color: '#ED6D50' }, // 红色
],
},
/** 字母A */
{
id: 'letter-a-3x3-001',
name: '字母A',
category: 'geometric',
difficulty: 2,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 1, y: 0, color: '#FFE176' }, // 黄色
{ x: 0, y: 1, color: '#F9A857' }, // 橙色
{ x: 1, y: 1, color: '#ED6D50' }, // 红色
{ x: 2, y: 1, color: '#F9A857' }, // 橙色
{ x: 0, y: 2, color: '#FFE176' }, // 黄色
{ x: 2, y: 2, color: '#FFE176' }, // 黄色
],
},
/** 字母H */
{
id: 'letter-h-3x3-001',
name: '字母H',
category: 'geometric',
difficulty: 2,
supportSymmetry: true,
symmetryType: 'vertical',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#F9A857' }, // 橙色
{ x: 2, y: 0, color: '#F9A857' }, // 橙色
{ x: 0, y: 1, color: '#ED6D50' }, // 红色
{ x: 1, y: 1, color: '#FFE176' }, // 黄色
{ x: 2, y: 1, color: '#ED6D50' }, // 红色
{ x: 0, y: 2, color: '#F9A857' }, // 橙色
{ x: 2, y: 2, color: '#F9A857' }, // 橙色
],
},
/** 字母O */
{
id: 'letter-o-3x3-001',
name: '字母O',
category: 'geometric',
difficulty: 2,
supportSymmetry: true,
symmetryType: 'both',
isComplete: true,
cells: [
{ x: 0, y: 0, color: '#ED6D50' }, // 红色
{ x: 1, y: 0, color: '#F9A857' }, // 橙色
{ x: 2, y: 0, color: '#ED6D50' }, // 红色
{ x: 0, y: 1, color: '#F9A857' }, // 橙色
{ x: 2, y: 1, color: '#F9A857' }, // 橙色
{ x: 0, y: 2, color: '#ED6D50' }, // 红色
{ x: 1, y: 2, color: '#F9A857' }, // 橙色
{ x: 2, y: 2, color: '#ED6D50' }, // 红色
],
},
];
/**
* 随机获取一个 3x3 形状
*/
export function getRandom3x3Shape(): ShapeTemplate {
const randomIndex = Math.floor(Math.random() * ALL_3X3_SHAPES.length);
return ALL_3X3_SHAPES[randomIndex];
}