// TetrominoData using System; using System.Collections.Generic; using System.Text; using cfg; using EventCubeMelt; using EventCubeMelt.Utils; using UnityEngine; namespace EventCubeMelt { public class TetrominoData :ICloneable { // 定义高度和宽度 // 应该可以在 属性中控制 public const int WIDTH = 5; public const int HEIGHT = 5; #region 实例数据 private CellType [,] _shape; // // public TetrominoType Type { get; private set; } public int Width { get; private set; } = WIDTH; public int Height { get; private set; } = HEIGHT; // public Color Color { get; private set; } // 获得当前可用数值 public int UsableCount { get; private set; } = 0; #endregion public TetrominoData() { // Type = type; } public TetrominoData(int height, int width) { Width = width; Height = height; Initialize(); } public object Clone() { return MemberwiseClone(); } // 初始化 public void Initialize() { _shape = new CellType[Width, Height]; ClearGrid(); // Count = 0; } private void ClearGrid() { for (int row = 0; row < Width; row++) { for (int col = 0; col < Height; col++) { _shape[row, col] = CellType.Empty; } } } // public void LoadData(List pieceData) { UsableCount = 0; for (var row = 0; row < Height; row++) { for (var col = 0; col < Width; col++) { var ct = (CellType)pieceData[row * Width + col]; _shape[row, col] = ct; if (ct != CellType.Empty) { UsableCount++; } } } PrintShape(); } private void PrintShape() { var sb = new StringBuilder(); sb.Append("PrintShape-Piece"); for (var i = 0; i < Height; i++) { sb.Append(""); for (var j = 0; j < Width; j++) { sb.Append((int)_shape[i,j]); if (j < Width - 1) sb.Append(", "); } // sb.AppendLine(); sb.Append(" \n"); } sb.Append($"Count = {UsableCount}"); ELog(sb.ToString()); } #region 公共方法 public CellType this[int row, int col] { get { if (row >= 0 && row < Height && col >= 0 && col < Width) return _shape[row, col]; // return CellType.Empty; return CellType.Illegal; } } // public TetrominoData Rotate(bool clockwise) // { // var rotated = new TetrominoData(); // // 旋转形状矩阵 // if (Type == TetrominoType.O) // { // // O方块不旋转 // return rotated; // } // return rotated; // } #endregion private static void ELog(string message) { #if UNITY_EDITOR if (!EventCubeMeltLogPolicy.EnableELog) return; UnityEngine.Debug.Log($"{nameof(TetrominoData)} => {message}"); #endif } } }