第05回 関数による処理の整理
第04回までに、プレイヤー操作と自律往復という2つの異なる動作を1つのメインループ内で実現しました。しかし、すべての処理を WinMain の中に書き連ねていくと、コードが長大化し、見通しや保守性が急速に悪化します。
今回は、プログラムの動作(ゲームの見た目や操作感)を完全に維持したまま、重複した処理やまとまった役割を持つコードを自作関数(ユーザー定義関数)へと切り出すリファクタリングの手法を学びます。関数へ渡す値と戻り値を追い、同じ処理を複数箇所で使えるようにします。
この回のゴール
関数へ整理した後も同じ二体を表示している画面
- 値を受け取って計算結果を返す関数を自作し、戻り値を受け取って変数を更新できる
- 呼び出し側の実引数と、関数側の仮引数(値渡し)の関係およびスコープの違いを説明できる
- 関数分割を行った前後で、ゲームの挙動や操作感が全く変化していないことを確認できる
始める前に
変数・条件・繰り返しと、更新と描画の違いを確認してください。自作関数の引数と戻り値は今回説明します。確認したい場合は、キャラクターの移動操作を参照してください。
前の回の受講や完成物は必須ではありません。下の開始用プロジェクトを使い、配布済みの処理と今回追加する処理を確認してから進めます。
配布プロジェクト
第05回の開始用プロジェクトをダウンロードしてすべて展開し、展開先にある CppBasics.sln をVisual Studio 2026で開きます。
ウィンドウ上部のツールバーで、ビルド構成が Debug、プラットフォームが x64 に設定されていることを確認してください。ここには第04回終了時点のコードが含まれています。
編集するソースファイルは、引き続き Source/main.cpp です。第04回で作成した自身のプロジェクトを継続して使用しても構いません。
配布ファイル一覧
| ファイル | 役割 |
|---|---|
| Source/main.cpp | 今回の開始時点のコード |
| CppBasics.sln | プロジェクトをVisual Studioで開くためのファイル |
| Robot.png | 幅48・高さ48ピクセルの青いロボット画像 |
| Walker.png | 幅48・高さ48ピクセルのオレンジ色のロボット画像 |
表のリンクから個別ファイルの内容を確認できますが、実習を行う際は必ず上記のZIPを一括展開して使用してください。
今回のポイント
これまで呼び出してきた DrawGraph や CheckHitKey は、DXライブラリが提供する関数でした。今回は、自分自身で新しい関数を定義し、処理に分かりやすい名前をつけて呼び出します。
自作関数の第一歩として、「範囲制限処理(クランプ)」を関数化します。値がコピーされて渡される「値渡し(Pass by Value)」の特性と、「なぜ戻り値を変数に代入し直す必要があるのか」を実行結果と結び付けて確認しましょう。