はじめに
みなさんはFizzBuzz(フィズバズ)問題をご存知でしょうか?
この問題は、プログラミング入門者によく出題される課題のようなものです。
説き方や書き方がいくつかあり、それをはかる指標として有名な問題です。
今回はそんなフィズバズ問題をアンリアルエンジンのブループリントでやってみたいと思います。
ブループリントの馴染みのない人にもわかりやすく解説するので
この記事を通してブループリントを好きになってもらえたらなぁと思います!
やりかた
問題内容はコチラ
「1から100までの数字を画面に表示する」
「3の倍数のときは数字の代わりにFizzと表示する」
「5の倍数のときは数字の代わりにBuzzと表示する」
「15の倍数のときは数字の代わりにFizzBuzzと表示する」
引用
https://wa3.i-3-i.info/word18535.html
⓪事前準備
新規BPのBP_FizzBuzzを作成します。
親はアクタークラスにします。
開いたらBeginPlay以外すべて消します。
BeginPlayは実行したら一回だけ呼ばれます。
試しにPrintStringノードをつなげてみましょう。
作成したBP_FizzBuzzをマップ上に配置してプレイを押してみてください。
右上にHelloと出力されて
アウトプットログにもHelloが出力されていると思います。
①とりあえず1から100まで出力してみる
プログラムにはLoopという指定した回数繰り返す機能があります。
これを使ってログに出力してみましょう。
実行するとこのように100まで表示されます。
ココからは解説です。
説いたことがない方はぜひ挑戦してみてくださいね!
①3の倍数でFizzと5の倍数でBuzzと出力する
プログラミング言語でいうIF文(条件式)はブランチというノードで表現できます。
ここの条件の部分に3か5の倍数化をチェックします。
3の倍数かはその数字を3で割った余りが0になるかどうかをチェックすればいいので
余りが出力される%ノードを使ってその値が0かどうかチェックします。
同じように5の倍数の処理も入れてみましょう。
実行するとうまく倍数ごとに出力されるはずです。
ただしこれには欠陥があり、
3と5の倍数例えば15などを見るとFizzが優先されてしまいます。
これはブループリントが左から右に処理を流しているため、
3の倍数が先にチェックされた結果こうなってしまいます。
②15の倍数でFizzBuzzと出力する
先ほど言ったように左からチェックされるので
3と5がチェックする処理の前に15の余りをチェックしてあげればよいですね!
解けました!!
③+α マクロを使ってスマートにする
完成したノードを見てみると同じような処理が連続していることがわかるでしょうか?
%=で倍数かどうかチェックしているところです。
どのプログラミング言語でもいえることですが
同じような機能を複数個所で作成するのはメンテナンス性に欠けるので
まとめられる機能はマクロにしてみましょう。
マクロを作成し名前をCheckMultipleにします。
作成したマクロを開き、以下のようにインプットとアウトプットを用意します。
このようにノードを組みます。
このようにマクロを利用することで機能がマクロの名前として現れ
メンテナンスをよりしやすくなります。
③おまけ ブランチをあまり使わずに再帰呼び出しでLoopも使わない
ブランチが連続するとネストが深くなると表現され
あとから見返すときに分かりづらくなる原因になるので
連続して深くなりすぎないように心がけましょう。
以下はブランチを必要最小限にとどめ、関数を使って自身を呼び出す手法の
再帰呼び出しを使って100回分のチェックを行いました。
このようにFizzBuzz問題は工夫次第でいろいろな書き方ができます。
ぜひ挑戦してオリジナリティ溢れる回答を作ってみましょう。
さいごに
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではまた別の記事で会いましょう!!