Unityでぷよぷよを作ってみた 6
スポンサードリンク
得点の計算
計算式
総ボーナス = (連鎖ボーナス + 連結ボーナス + 色数ボーナス)
(ただし、全てのボーナスが0の場合は1になる。)
得点 = 消したぷよの数 ×10 × 総ボーナス
連鎖ボーナス
連鎖数によりつくボーナス。
連結ボーナス
つながっているぷよの数によるボーナス。色ごとにつく。例えば、赤を4つ、青を5つ、黄を6つ同時に消した場合、0 + 2 + 3 =5つく。
色数ボーナス
同時に消した色の数につくボーナス。
実装
public class Scorer { private static readonly int[] chainBonus = { 0, 0, 8, 16, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 480, 512 }; private static readonly int[] stickBonus = { 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7}; private static readonly int[] colorBonus = {0, 0, 3, 6, 12, 24 }; public static int CountScore(List<Puyo> vanishable, int chainCount) { //連鎖ボーナス int chain = chainBonus[chainCount]; var q = vanishable.GroupBy(p => p.Color) .Select(p => new { Color = p.Key, Number = p.Count() }); int stick = 0; //連結ボーナス foreach (var p in q) { if (p.Number >= 11) stick += 10; else stick += stickBonus[p.Number]; } int colorCount = q.Count(); //色数ボーナス int color = colorBonus[colorCount]; int total = Mathf.Max(chain + stick + color, 1); int score = vanishable.Count * 10 * total; return score; } }