忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

文字を画像で表示させたいな~と思い、実装方法を考えてみました。
以前HSPで数字を画像で表示させた事はあったのですが、文字の場合はどうすれば良いのか?
と思い調べてみたら、文字には文字コードと言う数字が与えられている事が判りました。
対応する文字コード表は「C言語 文字コード」なんかでググれば、すぐ出てきますのでそちらを
参照して下さい。

で、この文字コード表をみてみると、大文字のA~Z、小文字のa~z、数字の0~9がそれぞれ
連番で文字コードが与えられています。コレを上手く使えば文字を画像で表示できるかと思い
簡単な文字⇔画像変換プログラムを作ってみました。
プロジェクトファイルはコチラ↓
http://file.ktstg.blog.shinobi.jp/draw_mojigazou.zip
このプログラムを動かすとこんな感じ↓
s-WS000372.jpg
フォント画像はMighty's Notebookさんで公開されているSEGAフォントを使用させてもらって
Edge2で作成しました。

プログラムとしてはこんな感じ↓
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "DxLib.h"
#include <string.h>
#define WIDTH  24 // 文字グラフィック横幅
#define HEIGHT 24 // 文字グラフィック高さ

int NumHandle[ 100 ]; // 文字グラフィックの配列

//文字を画像に変換する関数
//引数 文字列、表示座標X、表示座標Y
//返値 なし
void draw_mojigazou(char str[] , int x , int y){
 int i;//ループ用
 int j;//2重ループ用
 int len;//文字列の長さを調べる変数
 len = strlen(str);//文字列の長さ(桁数)を調べる

 for(i=0;i<len;i++){//文字列の数だけ繰り返す
  for(j=0;j<26;j++){//英字大文字用
   if( str[i]==65+j )DrawGraph( i*24+x , y , NumHandle[ j ], TRUE ) ;}
  for(j=0;j<26;j++){//英字小文字用
   if( str[i]==97+j )DrawGraph( i*24+x , y , NumHandle[ j+26 ], TRUE ) ;}
  for(j=0;j<10;j++){//数字用
   if( str[i]==48+j )DrawGraph( i*24+x , y , NumHandle[ j+52 ], TRUE ) ;}
 }
}

// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
     LPSTR lpCmdLine, int nCmdShow )
{
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

 LoadDivGraph( "Edge1.png" , 62 , 26 , 3 , WIDTH , HEIGHT , NumHandle ) ;//文字グラフィック読み込み
 draw_mojigazou("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 10,10);//文字表示
 draw_mojigazou("abcdefghijklmnopqrstuvwxyz", 10,40);//文字表示
 draw_mojigazou("0123456789", 10,70);//文字表示

 // キー入力待ち
 WaitKey() ;

 DxLib_End() ;   // DXライブラリ使用の終了処理

 return 0 ;   // ソフトの終了
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
draw_mojigazouと言う画像変換用の関数を作って、好きな文字と表示場所を指定出来るように
してみました。
draw_mojigazouの"と"の間に入力した文字が画像として指定した座標に表示されます。

例えば、draw_mojigazou("ABC",0,0)と入力したとします。
すると、str[0]に文字型のAが、str[1]にB、str[2]にCが代入されます。
代入したstrをstrlen関数を使って長さを調べてlenに代入します。この場合は3が代入されますね。

次にstr[0]に何が代入されているか調べます。
これは文字コードを総当りで調べていて、この場合はAが代入されているので、文字コード表によると
A=65となり、str[0]が65かどうかを調べれば良いって事になります。
で、65だった場合はDrawGraph関数を使ってAの画像を表示させる・・・と言った感じ。

ただ、一つ気になる事があって、関数の宣言でchar str[]と言う感じで記述しているのですが
これで文字の為の配列変数を勝手に確保してくれてるのかどうか?ってのが
良く判らないんですよね
まぁ、ちゃんと動いてるような感じなので、エエかな?とは思っているのですが^^;

とりあえず、この関数を現在作成中のゲームに組み込もうと思っているのですが
使用するフォントをどれにするかが問題なんですよね^^;
 

PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カウンター
ゲーマータグ
Twitter
携帯百景
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新コメント
[11/24 kt.]
[11/24 kt.]
[11/24 NONAME]
[11/23 NONAME]
[10/05 tejas]
プロフィール
HN:
kt.
HP:
性別:
男性
自己紹介:
STG大好きな40歳。
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
アクセス解析
忍者ブログ [PR]