Windowsプログラミング入門:ウィンドウの表示方法(VS + C++ + DirectX11前段階)

(以下、既存内容は省略)

授業で使うプログラミングの命名ルール

この授業で作成するプログラムの「クラス名」「関数名」「変数名」などは、以下のルールに統一します。 プログラムの可読性・保守性を高めるため、できるだけルールに沿って記述してください。

  • 名前はすべて 英語 にすること。
  • 名前を見るだけで「何を表しているか」が分かるようにする。

※ ただし、一時的に使う変数(例:i, j, tmpなど)は例外とします。

  • 頭文字は大文字にする。
  • 単語の区切りも大文字(パスカルケース)にする。
  • 基本的に「名詞」で構成する。

おすすめの補足ルール:

  • クラスのメンバ変数は末尾にアンダースコア(`_`)を付ける(例:`position_`)
  • クラス名には役割を明確に示す名前を使う(例:`Renderer`, `InputManager`, `EnemySpawner` など)
  • 抽象的なクラスには `Base` や `Interface` などの接尾辞を使って区別する(例:`EnemyBase`, `IUpdatable`)

例:

  • `Player`
  • `GameObject`
  • `InputManager`
  • 頭文字は大文字にする。
  • 単語の区切りも大文字(パスカルケース)にする。
  • 基本的に「名詞」で構成する。

例:

  • `Player`
  • `GameObject`
  • `InputManager`
  • 頭文字は大文字にする。
  • 単語の区切りも大文字(パスカルケース)にする。
  • 基本的に 動詞(+目的語)で構成する。

例:

  • `AddScore`(スコアを加算する)
  • `IsButtonDown`(ボタンが押されているか)
  • `SetPosition`(位置を設定する)

参考資料: https://php-archive.net/php/words-in-function-names/

  • 頭文字は小文字にする。
  • 単語の区切りは大文字(キャメルケース)にする。
  • 基本的に「名詞」で構成する。
  • クラスのメンバ変数は末尾にアンダースコア(_)を付ける。

補足:なぜメンバ変数にアンダースコアを付けるのか?
クラスの中でローカル変数とメンバ変数の名前が重なると、どちらを指しているか分かりづらくなることがあります。
アンダースコアを付けることで、「これはメンバ変数です」と明確に区別できるようになります。
特にコンストラクタやセッターで、引数とメンバ変数が同じ名前になる場合にも混乱を避けられます。

例:

class Player {
public:
    Player(int hp) {
        hp_ = hp; // メンバ変数と引数が区別できる
    }
 
private:
    int hp_;
}; 
  • 頭文字は小文字にする。
  • 単語の区切りは大文字(キャメルケース)にする。
  • 基本的に「名詞」で構成する。
  • クラスのメンバ変数は末尾にアンダースコア(_)を付ける。

例:

  • `position`
  • `highScore`
  • `playerName_`(クラスメンバ)
  • すべて大文字にする。
  • 単語の区切りはアンダースコアでつなぐ。

例:

  • `SCREEN_WIDTH`
  • `JUMP_POWER`
  • `MAX_LIFE`
  • ファイル全体で使うグローバル変数は、無名namespace(`namespace {}`)内に定義する。

→ 外部ファイルからのアクセスを防ぎ、安全にファイル内で共有できます。

  • 定数類(定数、定数配列など)もこの無名namespace内にまとめて記述します。

例:

namespace {
int globalCounter = 0;
const int SCREEN_WIDTH = 1280;
const int SCREEN_HEIGHT = 720;
} 

このようにしておくことで、他のファイルと名前がぶつかるのを防ぎつつ、明確に「このファイルだけで使う」と分かる設計になります。

  • すべて大文字にする。
  • 単語の区切りはアンダースコアでつなぐ。

例:

  • `SCREEN_WIDTH`
  • `JUMP_POWER`
  • `MAX_LIFE`
  • enumの型名は パスカルケース(先頭大文字+単語ごとに大文字)にする。

