簡単RPG講座。ウィンドウ・システム序章2

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

簡単RPG講座。ウィンドウ・システム序章2

投稿記事 by softya(ソフト屋) » 14年前

ウィンドウ・システムはある意味文字列の処理をするシステムです。
なので、本格的な説明に移る前に文字と文字列についての説明をさせてください。
※ ここでの説明はWindowsに限定しています。処理系やOSによって違うこともありますので覚えておいてください。

●文字列

C言語の文字列に付いて復習しましょう。
まず、文字列はchar*型で復数のchar文字がつながったものです。

例えば
char str[4] = "abc";
だと
str[0] = 'a';
str[1] = 'b';
str[2] = 'c';
str[3] = '\0';
と同じです。
ここで注目して欲しいのは、半角1文字は1charのサイズ=1バイトだと言う事です。
それと最後の文字列終端コード'\0'が文字列の終端として必ず必要なことです。
char str[4] = "abc";には出てきませんが、コンパイラが勝手に補完します。
ちなみに、'\0'は数値で表すと0で16進だと0x00です。
ここまでは基本的なことですね。

ここからさらに深く文字列の内部に潜り込んでみましょう。
"\n"ってご存知ですね。よく使われる改行コードです。
http://ja.wikipedia.org/wiki/%E6%94%B9% ... C%E3%83%89
この改行コードは文字列中では0x0aのコードなんですが、実はテキストしてファイルに書きだすと0x0dと0x0aの2バイトの文字コードに変化します。
これは、ファイル出力でWindowsのテキストファイルの標準的な改行コードに自動変換される仕組みが働くからです。

例えば、
abc[改行]
[EOF]
と言うテキスト書いたとします。
これをバイナリエディタで見ると
61 62 63 0D 0A ←16進
とファイルに格納されています。

では、コンソールアプリで実験してみましょう。

CODE:

#include 
#include 
#include 
#include 

void hexDump(char *str)
{
	int i;

	//	文字列を16進ダンプ
	for( i=0 ; str[i]!='\0' ; i++ ) {
		printf( "%02X ", (unsigned char)str[i] );
	}
	printf( "\n" );
}

int main()
{
	char *str="abc\n";
	char buf[16];
	FILE *fp;
	
	//	そのまま16進ダンプ
	printf( "[元の文字コード]\n" );
	hexDump(str);
	
	//	テキストとしてファイルに書き出す。
	fp = fopen("abc.txt","wt");
	fwrite(str,strlen(str),1,fp);
	fclose(fp);
	
	//	バイナリとしてファイルから読み込む。
	fp = fopen("abc.txt","rb");
	memset(buf,0x00,sizeof(buf));
	fread(buf,sizeof(buf),1,fp);
	fclose(fp);
	//	ファイルのダンプ
	printf( "[ファイルの文字コード(バイナリ)]\n" );
	hexDump(buf);
	
	//	バイナリとしてファイルから読み込む。
	fp = fopen("abc.txt","rt");
	memset(buf,0x00,sizeof(buf));
	fread(buf,sizeof(buf),1,fp);
	fclose(fp);
	//	ファイルのダンプ
	printf( "[ファイルの文字コード(テキスト)]\n" );
	hexDump(buf);
	
	_getch();
	return 0;
}
実行結果
EASY-RPG_con1.png
EASY-RPG_con1.png (40.19 KiB) 閲覧数: 2741 回
どうですか?
読み方で改行コードが変化しましたよね。
ここの特性に詳しくないとシナリオなどをテキストファイル化した時に苦労しますので、ぜひ色々試して理解しておいてください。
今回の場合は、直接シナリオをプログラムに書く予定ですので0x0aとして処理します。


長くなってきたので続きます。
次回、シフトJISって何?です。
最後に編集したユーザー softya(ソフト屋) on 2010年11月27日(土) 16:52 [ 編集 3 回目 ]

ああ
記事: 49
登録日時: 14年前

Re: 簡単RPG講座。ウィンドウ・システム序章2

投稿記事 by ああ » 14年前

今作ってるゲーム来月から、直接シナリオをプログラムに書く予定だったのでめっちゃ参考します!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 簡単RPG講座。ウィンドウ・システム序章2

投稿記事 by softya(ソフト屋) » 14年前

NNK さんが書きました:今作ってるゲーム来月から、直接シナリオをプログラムに書く予定だったのでめっちゃ参考します!
まだ解説に時間がかかるのですいませんがイベント・システムは12月中旬ごろまでお見せ出来ないかも。
ただソースコードに先行してイベントシステムの仕組みとかは12月頭頃に解説できると思います。
時期的に参考になれば良いのですが、そちらが先行してしまうかも知れませんね。