522

ぷよぷよプログラミング解説 第1章: 制御構造で場合分け

by
puyolufar
puyolufar
ぷよぷよプログラミング Advent Calendar 2020 | 10日目 (2週目)

皆さん、初めまして。
前回の記事を読んでくださった方は、こんばんは。

前回ぷよグラミングの魅力を紹介したところで、今回いよいよ中身を解説してまいります。

何をやっているかがわかると、コンピューターが何をどう考えてぷよぷよを動かしているのかがわかるようになります。
これを知るだけで楽しければ立派なプログラミング入門生ですが、そうでなくても意図的にバグらせたり改造したりして遊べるようになります。
公式のぷよぷよでは見られない光景を作れるかも…?

制御構造

まずはぷよぷよの落下を制御するプログラムを見てみましょう。
ブックレット3ページ目「ぷよぷよが落ちてくる」に相当します。

if 文の説明

冒頭に以下のコードがあります。

if(isDownPressed) {
    // 下キーが押されているならもっと加速する
    this.puyoStatus.top += Config.playerDownSpeed;
}


このコードの190行目にある if というやつが、プログラミングの基本「条件分岐」を担当します。

if( )(丸かっこ) の内側に条件を書くと、それが成立している時だけ次の {波かっこ} の内側にあるプログラムを実行します。
(丸かっこ) の条件が成立していない時は、次の {波かっこ} の処理をスキップします。

ここでは if(isDownPressed) と書いてあるので「下キーが押されている」のが {波かっこ} の実行条件になります。
この {波かっこ} の内側では、ぷよの落下速度に高速落下の速さを足していますね。
コメントの通り、たしかに「下キーが押されているならもっと加速する」処理になっています。
「下キーが押されているなら」というのが if(isDownPressed) の事で、
続く「もっと加速する」が { this.puyoStatus.top += Config.playerDownSpeed; } の説明になっています。

実習1: もしそこに if がなければ

ではこの if がなくなると、どうなるでしょう?
190行目と193行目の先頭に // を打ち込んで、実行してみてください。
// を打ち込むと、そこから行末までは無視されるようになります。
(このようにしてプログラムを無効化する手法をコメントアウトと呼びますが、この呼び名はすぐに覚えなくても大丈夫です。)

気が済んだら元に戻してくださいね。

実習2: if の条件を反転させてみよう

195行目で何やらとくてんを加算していますね?
これはいわゆる「高速落下ボーナス」を加算する処理です。
この if の条件にエクスクラメーションマーク ! を付けてみましょう。
! を付けると条件が反転します。
(205行目の if で ! を使っていますね。)

197行目の条件を if(!isDownPressed) に書き換えて、実行してみてください。開き丸かっこのすぐ後に ! を置きます。
実際に遊ぶ際、自然落下と高速落下での得点の増え方が変わるはずです。
本来は高速落下している間だけ加点されるはずですが…?

気が済んだら元に戻してくださいね。

ちょっと脱線: 高速落下ボーナスをいじる

本題とずれますが、198行目にある Score.addScore(1); の (1)1 が高速落下ボーナスです。
ということは、これを例えば 99999999 にすると…

気が済んだら元に戻してくださいね。

おわりに

今回は制御構文の代表格 if を紹介いたしました。
この ifぷよグラミングの中でもたくさん登場しています。
他の if の条件式も、いろいろ書き換えて挙動を変えると面白いかもしれません。

他にも while や switch といった制御構文があるんですが、初級・中級コースで if の次に現れる制御構文は連鎖のページにある for だけですね。
for はいわゆるループというもので、これを使うと短いプログラムを何度も繰り返し実行できます。

でも連鎖についてはまた別の機会に説明するつもりなので、今回はこれで終わりです。

おまけ: どこを改造したかわからなくなってしまったら

あちこち改造して挙動を変えて楽しんでいると、そのうちどこを書き換えたかわからなくなってしまうことがあるかもしれません。
そうならないよう、改造するとき行末に目印を付けておきましょう。
例(197行目の場合):
if(!isDownPressed) {    // ここ改造中

なお、もし改造箇所を見失ったら…今回この記事では if についてお話ししたので if を探してみてください。
それぞれの ifサンプルコードの記述と比較すれば見つかるでしょう。

(それでもだめなら…悔しいですが、初級を再修了するのが近道かもしれません。)

次回予告

player.js 202行目if の条件式めちゃくちゃ長いですね。これ手打ちするの大変だろうな…打った方、心中お察しします。
そしてよく見ると184行目 (ブックレット欄外) に全く同じコードが。
組ぷよが縦のマス目をまたぐときの処理なので、設置判定の再計算が必要なんですね。(上級コースではこれも手打ちか…めまいがする)

こんな時は関数の出番。同じコードの繰り返しを大幅軽減する、頼もしいやつです。

次回は関数を定義してみましょう!

(それまではぷよテト2で本物のぷよぷよをやりましょう!)

次の記事
更新日時:2020/12/18 16:15
(作成日時:2020/12/10 19:00)
コメント( 0 )
コメントするにはログインが必要です
シェア