2008年01月15日
挨拶コマンドテーブル作成!
データーを、別ファイルにしてプログラムを変更しました。
ファイルをダウンロード
■ sample.txt の中身は、こんな感じです。
0600,1159,「おはよう!只今の時間は~
1200,1759,「こんにちは。只今の時間は~
1800,2159,「こんばんわ。只今の時間は~
2200,2359,「お休みなさい。只今の時間は~
0000,0559,「グーグー・・・只今の時間は~
9999,9999,終了
■ このデーターを格納する構造体は、
typedef struct _smp_data {
int sta_time; //開始時間
int end_time; //終了時間
char message[256]; //文字列
} smp_data_t;
sample.txt の一行目のデーターを、smp_data の構造体メンバーが対応します。
sta_time に、0600
end_time に、1159
message に、「おはよう!只今の時間は~
を、代入して行きます。
※ file_main.cpp で、全部の行を構造体配列に格納します。
while( !feof(fp) )
{
fscanf_s( fp, "%d,%d,%s", &msg_data[i].sta_time, &msg_data[i].end_time,&msg_data[i].message, 255 );
i++;
}
これで、0600は、6時00分、1159は、11時59分となり、その間で表示する挨拶文は、
message の、「おはよう!只今の時間は~ ・・・となります。
※最後の行、9999 は終端データーとして使用しています。
■ さて先日の time_main.cpp を下記のように変更しました。
for(i=0;;i++) {
if(msg_data[i].sta_time == 9999 ) break; // 9999 ならデーターの終端
i_hm = newtime.tm_hour * 100 + newtime.tm_min; // 6時35分なら、635となる。
if(i_hm >= msg_data[i].sta_time && msg_data[i].end_time >= i_hm )
{
printf( msg_data[i].message, newtime.tm_hour, newtime.tm_min, newtime.tm_sec);
break;
}
}
これで、プログラムとデーターが完全に分離できました。
以後、メッセイジの変更や、時間の変更は、
この sample.txt を編集すれば、対応可能になります。
現場で求められるアプローチは、まずデーター(現在はスクリプトデーター)と、
プログラムをしっかり分けて構築することです。
その結果、プログラムからは定数が減り、変数のみになります。
是非、みなさんも、いろいろ工夫して下さい。
簡単なテキストアドベンチャーのシステムを作ってみるだけでも、
かなりスキルアップに繋がりますよ!
※システム系のプログラムでも、データーベースを多用しますが同様です。
投稿者 shiozumi : 16:03 | コメント (0) | トラックバック (0)
コメント
コメントを送ってください