文字列のテーブルを読んで画像で表示するよ

第1回気合でやってみる!

Listing. 1: 文字列を画像で表示してみよう!
"theMain.cpp"
#include "DxLib.h"
#include <string.h> //C言語の文字列関数を使うために必要
 
namespace
{
	const int WIN_WIDTH = 1024;
	const int WIN_HEIGHT = 768;
	char str[] = "I Scream IceCream!";//目標はこの文字列を文字表の画像から切り抜いて表示すること(スプライトフォント)
	char samp[] = "CAB";//練習用短い文字列
	const int CHAR_W = 20;//画像の1文字の幅
	const int CHAR_H = 20;//画像の1文字の高さ
}
 
 
void DxInit()
{
	ChangeWindowMode(true);
	SetWindowSizeChangeEnableFlag(false, false);
	SetMainWindowText("文字列を画像で表示するぞ");
	SetGraphMode(WIN_WIDTH, WIN_HEIGHT, 32);
	SetWindowSizeExtendRate(1.0);
	SetBackgroundColor(0, 0, 205);
 
	// DXライブラリ初期化処理
	if (DxLib_Init() == -1)
	{
		DxLib_End();
	}
 
	SetDrawScreen(DX_SCREEN_BACK);
}
 
 
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
{
	DxInit();
 
	int hWTable = -1; //画像の読み込みが成功すると0より大きいハンドルが返ってくるよ!
	hWTable = LoadGraph("Image\\abc_table_refine.png");
 
	int length = strlen(str);//strlen(文字配列の名前)これで文字列の長さ(純粋にスペースを含む文字の数)が返ってくるよ!
 
	while (true)
	{
		ClearDrawScreen();
 
		//ここにやりたい処理を書く
		//char samp[] = "ABC";
		//20x20 @ 1文字
 
 
		for (int i = 0; i < length; i++)//文字配列の長さ分繰り返す!
		{
			//if (samp[i] == 'A')
			//{
			//	DrawRectGraph(10 + 20 * i, 10,
			//		           0, 0, 20, 20, hWTable, TRUE);
			//}
			//else if (samp[i] == 'B')
			//{
			//	DrawRectGraph(10 + 20 * i,10, 
			//		          20, 0, 20, 20, hWTable, TRUE);
			//}
			//else if (samp[i] == 'C')
			//{
			//	DrawRectGraph(10 + 20 * i, 10, 
			//		          40, 0, 20, 20, hWTable, TRUE);
			//}
 
			switch (str[i])//1文字ずつ気合で切り抜く場所を指定する!
			{
			case 'A':
				DrawRectGraph(10 + 20 * i, 10,
					0, 0, CHAR_W, CHAR_H, hWTable, TRUE);
				break;
			case 'B':
				DrawRectGraph(10 + 20 * i, 10,
					20, 0, CHAR_W, CHAR_H, hWTable, TRUE);
				break;
			case 'C':
				DrawRectGraph(10 + 20 * i, 10,
					40, 0, CHAR_W, CHAR_H, hWTable, TRUE);
				break;
////////////////////////////////////省略/////////////////////////////////////////////////////////////////
//自分で書いてね!(ここが気合)
			case '?':
				DrawRectGraph(10 + 20 * i, 10,
					100, 120, CHAR_W, CHAR_H, hWTable, TRUE);
				break;
			case '.':
				DrawRectGraph(10 + 20 * i, 10,
					120, 120, CHAR_W, CHAR_H, hWTable, TRUE);
				break;
			case ' ':
				DrawRectGraph(10 + 20 * i, 10,
					140, 120, CHAR_W, CHAR_H, hWTable, TRUE);
				break;
			default:break;
			}
		}
 
 
		ScreenFlip();
		WaitTimer(16);
		if (ProcessMessage() == -1)
			break;
		if (CheckHitKey(KEY_INPUT_ESCAPE) == 1)
			break;
	}
 
	DxLib_End();
	return 0;
}