[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
先日作った文字を画像で表示させる関数を使ってスコア表示をさせようとしたのですが
いくら考えても上手く出来ませんでした。
この関数は、表示にchar型の変数を使っているのですが、スコアは整数(int)型なので
変換(キャスト?)が上手く出来ないんです。
charからintは出来るのですが、intからcharは出来なくはないのですが、色々と難しそうでした。
で、この関数を使うのは諦めて、新しく数字を画像として表示出来る関数を作ろうと思ったのですが
DXライブラリの公式ページにとても良い関数が掲載されていたので、それを広げる感じで
00001234みたいな感じで桁数表示が出来る関数を作ってみました。
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1240682957
このプログラムを動かすとこんな感じです↓
2づつ数字が足されて行きます。
関数としてはこんな感じ
////////////////////////////////// 数値をグラフィック表示する関数//////////////////////////////////
//引数 表示する数字、x座標、y座標
void NumDraw( int Num ,int x , int y)
{
int i , BeamWidth , xx ;
// Numが十進数で何桁になるか調べる
BeamWidth = 0 ;
for( i = 10 ; Num >= i ; i *= 10 ) BeamWidth ++ ;
//0を桁数だけ表示
if( BeamWidth==0 ){
DrawGraph( x-WIDTH , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*2) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*3) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*4) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*5) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*6) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*7) , y , NumHandle1[ 0 ], TRUE ) ;
}
if( BeamWidth==1 ){
DrawGraph( x-(WIDTH*2) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*3) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*4) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*5) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*6) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*7) , y , NumHandle1[ 0 ], TRUE ) ;
}
if( BeamWidth==2 ){
DrawGraph( x-(WIDTH*3) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*4) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*5) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*6) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*7) , y , NumHandle1[ 0 ], TRUE ) ;
}
if( BeamWidth==3 ){
DrawGraph( x-(WIDTH*4) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*5) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*6) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*7) , y , NumHandle1[ 0 ], TRUE ) ;
}
if( BeamWidth==4 ){
DrawGraph( x-(WIDTH*5) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*6) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*7) , y , NumHandle1[ 0 ], TRUE ) ;
}
if( BeamWidth==5 ){
DrawGraph( x-(WIDTH*6) , y , NumHandle1[ 0 ], TRUE ) ;
DrawGraph( x-(WIDTH*7) , y , NumHandle1[ 0 ], TRUE ) ;
}
if( BeamWidth==6 ){
DrawGraph( x-(WIDTH*7) , y , NumHandle1[ 0 ], TRUE ) ;
}
// 画面左上にグラフィックで描画
// x は数字グラフィックを描く矩形の左端の座標です
xx = (BeamWidth*-(WIDTH/1000)) * WIDTH ;
for( i = 0 ; i <= BeamWidth ; i ++ )
{
DrawGraph( x+xx , y , NumHandle1[ Num % 10 ], TRUE ) ;
xx -= WIDTH ;// 描画X座標を移動
Num /= 10 ;// 1番下の桁が描画し終わったので一桁下げる
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
元々、数字を画像で表示するところまでは出来ていたので、桁数が上がる度に
表示場所を文字画像のx分ずらして、0の表示を一つ減らすようにしただけです。
for文などを使えば、もっと簡潔に纏める事が出来るような気がするのですが
良い方法を思いつきませんでした^^;
これを踏まえて、スコア表示を追加したのがコレ↓
大して変わってませんが、ちゃんと敵を倒したらスコアが上がって行きます^^
10 | 2024/11 | 12 |
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 |
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!