===== ついにLUTを使う! =====
LUT=Look Up Table(参照表です)\\
LUTで文字表を読んで描く
#include "DxLib.h"
#include
namespace
{
const int WIN_WIDTH = 1024;
const int WIN_HEIGHT = 768;
char str[] = "I Scream IceCream!";
char samp[] = "CAB";
const int CHAR_W = 20;
const int CHAR_H = 20;
const int MARGIN = 8;
const int MAX_MOJI = 8*7;//8列7行の表
struct Point
{
int x;
int y;
};
Point LUT[MAX_MOJI];
}
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);
}
//大文字’U’を引数にすると21が帰ってくる
// 20 ← GetWordNum('U');
int GetWordNum(char moji)
{ //char str[56+1] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!?. ";と同じ
char str[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!?. ";
int length = strlen(str);
int res = -1;//なんも見つからなかったら-1をエラーとして返す
for (int i = 0; i < length; i++)
{
if (moji == str[i]) {
res = i;
break;
}
}
return( res );
}
void MakeLUT()
{
//LUTをつくるよ!
//LUT[56]にwx,wyを設定していく
const int TWIDTH = 8;//画像の文字の表の幅(文字数)
for (int i = 0; i < MAX_MOJI; i++)
{
Point tmp;
tmp.x = i % TWIDTH;
tmp.y = i / TWIDTH;
LUT[i] = tmp;
}
}
//
//Point GetWordPos(char moji)
//{
//
//
//
// return(LUT[res]);
//}
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); //表示するメッセージの文字数
//Look UP Table (参照表)を前処理で作っておけたらかっちょいい
MakeLUT();
while (true)
{
ClearDrawScreen();
//ここにやりたい処理を書く
//char samp[] = "ABC";
//20x20 @ 1文字
int TWIDTH = 8;//画像の文字の表の幅(文字数)
for (int i = 0; i < length; i++)
{
int n = GetWordNum(str[i]);
//int wx = n % TWIDTH;
//int wy = n / TWIDTH;
DrawRectGraph(10 + MARGIN * i, 10, //表示位置の調整
LUT[n].x*CHAR_W, LUT[n].y*CHAR_H, CHAR_W, CHAR_H,
hWTable, TRUE); //画像からの切り抜き位置
}
//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])
// {
// case 'A':
// DrawRectGraph(10 + MARGIN * i, 10,
// 0, 0, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'B':
// DrawRectGraph(10 + MARGIN * i, 10,
// 20, 0, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'C':
// DrawRectGraph(10 + MARGIN * i, 10,
// 40, 0, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'D':
// DrawRectGraph(10 + MARGIN * i, 10,
// 60, 0, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'E':
// DrawRectGraph(10 + MARGIN * i, 10,
// 80, 0, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'F':
// DrawRectGraph(10 + MARGIN * i, 10,
// 100, 0, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'G':
// DrawRectGraph(10 + MARGIN * i, 10,
// 120, 0, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'H':
// DrawRectGraph(10 + MARGIN * i, 10,
// 140, 0, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'I':
// DrawRectGraph(10 + MARGIN * i, 10,
// 0, 20, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'J':
// DrawRectGraph(10 + MARGIN * i, 10,
// 20, 20, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'K':
// DrawRectGraph(10 + MARGIN * i, 10,
// 40, 20, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'L':
// DrawRectGraph(10 + MARGIN * i, 10,
// 60, 20, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'M':
// DrawRectGraph(10 + MARGIN * i, 10,
// 80, 20, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'N':
// DrawRectGraph(10 + MARGIN * i, 10,
// 100, 20, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'O':
// DrawRectGraph(10 + MARGIN * i, 10,
// 120, 20, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'P':
// DrawRectGraph(10 + MARGIN * i, 10,
// 140, 20, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'Q':
// DrawRectGraph(10 + MARGIN * i, 10,
// 0, 40, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'R':
// DrawRectGraph(10 + MARGIN * i, 10,
// 20, 40, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'S':
// DrawRectGraph(10 + MARGIN * i, 10,
// 40, 40, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'T':
// DrawRectGraph(10 + MARGIN * i, 10,
// 60, 40, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'U':
// DrawRectGraph(10 + MARGIN * i, 10,
// 80, 40, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'V':
// DrawRectGraph(10 + MARGIN * i, 10,
// 100, 40, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'W':
// DrawRectGraph(10 + MARGIN * i, 10,
// 120, 40, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'X':
// DrawRectGraph(10 + MARGIN * i, 10,
// 140, 40, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'Y':
// DrawRectGraph(10 + MARGIN * i, 10,
// 0, 60, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'Z':
// DrawRectGraph(10 + MARGIN * i, 10,
// 20, 60, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'a':
// DrawRectGraph(10 + MARGIN * i, 10,
// 40, 60, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'b':
// DrawRectGraph(10 + MARGIN * i, 10,
// 60, 60, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'c':
// DrawRectGraph(10 + MARGIN * i, 10,
// 80, 60, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'd':
// DrawRectGraph(10 + MARGIN * i, 10,
// 100, 60, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'e':
// DrawRectGraph(10 + MARGIN * i, 10,
// 120, 60, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'f':
// DrawRectGraph(10 + MARGIN * i, 10,
// 140, 60, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'g':
// DrawRectGraph(10 + MARGIN * i, 10,
// 0, 80, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'h':
// DrawRectGraph(10 + MARGIN * i, 10,
// 20, 80, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'i':
// DrawRectGraph(10 + MARGIN * i, 10,
// 40, 80, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'j':
// DrawRectGraph(10 + MARGIN * i, 10,
// 60, 80, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'k':
// DrawRectGraph(10 + MARGIN * i, 10,
// 80, 80, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'l':
// DrawRectGraph(10 + MARGIN * i, 10,
// 100, 80, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'm':
// DrawRectGraph(10 + MARGIN * i, 10,
// 120, 80, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'n':
// DrawRectGraph(10 + MARGIN * i, 10,
// 140, 80, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'o':
// DrawRectGraph(10 + MARGIN * i, 10,
// 0, 100, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'p':
// DrawRectGraph(10 + MARGIN * i, 10,
// 20, 100, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'q':
// DrawRectGraph(10 + MARGIN * i, 10,
// 40, 100, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'r':
// DrawRectGraph(10 + MARGIN * i, 10,
// 60,100, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 's':
// DrawRectGraph(10 + MARGIN * i, 10,
// 80, 100, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 't':
// DrawRectGraph(10 + MARGIN * i, 10,
// 100, 100, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'u':
// DrawRectGraph(10 + MARGIN * i, 10,
// 120, 100, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'v':
// DrawRectGraph(10 + MARGIN * i, 10,
// 140, 100, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'w':
// DrawRectGraph(10 + MARGIN * i, 10,
// 0, 120, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'x':
// DrawRectGraph(10 + MARGIN * i, 10,
// 20, 120, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'y':
// DrawRectGraph(10 + MARGIN * i, 10,
// 40, 120, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case 'z':
// DrawRectGraph(10 + MARGIN * i, 10,
// 60, 120, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case '!':
// DrawRectGraph(10 + MARGIN * i, 10,
// 80, 120, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case '?':
// DrawRectGraph(10 + MARGIN * i, 10,
// 100, 120, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case '.':
// DrawRectGraph(10 + MARGIN * i, 10,
// 120, 120, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// case ' ':
// DrawRectGraph(10 + MARGIN * i, 10,
// 140, 120, CHAR_W, CHAR_H, hWTable, TRUE);
// break;
// default:break;
// }
//}
// DrawGraph(10, 10, hWTable, TRUE);
ScreenFlip();
WaitTimer(16);
if (ProcessMessage() == -1)
break;
if (CheckHitKey(KEY_INPUT_ESCAPE) == 1)
break;
}
DxLib_End();
return 0;
}
===== 最終形(連想配列を使った参照表) =====
Mapを使ってプログラムをきれいにしていくよ
#include "DxLib.h"
#include
#include