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

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

先日作った文字を画像で表示させる関数を使ってスコア表示をさせようとしたのですが
いくら考えても上手く出来ませんでした。
この関数は、表示にchar型の変数を使っているのですが、スコアは整数(int)型なので
変換(キャスト?)が上手く出来ないんです。
charからintは出来るのですが、intからcharは出来なくはないのですが、色々と難しそうでした。

で、この関数を使うのは諦めて、新しく数字を画像として表示出来る関数を作ろうと思ったのですが
DXライブラリの公式ページにとても良い関数が掲載されていたので、それを広げる感じで
00001234みたいな感じで桁数表示が出来る関数を作ってみました。
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1240682957
このプログラムを動かすとこんな感じです↓
s-WS000375.jpg
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文などを使えば、もっと簡潔に纏める事が出来るような気がするのですが
良い方法を思いつきませんでした^^;

これを踏まえて、スコア表示を追加したのがコレ↓
s-WS000374.jpg
大して変わってませんが、ちゃんと敵を倒したらスコアが上がって行きます^^

PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
Twitter
カレンダー
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
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]