ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【UE4・UE5】プログラマーの登竜門、FizzBuzz問題をブループリントでやってみる。

はじめに

みなさんはFizzBuzz(フィズバズ)問題をご存知でしょうか?

この問題は、プログラミング入門者によく出題される課題のようなものです。

説き方や書き方がいくつかあり、それをはかる指標として有名な問題です。

今回はそんなフィズバズ問題をアンリアルエンジンのブループリントでやってみたいと思います。

ブループリントの馴染みのない人にもわかりやすく解説するので

この記事を通してブループリントを好きになってもらえたらなぁと思います!

 

やりかた

問題内容はコチラ

「1から100までの数字を画面に表示する」
「3の倍数のときは数字の代わりにFizzと表示する」
「5の倍数のときは数字の代わりにBuzzと表示する」
「15の倍数のときは数字の代わりにFizzBuzzと表示する」

引用

https://wa3.i-3-i.info/word18535.html

 

⓪事前準備

新規BPのBP_FizzBuzzを作成します。

親はアクタークラスにします。

f:id:namiton:20220202191723p:plain

 

開いたらBeginPlay以外すべて消します。

BeginPlayは実行したら一回だけ呼ばれます。

f:id:namiton:20220202191853p:plain


試しにPrintStringノードをつなげてみましょう。

f:id:namiton:20220202192049p:plain

 

作成したBP_FizzBuzzをマップ上に配置してプレイを押してみてください。

右上にHelloと出力されて

アウトプットログにもHelloが出力されていると思います。

f:id:namiton:20220202192150p:plain

f:id:namiton:20220202192609p:plain

 

①とりあえず1から100まで出力してみる

プログラムにはLoopという指定した回数繰り返す機能があります。

これを使ってログに出力してみましょう。

 

f:id:namiton:20220202192929p:plain

実行するとこのように100まで表示されます。

f:id:namiton:20220202193004p:plain

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ココからは解説です。

説いたことがない方はぜひ挑戦してみてくださいね!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

①3の倍数でFizzと5の倍数でBuzzと出力する

プログラミング言語でいうIF文(条件式)はブランチというノードで表現できます。

ここの条件の部分に3か5の倍数化をチェックします。

3の倍数かはその数字を3で割った余りが0になるかどうかをチェックすればいいので

余りが出力される%ノードを使ってその値が0かどうかチェックします。

f:id:namiton:20220202193707p:plain

同じように5の倍数の処理も入れてみましょう。

f:id:namiton:20220202193903p:plain

実行するとうまく倍数ごとに出力されるはずです。

f:id:namiton:20220202193949p:plain

ただしこれには欠陥があり、

3と5の倍数例えば15などを見るとFizzが優先されてしまいます。

これはブループリントが左から右に処理を流しているため、

3の倍数が先にチェックされた結果こうなってしまいます。

 

②15の倍数でFizzBuzzと出力する

先ほど言ったように左からチェックされるので

3と5がチェックする処理の前に15の余りをチェックしてあげればよいですね!

f:id:namiton:20220202194531p:plain

解けました!!

f:id:namiton:20220202194622p:plain

 

③+α マクロを使ってスマートにする

完成したノードを見てみると同じような処理が連続していることがわかるでしょうか?

%=で倍数かどうかチェックしているところです。

どのプログラミング言語でもいえることですが

同じような機能を複数個所で作成するのはメンテナンス性に欠けるので

まとめられる機能はマクロにしてみましょう。

 

f:id:namiton:20220202195018p:plain

 

マクロを作成し名前をCheckMultipleにします。

f:id:namiton:20220202195656p:plain

作成したマクロを開き、以下のようにインプットとアウトプットを用意します。

f:id:namiton:20220202200208p:plain

このようにノードを組みます。

f:id:namiton:20220202200234p:plain

このようにマクロを利用することで機能がマクロの名前として現れ

メンテナンスをよりしやすくなります。

f:id:namiton:20220202200611p:plain

③おまけ ブランチをあまり使わずに再帰呼び出しでLoopも使わない

ブランチが連続するとネストが深くなると表現され

あとから見返すときに分かりづらくなる原因になるので

連続して深くなりすぎないように心がけましょう。

 

以下はブランチを必要最小限にとどめ、関数を使って自身を呼び出す手法の

再帰呼び出しを使って100回分のチェックを行いました。

f:id:namiton:20220202201952p:plain

f:id:namiton:20220202202023p:plain

f:id:namiton:20220202202128p:plain

 

このようにFizzBuzz問題は工夫次第でいろいろな書き方ができます。

ぜひ挑戦してオリジナリティ溢れる回答を作ってみましょう。

さいごに

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではまた別の記事で会いましょう!!