===== ついに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 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]; std::map LUM; } 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; } char str[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!?. "; //int length = strlen(str); for (int i = 0; i < MAX_MOJI; i++) { LUM[str[i]] = LUT[i]; } } // //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; char moji_ima = str[i]; DrawRectGraph(10 + MARGIN * i, 10, //表示位置の調整 LUM[moji_ima].x*CHAR_W, LUM[moji_ima].y*CHAR_H, CHAR_W, CHAR_H, hWTable, TRUE); //画像からの切り抜き位置 } ScreenFlip(); WaitTimer(16); if (ProcessMessage() == -1) break; if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) break; } DxLib_End(); return 0; }