6:文字列処理と"t"
ひととおりクラスをおさらいしたので、今回からいよいよゲームの土台を作っていくことにします。土台さえしっかりしていれば、この土台を基盤にパズルゲームだろうがロールプレイングゲームだろうが、楽~に開発することができるようになります。すべてが音だけで進行するセガサターン「風のリグレット」のような、よっぽど特殊なゲームでない限り、ゲームには処理結果を表示する画面が不可欠です。MacOSやWindowsのような環境では、それらの描画はすべてウィンドウ上で行われます。そこでまず手始めに、ウィンドウを表示するプログラムを作成することにします。
#include <tchar.h>
#include <windows.h>
int APIENTRY _tWinMain
(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpszCmdLine, int nCmdShow)
{
return 0;
}
Windowsでは2通りの文字処理方法があります。ひとつは1バイト毎に1文字を代入した配列(つまり
char
[])を利用する方法、もうひとつは2バイト毎に1文字を代入した配列(つまりwchar_t
[])を利用する方法です。前者はANSI、後者はUnicodeと呼ばれていますUnicode対応のOSでは、ANSI文字列は、内部では一度Unicodeに変換されていますので、そんな手間をかけるならはじめからUnicodeで処理できるようにすればいいじゃないかというのが人間の常というもので、その違いを吸収するのがこの「T」というわけです。
他にも、ANSI専用命令の関数や宣言が数多くあります。以下はその一例です。なお、共通の宣言を記述する際には<tchar.h>が必要となりますので、お忘れのないように。
ANSI | Unicode | 共通(コンパイル時に適時変換) |
---|---|---|
char | wchar_t | TCHAR |
strcpy | wcscpy | _tcscpy |
LPSTR(=char*) | LPWSTR(=wchar_t*) | LPTSTR(=TCHAR*) |
"文字列" | L"文字列" | _T("文字列") |
シフトJISやUTF-8では漢字などの文字はchar型では収まりきれないため、2バイト分の領域を使用するわけですが、1バイト分の領域しか使わない英数字と組み合わせた文字列になると、その対処方法は非常にやっかいなものになります。当プログラミング講座では、<tchar.h>を用いた混合スタイルを利用しますが、面倒であればUnicode専用命令のみで記述してコンパイルしてもよいでしょう。