素人がぷよぷよ作るよ

僕はプログラミングについては素人で、多分一生それを糧にすることもないでしょう。ただパズルとかが好きなので、趣味として此処半年くらい勉強してみたら面白かったという程度。
そんな僕でも、ぷよぷよを作れたので作り方を記してみます。


前準備

MS-DOSで動くC++プログラムしか作ったこと無かったので、以下のサイトを参考にゲーム作る練習。

カイワレゲーhttp://afoafodayo.blog84.fc2.com/blog-entry-549.html
シューティングとか?http://dixq.net/g/

非常に分かり易く、数時間でそれっぽく動くものが作れました。

ぷよぷよ概論

ぷよぷよのゲーム中のフェーズは以下のようになります。

  1. ぷよが落ちてくる(+操作)
  2. ぷよ着地(片割れ落下)
  3. 積んであるぷよの中に消えるものがあるかチェック
    • 消えるものが無いなら4.を飛ばして5.へ
  4. 消えたぷよ除去、積んであるぷよ移動(落下)→3.へ
  5. ゲームオーバー条件判定→1.へ



1-2.で落下ぷよを扱い、3-4.で積んであるぷよ達を扱えばいいわけっすね。対戦なら、これを2つずつ表示すればよいだけ。【3.消えるものがあるかチェック】が肝で、後は前準備ができるならできます。

消えるぷよ判定法

4つ以上同色のぷよが並んでいることをどうやって判別するのか。

ここで考えるべきなのが、それぞれのぷよに対して【自分と同色のぷよが上下左右に幾つあるか】。
以下の写真ではそれぞれのぷよの左上に幾つあるか表記してあります(自分の数も含んでいるので+1されています)。

例えば、左から4列目下から2段目の青ぷよは、下と左に青ぷよがあるので「3」となっています。

この数値が4以上のものは、上下左右に3つ以上同色ぷよがあるため、必ず消えます(T字の真ん中など)。また、そのぷよに隣接している同色ぷよも消えることになります。

では例えば●●●●のように4つ並んだぷよはどうやって認識しましょう。
この場合は、「数値が3のものが2つ並んでいる場合は消す」ことにします(上の直線の例でいうと2332となって、3が2つ並んでいます)。これは、数値4以上のぷよが出てこない場合に消えるための必要十分条件です。(例えば、S字の場合は23-32となり、3が上下か左右に並びます)
あとは同様に、並んだ3ぷよに隣接する同色ぷよを消すだけです。

おしまい

消えるかどうかの判定方法を考えるのが楽しかった。