例:`GameState`, `Direction`, `InputType`

  • enumの各要素(定数)は 全て大文字+アンダースコア区切り(定数と同じ形式)で統一する。

例:`STATE_TITLE`, `STATE_PLAYING`, `DIR_UP`, `DIR_DOWN`

  • 必要であれば、接頭語を使ってグループ名を示すとわかりやすくなる。

例:`INPUT_KEY_A`, `INPUT_MOUSE_LEFT` など

例:

enum GameState {
STATE_TITLE,
STATE_PLAYING,
STATE_GAMEOVER
};
 
enum Direction {
DIR_UP,
DIR_DOWN,
DIR_LEFT,
DIR_RIGHT
}; 

このようにすることで、enumの項目が定数と明確に区別され、コードの読みやすさと一貫性が向上します。

C++では列挙型に2つの書き方があります。それぞれに特徴があります。

  • 暗黙的に整数(int)として扱われます。
  • 同じスコープ内で定数名が他のenumや変数と衝突しやすい。
  • C言語からの互換性を重視した古い形式。

例:

enum Direction {
UP,
DOWN
};
 
int dir = UP; // OK(暗黙のint)
 
  • C++11から追加された新しい形式。
  • 定数名が型にスコープされるので、名前の衝突が防げる。
  • 暗黙的にintに変換されない(必要ならキャストが必要)。

例:

enum class Direction {
Up,
Down
};
 
Direction dir = Direction::Up; // スコープ付きで明示的 
  • 基本的には enum class を推奨します。

→ 名前の衝突がなく、型安全で保守性が高いため。

  • ただし、外部ライブラリや既存コードとの互換性が必要な場合は enum を使うこともあります。

このルールに慣れていくことで、大規模なプログラムでも読みやすく、他人と共同で開発しやすくなります。

マジックナンバーはやめてくれぃ

  • マジックナンバーとは、意味のわからない「ただの数字」がコードに直接書かれていることを指します。
  • プログラムの中に突然「5」とか「1280」とか「3.14」などが出てきたときに、それが何の値なのか分からない状態がマジックナンバーです。

例:

if (x > 1280) {
// 1280が何を意味するのか分かりづらい!
} 
  • 意味が伝わらない:数字を見ただけでは意味がわからない。
  • 後から変更が大変:何かを変更したいとき、どこを直せばいいか分かりづらい。
  • バグの原因になりやすい:数字の意味を勘違いして使ってしまうことがある。
  • 画面サイズの定義:
// NG
if (x > 1280) { ... }
 
// OK
const int SCREEN_WIDTH = 1280;
if (x > SCREEN_WIDTH) { ... } 
  • 配列のサイズ:
// NG
for (int i = 0; i < 4; ++i) { ... }
 
// OK
const int MAX_ENEMIES = 4;
for (int i = 0; i < MAX_ENEMIES; ++i) { ... }
  • アニメーションのフレーム数:
// NG
if (frame >= 60) { ... }
 
// OK
const int FRAME_WAIT = 60;
if (frame >= FRAME_WAIT) { ... }
  • 色の指定:
// NG
SetColor(255, 0, 0); // 何の色?
 
// OK
const int COLOR_RED[3] = {255, 0, 0};
SetColor(COLOR_RED[0], COLOR_RED[1], COLOR_RED[2]);
  • ジャンプ力や重力などゲーム特有の物理値:
// NG
velocity.y += 9.8f;
 
// OK
const float GRAVITY = 9.8f;
velocity.y += GRAVITY;
  • ファイルの上部、または無名namespace内に `const` または `constexpr` を使って名前付きの定数として宣言する。
  • 値の意味が伝わる名前をつける。
  • enum や enum class を使って、複数の選択肢を明確に列挙するのも有効。
  • 「この数字、何のため?」と思ったら、マジックナンバーかもしれない!
  • 必ず意味のある「名前付き定数」に置き換えて、読みやすく・修正しやすく・バグを減らすコードを心がけましょう。
  • game-engineer/classes/2025/ge2-gameprograming2/first-term/6/06-18-3x.txt
  • 最終更新: 8カ月前
  • by root