/// <summary> /// タイプからカラーパターン生成 /// </summary> /// <param name="order"></param> /// <returns></returns> private static IEnumerator <ColorType> GenerateColorPattern(ColorOrderType order) { if (order == ColorOrderType.RBYG) { while (true) { yield return(ColorType.Red); yield return(ColorType.Blue); yield return(ColorType.Yellow); yield return(ColorType.Green); } } else { while (true) { yield return(ColorType.Red); yield return(ColorType.Blue); yield return(ColorType.Green); yield return(ColorType.Yellow); } } }
/// <summary> /// プリセットを指定してせり上げのこうげきだまパターンを生成 /// </summary> /// <param name="line"></param> /// <param name="order"></param> /// <param name="columns"></param> public void SetupLiftingPreset(LiftingColorLineType line, ColorOrderType order, int columns) { switch (line) { case LiftingColorLineType.None: liftAttackTamaPattern = null; break; case LiftingColorLineType.Horizontal: { var datas = GenerateDropOrderFlatLeftStart(columns, 4, 0); GenerateColorPatternHorizontal(datas, order, columns, 4, 0); liftAttackTamaPattern = datas; } break; case LiftingColorLineType.Vertical: { var datas = GenerateDropOrderFlatLeftStart(columns, 1, 0); GenerateColorPatternVertical(datas, order, columns, 1, 0); liftAttackTamaPattern = datas; } break; case LiftingColorLineType.VerticalHorizontalAlternately: { var datas = GenerateDropOrderFlatLeftStart(columns, 24, 0); GenerateColorPatternVerticalHorizontalAlternatelyLifting(datas, order, columns, 24, 0); liftAttackTamaPattern = datas; } break; } }
/// <summary> /// プリセットを指定してこうげきだまパターンを生成 /// </summary> /// <param name="preset"></param> /// <param name="line"></param> /// <param name="order"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <param name="patternRows"></param> public void SetupDropPreset(DropOrderPresetType preset, ColorLineType line, ColorOrderType order, int columns, int rows, int patternRows) { var datas = GenerateDropOrder(preset, columns, rows, patternRows); GenerateColorPattern(datas, line, order, columns, rows, patternRows); dropAttackTamaPattern = datas; }
/// <summary> /// ななめパターンを生成 /// </summary> /// <param name="datas"></param> /// <param name="order"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <param name="patternRows"></param> public static void GenerateColorPatternDiagonal(AttackTamaData[] datas, ColorOrderType order, int columns, int rows, int patternRows) { var pattern = GenerateColorPattern(order, rows + columns); for (int i = 0; i < datas.Length; ++i) { var data = datas[i]; data.Color = pattern[data.Position.y + (columns - data.Position.x - 1)]; } }
/// <summary> /// L字パターン /// </summary> /// <param name="datas"></param> /// <param name="order"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <param name="patternRows"></param> public static void GenerateColorPatternLCharacter(AttackTamaData[] datas, ColorOrderType order, int columns, int rows, int patternRows) { var pattern = GenerateColorPattern(order, columns); for (int i = 0; i < datas.Length; ++i) { var data = datas[i]; int index = System.Math.Min(data.Position.x, data.Position.y); data.Color = pattern[index]; } }
private static ColorType[] GenerateColorPattern(ColorOrderType order, int columns) { ColorType[] pattern = new ColorType[columns]; var generator = GenerateColorPattern(order); for (int i = 0; i < columns; ++i) { generator.MoveNext(); pattern[i] = generator.Current; } return(pattern); }
/// <summary> /// 山型パターンを生成 /// </summary> /// <param name="datas"></param> /// <param name="order"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <param name="patternRows"></param> public static void GenerateColorPatternMountain(AttackTamaData[] datas, ColorOrderType order, int columns, int rows, int patternRows) { var col = columns / 2; var pattern = GenerateColorPattern(order, rows + col); for (int i = 0; i < datas.Length; ++i) { var data = datas[i]; int offset = data.Position.x; if (offset >= col) { offset = columns - 1 - offset; } offset = col - offset - 1; data.Color = pattern[data.Position.y + offset]; } }
/// <summary> /// ひし形落下パターン /// </summary> /// <param name="datas"></param> /// <param name="order"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <param name="patternRows"></param> public static void GenerateColorPatternParallelogram(AttackTamaData[] datas, ColorOrderType order, int columns, int rows, int patternRows) { var pattern = GenerateColorPattern(order, columns); for (int i = 0; i < datas.Length; ++i) { var data = datas[i]; int y = data.Position.y % columns; int x = columns - 1 - data.Position.x; if (x < y) { y -= columns; while (y < 0) { y += 4; } } data.Color = pattern[y]; } }
/// <summary> /// 逆L字パターン /// </summary> /// <param name="datas"></param> /// <param name="order"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <param name="patternRows"></param> public static void GenerateColorPatternReverseLCharacter(AttackTamaData[] datas, ColorOrderType order, int columns, int rows, int patternRows) { var pattern = GenerateColorPattern(order, columns); for (int i = 0; i < datas.Length; ++i) { var data = datas[i]; int y = (patternRows - 1 - data.Position.y); var index = y; while (index < 0) { index += 4; } index %= 4; index = (data.Position.x < y) ? data.Position.x : index; data.Color = pattern[index]; } }
/// <summary> /// 縦横交互パターン /// </summary> /// <param name="datas"></param> /// <param name="order"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <param name="patternRows"></param> public static void GenerateColorPatternVerticalHorizontalAlternately(AttackTamaData[] datas, ColorOrderType order, int columns, int rows, int patternRows) { int col = columns / 2; // パターン部分をcol の倍数に補正 patternRows = patternRows / col * col; // パターン部分縦 ColorType[] vPattern = GenerateColorPattern(new ColorType[] { ColorType.Green, ColorType.Yellow, ColorType.Blue, ColorType.Red }, columns); // パターン部分横 ColorType[] hPattern = GenerateColorPattern(new ColorType[] { ColorType.Red, ColorType.Green, ColorType.Yellow, ColorType.Blue }, patternRows); // パターン部分より上 ColorType[] oPattern = GenerateColorPattern(new ColorType[] { ColorType.Blue, ColorType.Red, ColorType.Green, ColorType.Yellow }, rows - patternRows); int count = columns * patternRows; int index = 0; while (index < count) { var data = datas[index]; // 縦横の奇数ブロックかどうか bool vOdd = ((data.Position.y / 3) & 1) != 0; bool hOdd = ((data.Position.x / 3) & 1) != 0; // 横パターンブロックかどうか bool hor = vOdd ^ hOdd; if (hor) { data.Color = hPattern[data.Position.y]; } else { data.Color = vPattern[data.Position.x]; } ++index; } // パターン部分より上 while (index < datas.Length) { var data = datas[index]; data.Color = oPattern[data.Position.y - patternRows]; ++index; } }
/// <summary> /// 座標が設定されているデータに色を設定 /// </summary> /// <param name="datas">座標が設定されているデータ配列</param> /// <param name="preset">落下順序プリセット</param> /// <param name="line">配色パターン</param> /// <param name="order">色の順序</param> /// <param name="columns">列数</param> /// <param name="rows">行数</param> /// <param name="patternRows">パターンの行数</param> public static void GenerateColorPattern(AttackTamaData[] datas, ColorLineType line, ColorOrderType order, int columns, int rows, int patternRows) { System.Action <AttackTamaData[], ColorOrderType, int, int, int> generator; switch (line) { case ColorLineType.Vertical: generator = GenerateColorPatternVertical; break; case ColorLineType.Horizontal: generator = GenerateColorPatternHorizontal; break; case ColorLineType.Diagonal: generator = GenerateColorPatternDiagonal; break; case ColorLineType.Mountain: generator = GenerateColorPatternMountain; break; case ColorLineType.ParallelogramDrop: generator = GenerateColorPatternParallelogram; break; case ColorLineType.VerticalHorizontalAlternately: generator = GenerateColorPatternVerticalHorizontalAlternately; break; case ColorLineType.LCharacter: generator = GenerateColorPatternLCharacter; break; case ColorLineType.ReverseLCharacter: generator = GenerateColorPatternReverseLCharacter; break; default: generator = (d, l, c, r, p) => { for (int i = 0; i < d.Length; ++i) { d[i].Color = ColorType.Yellow; } }; break; } generator(datas, order, columns, rows, patternRows); }
/// <summary> /// 縦横交互のせり上げ /// </summary> /// <param name="datas"></param> /// <param name="order"></param> /// <param name="columns"></param> /// <param name="rows"></param> /// <param name="patternRows"></param> public static void GenerateColorPatternVerticalHorizontalAlternatelyLifting(AttackTamaData[] datas, ColorOrderType order, int columns, int rows, int patternRows) { var pattern = GenerateColorPattern(order, columns); for (int i = 0; i < datas.Length; ++i) { var data = datas[i]; var index = data.Position.y / 3; bool odd = (index & 1) != 0; if (odd) { int r = 3 * (data.Position.y / 6) + (data.Position.y % 6) - 3; r %= 4; data.Color = pattern[r]; } else { data.Color = pattern[data.Position.x]; } } }