文字列のテーブルを読んで画像で表示するよ
第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; }