完成品はこんな感じになります。

点数を表示させる

今回は前回までに作成したぷよぷよもどきのアプリに点数を表示させます。

点数の計算式

ぷよぷよの得点計算はどのようになっているのでしょうか?

ぷよぷよの得点計算のやり方は?全消し・落下・連結・多色ボーナスの計算方法まとめ | エージの自由帳によると点数の計算式は以下のようになっています。

ぷよの消えた数×10(連鎖ボーナス+連結ボーナス+色数ボーナス)

連鎖ボーナス、連結ボーナス、色数ボーナスは以下のようになっています。

連鎖数 連鎖ボーナスは連鎖数によって変化します。

連鎖数 連鎖ボーナス
1 0
2 8
3 16
4 32
5 64
6 96
7 128
8 160
9 192
10 224
11 256
12 288
13 320
14 352
15 384
16 416
17 448
18 480
19 512

連結ボーナス 連結ボーナスはぷよぷよの連結数によって変化します。

連結数 連結ボーナス
4 0
5 2
6 3
7 4
8 5
9 6
10 7
11以上 10

色数ボーナス 色数ボーナスは消した時の色数によって変化します。

色数 色数ボーナス
1 0
2 3
3 6
4 12
5 24

「連鎖ボーナス+連結ボーナス+色数ボーナス」の合計が0になる場合は1として計算します。

1と2は、両方とも2連鎖ですが、色数ボーナスがあるので点数が違ってきます。

1図の場合

1連鎖目は
7個消えるのでぷよの消えた数は7
連鎖ボーナスは1連鎖目なので0
7個つながっているので連結ボーナスは4
消した時の色数は1色だけなので色数ボーナスは0

2連鎖目は
8個消えるのでぷよの消えた数は8
連鎖ボーナスは2連鎖目なので8
つながっているのは4個と4個なので連結ボーナスは0+0=0
消した時の色数は1色だけなので色数ボーナスは0

上記の公式に当てはめると

1連鎖目:7×10×(0+4+0) = 7×10×4 = 280
2連鎖目:8×10×(8+(0+0)+0) = 8×10×8 = 640

合計:280+640 = 920となります。

2図の場合

2はどうでしょうか?

1連鎖目は同じです。

2連鎖目は
8個消えるのでぷよの消えた数は8
連鎖ボーナスは2連鎖目なので8
つながっているのは4個と4個なので連結ボーナスは0+0=0
消した時の色数は2色なので色数ボーナスは3

2連鎖目:8×10×(8+(0+0)+3) = 8×10×11 = 880

合計:280+880 = 1160となります。

では実際に点数計算をさせてみましょう。

DeletePuyoIfNeedメソッドを一部変更する

DeletePuyoIfNeedメソッドの戻り値をint型に変更しました。戻り値が計算された得点になります。

連鎖ボーナスと連結ボーナスの計算に関する部分を示します。

次に色数ボーナスの計算に関する部分を示します。

重複を排除するためにLinqのDistinctメソッドに引数を渡しています。ここでの「重複」の意味ですが、「ぷよの種類が同じであれば重複している」と判断します。

PuyoEqualityComparerクラスとGetColorCountBonusメソッドは以下のとおりです。

OnFixedメソッドを一部変更する

DeletePuyoIfNeedメソッドの戻り値を変更したのでOnFixedメソッドも一部変更が必要です。返された値を利用して現在の点数を表示します。

Scoreプロパティ

得点はここに表示させます。Scoreプロパティを変更すると表示されている点数も同時に変わるようにします。

白色太字で表示させます。それからタイマー処理を書いていなかったので書いておきます。