日記・コラム・つぶやき

2013年5月23日 (木)

C言語のお勉強 ポインタ編 第3回

先生

ポインタ変数も変数だ

生徒

そうですね

先生

ポインタ変数にもとうぜん識別番号が振られている。識別番号は喩えだが

生徒

そういうことになりますね

先生

ポインタ変数の識別番号を格納する変数もまたポインタ変数だ

生徒

あれ?そこはポインタへのポインタとか言うんじゃないですか?

先生

違うぞ。ポインタ変数はポインタ変数だ

生徒

どういうことですか?

続きを読む "C言語のお勉強 ポインタ編 第3回"

| | コメント (2)

2013年5月21日 (火)

C言語のお勉強 ポインタ編 第2回

生徒

ポインタは関数呼び出しの実引数を書き換えるのに使うと習いました

先生

ああ、うん、そうだね

生徒

何ですか?その煮え切らない感じ

先生

どうしてポインタを使わないと実引数を書き換えられないのか説明できるかい?

生徒

話を逸らしましたね。ええと、仮引数は実引数のコピーなので仮引数を書き換えても実引数に影響しない…ですよね

先生

そうだ。そのように実引数のコピーが仮引数に代入される仕組みを値渡しと呼ぶ

生徒

そこがポインタだと違うわけですね

先生

違わない

生徒

へ?

先生

違わないのだよ。引数の型がポインタであっても値渡しだ

生徒

どういうことですか?

続きを読む "C言語のお勉強 ポインタ編 第2回"

| | コメント (0)

2013年5月20日 (月)

C言語のお勉強 ポインタ編 第1回

先生

変数は値を入れる箱だという喩えを聞いたことがあるかい?

生徒

ええ、よくある喩えですね

先生

その箱にアクセスするとき変数名を使うね。例えばこんな具合だ

int i;
i = 100;
printf("%d\n", i);
先生

実はその箱には必ず識別番号が振られている。識別番号は喩えだが

生徒

識別番号ですか?何のために?

先生

もちろん箱にアクセスするためだ

生徒

変数名を使えばいいじゃないですか

先生

名前の無い変数もあるのさ。名前の付いた変数は寿命が決まっているが名前の無い変数にはそのような縛りがない

生徒

何ですか?それ

先生

いまは知らなくていいよ。名前に縛られないメリットは他にもある。要するに便利なのさ

続きを読む "C言語のお勉強 ポインタ編 第1回"

| | コメント (0)

2011年2月 7日 (月)

ビデオゲームプログラムのワークフロー

特別なことではないが、わたしはずいぶん前からメインループを切り離し、サブルーチンをコールバックする構造でプログラムを作っている。

内部状態を1フレーム分進行させるUPDATEルーチンと呼び出された時点の内部状態で画面描画するRENDERルーチンが基本的に1フレームに1回ずつ呼び出されて動く構造だ。

ふと、いつからこんなふうに作っていたのかと思い返してみたら、20年ほど昔、ハードウェアで実装されたスプライト機能を搭載したパソコンで必要に迫られたものだったと思い出した。

数少ないスプライトに動的にキャラクタを割り付けたり、テアリングを避けるために垂直同期の帰線期間内に設定しなければならなかったから描画処理をまとめる必要があった。

その後、世の中はPC/AT互換機一色に。フレームバッファ方式になってさほど描画処理をまとめることに神経質になる必要が無くなった。ところがポリゴンの登場で再び描画処理をまとめる必要が出てきた。

パソコン以外では、マルチスレッドが使えない協調型マルチタスク環境とか、描画イベントのコールバック以外で描画用のコンテキストを取得できない環境とか、制限の厳しいプラットフォームが現役だが、この構造はあらゆるプラットフォームに容易に対応できる。

ビデオゲームプログラミングを始めて間もないひとの中には、1フレームごとに呼び出し元に戻るプログラミングを受け入れ難いというひとが大勢いるようだが、複数のキャラクターを並行して動かすときには、同様の入れ子の構造のコードを書くことになる。

けっきょく入れ子のレベルがひとつ増えるだけの違いなのだから、メイン『ループ』などという先入観を植え付けられる前にコールバックを受け入れてしまえば良いと思うのだ。

| | コメント (5)