219 lines
6.2 KiB
TypeScript
219 lines
6.2 KiB
TypeScript
/**
|
|
* 格子仿画 - 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];
|
|
}
|