vol.2_1 ぷよぷよを作ってみよう!(準備編)

はじめに

今回は、前回紹介したPaizaCloudを作ってみたいと思います。
VisualStudioの時よりも実装するには少々不都合の多い環境なのですが、こういうところだからこそ頑張りたいものです!
開発の前に、ぷよぷよの仕様について記述していきます。
プログラムを記述していく前には、必ず見通しを立てておく必要があります。

ぷよぷよのゲームシステム

ぷよぷよを実装するにあたって必要となってくる情報を列挙的にまとめます。
これを書くにあたって
_________________________________

ぷよぷよ - Wikipedia

おじゃまぷよ算とは (オジャマプヨザンとは) [単語記事] - ニコニコ大百科
_________________________________

こちらの記事を参考にさせていただきました。ありがとうございます。
それでは早速まとめていきましょう!

ぷよぷよの主なゲームシステム

・フィールドは縦12マス×横6マスの格子で構成
 格子の1マスにつき1つのぷよを置くことができる。
 但し、上方向には画面外に1マス分だけぷよを置くことができる。
 全フィールドの左上のマスの座標を(1,1)と定義する。

・(4,2),(4,3)のマスを始点としてぷよが2つ1組で落下してくる。
 この2つ1組のことを組ぷよと呼ぶ。
 ぷよは3〜5種類+おじゃまぷよ(後述)で構成
 プレイヤーは落下する組ぷよに対して回転、横移動、高速落下のいずれかの操作を行う。

・次に落下する組ぷよ、その次に落下する組ぷよがフィールドの外枠に表示される。
 それらのことをそれぞれネクストぷよ、ネクネクぷよと呼ぶ。

・落下してきたぷよ組がフィールドの床や他のぷよに接地→設置すると、その位置に固定される。
 但し、組ぷよを横にして置いたりなどしてぷよに1マス分でも下方向に空白があるなら、そのぷよだけ強制的に落下させる。

・同種のぷよ(おじゃまぷよは除く)が周囲4方向にある場合、それらはくっついているという。
 4つ以上のぷよがくっついているとき、それらのぷよは消滅し得点となる。

・ぷよの消滅により、上にあったぷよは落下する。その際に再びぷよが4つ以上くっつくと消滅し、2以上の連鎖が発生する。
 但し、最初のぷよの消滅も1連鎖として見做す。
 複数種を同時に消滅させたり、同種を別箇所で消滅させた場合も1連鎖扱いとなる。

・ぷよを消滅させたときに入る得点は、消したぷよの数に、設定された連鎖倍率をかけることで得られる。

・(4,2)が埋まった状態でネクストぷよが落下態勢に入ろうとすると、窒息してゲームオーバーとなる。

・対戦形式の場合、
・連鎖による得点に比例した量のおじゃまぷよが相手のフィールドに降る。
 その個数は、連鎖による得点をおじゃまレートで割ることで得られる。
   おじゃまレートはマージンタイムという制限時間を超えると徐々に減少していく(つまり、時間経過とともに送られるおじゃまぷよの個数が増加していく)。

・おじゃまぷよは送られるたびにフィールド上部に予告ぷよとして表示される。
   おじゃまぷよが降ってくるのは、相手の連鎖が終了し、おじゃまぷよの個数が確定したあとに、出現している最初のぷよが接地し、ネクストぷよが落下態勢に入る直前とする。
 一度に降るおじゃまぷよの最大数は30個で(=5列分)で、それ以上のおじゃまぷよが送られている場合、複数回にわたって送られる。

・予告ぷよが表示されている間にこちらが連鎖することで、こちらが送るはずのおじゃまぷよが相殺として使われ、予告ぷよの個数をその分減少させる。

・全消しをすると、ボーナスが発生する。

各要素毎の細かい設定

回転

 組ぷよが落下態勢に入った際の下側のぷよが回転の軸となり、右回転・左回転を実現する。
 但し、回転先の一部分が侵入不可領域(フィールドの壁、床、他のぷよ)に入る場合、組ぷよを平行移動させることによって整合性を保つ。
 また、回転先の全部分が侵入不可領域に入る場合(縦を向いた組ぷよの両側が侵入不可領域である場合)、操作は実現しないが結果として180度回転となる際には回転が実行される。

落下速度

 自然落下時は2.4マス/s、高速落下時は24マス/sを基準とする。

接地

 ぷよがフィールドの床もしくは他のぷよと触ることを接地という。
 接地許容時間は合計32/60秒である。

設置

 設置許容時間(合計32/60秒)を超えるか設置を8回以上行った段階でぷよの位置を決定し、プレイヤーがそれ以上そのぷよに対して操作できなくなることを設置という。
 

得点等の計算式

おじゃまぷよの数=得点÷レート

レート:
時間(秒)    レート
0〜95     70
96〜111   52(マージンタイム)
112〜127  34
128〜143  25
144〜159  16
160〜175  12
176〜191  8
192〜207  6
208〜223  4
224〜239  3
240〜255  2
256〜     1

得点=(基本点+おじゃま点)×倍率+ボーナス

基本点=消したぷよの数×10

おじゃま点=Σ(おじゃま基本点×個数)

おじゃま基本点:
おじゃまぷよ・・・0点
得点ぷよ・・・50点

倍率=連鎖ごとの倍率+同時消し+連結

連鎖ごとの倍率:
連鎖     倍率
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

同時消し:
1色・・・・・0
2色・・・・・3
3色・・・・・6
4色・・・・・12
5色・・・・・24

連結:
4つ・・・・・0
5つ・・・・・2
6つ・・・・・3
7つ・・・・・4
8つ・・・・・5
9つ・・・・・6
10つ・・・・7
11つ~・・・10

ボーナス=落下ボーナス+全消しボーナス

落下ボーナス=高速落下させた段数

全消しボーナス={
0 (残しあり)
2100(全消し)

おわりに

今回は実装していきたい内容を記述していきました。
これらを基に次回からプログラムを書き始めていきましょう。
では、お疲れ様でした。