1 / 3 変数の宣言と座標の管理
図形や画像の表示位置を変数に記憶し、名前を付けて扱います。初期値や代入する値を変え、表示位置の変化を確認します。
変数に値を記憶する
第01回では、四角形を描くDrawBoxの引数に160や120などの数値を直接書きました。ゲームではキーボードでキャラクターを動かしたり、敵が自動で移動したりします。そのため、位置を表す数値も毎フレーム変わります。
数値を一時的にメモリへ記憶し、名前を付けて何度でも読み書きするための仕組みが変数です。英語ではvariableと呼びます。
変数は、名前の付いた箱によく例えられます。箱に入れるのが値で、箱に付けるラベルが変数名です。
┌───────────┐
│ 160 │ ← 箱の中に入っているデータ(値)
└─────┬─────┘
名前: x ← 箱に付けたラベル(変数名)プログラムでxと書くと、xに記憶した数値を取り出せます。上の例なら160を取り出し、計算や描画に使えます。
変数の宣言と初期化
四角形を描くコードのwhileループの直前に、次の2行を追加してください。
SetBackgroundColor(245, 248, 252);
int x = 160;
int y = 120;int x = 160;は、整数を扱う変数xを用意し、最初の値を160にする文です。
int x = 160;int:データ型x:変数名= 160:初期値の指定;:文の終わり
データ型と扱う値
先頭のintは「イント」と読みます。変数で扱うデータの種類を指定するデータ型です。データ型は英語でdata typeと呼びます。
intは整数を扱う型で、integerが整数を意味します。今回の座標には160や120などの整数を使います。
変数の宣言
型と変数名を並べてint x;と書くことを、変数の宣言と呼びます。英語ではdeclarationです。
この宣言で、メモリ上に整数を記憶する変数xを用意します。C++では、変数を宣言してから使う必要があります。宣言していない変数名を使うと、「識別子が見つからない」というコンパイルエラーになります。
変数の初期化
変数を用意するときに最初の値を入れることを、初期化と呼びます。英語ではinitializationです。このとき入れる値が初期値になります。
= 160は初期値を指定する部分です。今回のローカル変数は、宣言するときに初期化してから使います。
2行目のint y = 120;も同じです。整数型の変数yを宣言し、初期値を120にしています。
大文字と小文字の厳密な区別
C++ではアルファベットの大文字と小文字を区別します。例えばxとXは別の名前です。小文字のxで宣言した変数は、その後も小文字のxで使ってください。
相対座標によるサイズと位置の管理
左上座標を基準にした描画
用意した変数xとyで四角形を描きます。whileループ内のDrawBoxを次のように書き換えてください。
DrawBox(x, y, x + 48, y + 48, GetColor(38, 113, 191), TRUE);第1引数と第2引数には、左上の座標xとyを渡します。第3引数と第4引数は、右下の座標を求める式です。x + 48とy + 48で、幅と高さを48ピクセルにします。
- 左上座標:
(x, y)→(160, 120) - 右下座標:
(x + 48, y + 48)→(160 + 48, 120 + 48)すなわち(208, 168)
右下の座標を左上の座標に48を足して求めるので、四角形の大きさは変わりません。xとyだけで位置を変えられます。
算術演算子(+)と値の評価
足し算に使う+は、四則演算を行う算術演算子の一つです。算術演算子は英語でarithmetic operatorと呼びます。
計算しても変数の値は変わらない
引数のx + 48では、xの値160に48を足した結果の208を関数へ渡します。計算するだけでは、xの値は変わりません。xには160が残ります。
初期値の変更実験
変数の宣言int x = 160;の初期値を300に変えて実行してください。
左上のx座標は300、右下は300 + 48 = 348になります。横幅は48ピクセルのまま、四角形が右へ移動した結果です。座標を何箇所も書き換える必要はなく、初期値を1箇所変えるだけで位置を調整できます。
確認を終えたら、初期値を元の160に戻してください。
代入による座標の更新
変数に新しい値を書き込む操作が代入です。英語ではassignmentと呼びます。箱の例では、中身を新しい値に入れ替える操作に当たります。
宣言コードの直後に、次の1行を一時的に追加してみましょう。
int x = 160;
int y = 120;
x = x + 40; // 代入の実験右辺の計算と左辺の箱への上書き
C++の=は、右辺を計算した結果を左辺の変数へ書き込む代入演算子です。英語ではassignment operatorと呼びます。数学の「左右が等しい」という意味ではありません。
x = x + 40;x + 40:① 160 + 40 → 200x:② x に200を代入
この文を実行すると、xの値は160から200に変わります。
四角形を描く位置が40ピクセル右へ移ることを確認してください。=は値を更新する記号です。第01回の条件に使った==は、値を比べる記号でした。
動作を確認したら、追加したx = x + 40;の1行を削除して元に戻してください。
- 変数がデータを記憶する名前付きの箱であることを説明できる
- 型(
int)、宣言、初期化、代入のそれぞれの意味を区別できる - 横幅を48のまま表示位置を変える行を選び、変更前後の座標を説明できる