« 状態 | メイン | C2 »

2005年01月05日

C言語

バイトとお正月も一段落しまして、手始めに中国語の試験勉強をして危機感をひしひしと感じていまして、
でもまあ、C言語。うん。むしろこんな時だからこそ。
目標はGUIを備えたプログラム、一言で言えばウィンドウを利用したプログラムを作ることだったのですが、
ここで目標を変更。以前にブラックジャックを作る動機になったテキストを冬休みが終わった時に返却せねばならないので、
最後まで終わらせたいという意思から、すごろくゲームを作りたいと思います。

目標は、
・マップを外部ファイルから読み込み
・グラフィカルでわかりやすい表示
・細かい関数化
・オブジェクト指向で考えてみる。継承とかはちょっと力量が足りなそうだけれど、関数の組み方とか
・見やすいコード
・バグを!

変数の多くをstaticにしますか。


memo
構造体の初期化に変数は使えない
foo.var = x
とするしかないのかもしれない。
マップを外部ファイルから読み込む事を考えるとする。
外部ファイルは、一行を一マスとして一行ごとにコマに対する情報を設定していく。
例えば書式を「そのマスに止まった時に進める数,そのマスに止まった時にx回休み,そのマスに止まった時に表示するコメント」とすると、


3,0,3進む
0,2,2回休み
2,1,2進んで1休む

これを一行ずつ読み込む。

int temp;
FILE *fp;

fp = fopen("map.txt","r");

while((temp = fgetc(fp)) != EOF) {
ここら辺で二次元配列に入れていく。
もしカンマが入っていれば添え字を1進める。[][++]
\nを検出したら添え字を1進める。[++][]
}

fclose(fp);

変数に文字を追加するのはどうしたものか。
一時変数とsprintfを組み合わせるか、それとも、確か文字列を触る関数の中に追記する物があったはず。
そこら辺でなんとかしましょう、なんとか。
で、さらにそれを構造体に入れる?
それは物凄く効率が悪そうな上にバグのもと。
それならばフラグを使って構造体に一気に入れるほうがよいですね。
旗が立っていればstruct.pre、立っていなければstruct,rest、中途半端に立っていればstruct,comment。

投稿者 miff : 2005年01月05日 22:55

コメント

って、ファイルからの読み込みを考えている時点でオブジェクト指向風味という目標がすっぱり抜けている(汗

とりあえず、ファイルからの読み込み部分は後からはめ込める部分ですので、
バグの原因になりそうだけれど難しい部分を後回しにして、他の部分から作って行きたい所存。

オブジェクト指向風味:
継承だとかインスタンスだとかの重要な部分を実装する能力がまだありません。
とりあえず、オブジェクト指向風味にすごろくゲームを分解して、その部分部分を関数という形でオブジェクトにでっちあげます。
データはスタティック変数、メソッドはその関数専用の関数を作り、それを呼び出す形で。
これで、カプセル化されたメソッドとデータを持つオブジェクト風味っぽい形に。
メッセージは要するに関数呼び出しって事で。(引数付きの関数呼び出し?)

一応、1Pと2P(自動)をコマとして用意するので、重複した関数が二つに。
インスタンスってこんな時にも便利なのだろうなあと夢想。

投稿者 miff : 2005年01月06日 02:01



XREAAD