戻る

グラフィックスプログラマになる 06 (2024/06/12)

変数と座標

"OnPaint" のコードを書き換えてみましょう。

void OnPaint(HDC hdc)
{
  COLORREF color = RGB(255, 0, 0);

  // (1)
  int x = 20;
  int y = 10;
  SetPixel(hdc, x, y, color);

  // (2)
  x = 40;
  y = 20;
  SetPixel(hdc, x, y, color);

  // (3)
  x = x + 2;
  SetPixel(hdc, x, y, color);

  // (4)
  y = y + 5;
  SetPixel(hdc, x, y, color);

  // (5)
  int x2 = x + 2;
  int y2 = y + 2;
  SetPixel(hdc, x2, y2, color);

  // (6)
  SetPixel(hdc, x2+2, y2+2, color);
}


VisualStudio だとこうなると思います。



「ローカル Windows デバッガー」ボタンを押して実行すると、



というウィンドウが現れます。拡大すると、



こんな感じです。上記のソースコードは、SetPixel関数が6回呼ばれています。ウィンドウに描画された赤いドットも6個。描画する座標を変えながら、6回ドットを描画しているわけです。


  // (1)
  int x = 20;
  int y = 10;
  SetPixel(hdc, x, y, color);
まず、これですね。xに20をセット、yに10をセットしています。「型」は「int」であり、整数を表現したい時の型になります。先ほど説明したように、これはつまり、

  // (1)
  SetPixel(hdc, 20, 10, color);
と同じ値を渡していると言えます。20を渡すのと、20がセットされた変数xを関数に渡すのは、同じですからね。これは復習という感じで、良いですよね? そして次。


  // (2)
  x = 40;
  y = 20;
  SetPixel(hdc, x, y, color);
x に 40 をセットし、y に 20 をセットして、SetPixel を呼んでいます。これはつまり、

  // (2)
  SetPixel(hdc, 40, 20, color);
という事ですね。変数は、こんな感じで値を差し替える(上書きする)ことができます。これも復習ですね。そして次。

  // (3)
  x = x + 2;
  SetPixel(hdc, x, y, color);
これです。今までは x = 数値、で値をセットしていましたが、x = x + 2; と、イコールの右側に変数が出てきます。(2) で、x に 40 がセットされているので、x = 40 + 2; になります。不思議な感じがしますが、「まずイコールの右側が計算され、その計算結果が左側の変数にセットされている」と納得させてください! そして次。


  // (4)
  y = y + 5;
  SetPixel(hdc, x, y, color);
これも、(3) とほぼ同じですね。y = 20 + 5; なので、y = 25; になります。そして次。


  // (5)
  int x2 = x + 2;
  int y2 = y + 2;
  SetPixel(hdc, x2, y2, color);
x2 という新しい変数に、既存の x という変数に 2 を足した値 (44) をセットしています。
y2 という新しい変数に、既存の y という変数に 2 を足した値 (27) をセットしています。

SetPixel(hdc, 44, 27, color); という事ですね。

これで最後。


  // (6)
  SetPixel(hdc, x2+2, y2+2, color);
SetPixel の x2,y2 座標に「プラス2」された値が渡されます。SetPixel(hdc, 46, 29, color); という事ですね。x2 と y2 の値が変化させたくない時に使いましょう。というわけで、先ほどの点とSetPixelの対応はこうなります。



では次回、デバッガを使って一行一行実行して、xとyの値の変化を見ていきましょう。

(次回へ続く)