わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

2007年11月5日〜8日

その1

多次元配列は,ゲームの2次元の「盤」や「フィールド」というのを,自然にin a straightforward manner表現するのによく使用されます.
なお,ゲームというのはテレビゲームに限りません.将棋や囲碁もゲームですし,そこでも,離散的な2次元平面ですので,配列で表現できます*1
画面に出しているのは,かつて大流行した,ぷよぷよというテレビゲームでの,フィールドの構成例です.インターネットで見つけてきた画像*2なので,Webで公開している授業資料には載せていませんが.

その2

この課題では,関数呼び出しのコードがあるけどその関数の実体がないという状況で,関数を定義するのが中心となります.
そのためには,まず関数プロトタイプを作ります.
関数プロトタイプは,関数名,引数の並び,戻り値から構成されます.関数名で迷うことはないでしょう.戻り値は,呼び出しているところを見て,変数に代入しているならその変数の型にすればいいのです.代入していなければ,voidにしましょう.
さて,引数ですが,仮引数と実引数は,実体として異なるものであることに注意しながら,型と変数名を決めましょうなお,関数プロトタイプでは,型名の並びのみでよい,つまり変数名は省略できるのですが,型名だけでなく変数名からも,何を引数にとるのかが分かりやすくなりますので,関数定義のときと同じく,変数名も書いておくほうがいいですね.
仮引数の変数名ですが,ここでも呼び出しているところを見ましょう.それで,呼び出しているほうの引数,実引数ってのが一つの変数であれば,その変数名を,仮引数でも使用しましょう.ついでに,仮引数の型名も,それに合わせましょう.argvを引数に渡すときにも,関数宣言での仮引数は「char *argv[]」でいいですよ.
注意を要するのは,実引数で「&変数名」としているところです.これをそのまま,関数宣言にコピーしてはいけません.ここは,実引数の型名を考えてみてください.そこの変数は,struct hostport型ですね.そして「&」は,その参照となるポインタ値を作ります.だから,「&変数名」は,struct hostportのポインタ型,そう,struct hostport *型となります.関数の仮引数にも,この型名を指定します.
分割コンパイルをするコードを書く際には,一つのスクリーンで,「呼び出し位置」と「関数定義」という複数の場所が同時に見えるように,ウィンドウの開き方を工夫しましょう.

*1:授業中には述べませんでしたが,2次元ならば配列で表現しなければならないということはなく,「どの位置に何がある」の情報のみを保持し,その情報のない位置はデフォルト値とする,という表現方法も考えられます.将棋の盤面を保持するには,このほうが効率的だと思います.情報科学では「疎な行列」の表現と関連があります.

*2:テレビなどの実際の画面ではなく,より小さく,同形で色違いの「ぷよの絵」を組み合わせて,フィールドを構成しています.