シューティングゲーム作成入門トップに戻るスコアボードを表示しよう今回はスコアボードを表示してみます。スコアの種類ですが、とりあえず、ハイスコア、スコア、グレイズ、ライフの値を表示するようにします。ハイスコアについては、まだデータのセーブを実装してないので、とりあえず0だけ表示するようにします。そのためのクラス、SCOREクラスを作成します。All();SCORE();};↑これがスコアボード用の文字画像と数字の画像です。この画像は透過画像でかつ文字が白なので何も見えないと思いますが、ちゃんと文字が書かれています。文字画像の方を分割すると合計4つになり、数字画像の方は10個になります。数字画像用のグラフィックハンドルg_number[10]を画像の数だけ配列で宣言しています。その他は、そのスコアの値を表す変数です。仕組みとしては、SetScore関数やGetScore関数を使って値の設定及び取得を行い、Draw関数でその値を描画するという流れになります。SetScore関数、GetScore関数は以下のようになっています。life;break;}//該当しないときはー1を返す。-1;}SetScore関数は第一引数に列挙型のSOOREDATA型を指定します。SCOREDATE型は上記のヘッダファイルに書いてある通りです。第二引数にスコアの値を指定します。引数がLIFE_SCOREだった場合はそのまま変数に値を代入しますが、それ以外はそれぞれの変数にスコアの値を加算するようにswitch文で分岐しています。GetScore関数は第一引数にSCOREDATA型を指定します。switch文にて分岐し、該当した値を返すようにしています。次にDraw関数です。i=0;i<num;++i){DrawGraph(SCORE_X+100+i*19,175,g_number[(buf[i]-'0')],TRUE);}}まず最初にスコアボードの文字の描画を行っています。定数SCORE_Xというのはdefine.hで以下のように定義しています。390スコアボード文字を書く際のX座標を定数として設定しているだけです。スコア描画部分の説明についてですが、まず各変数の値を一時変数bufにsprintfで代入してます。sprintfの戻り値は格納した値の文字数を返します。現在のスコアが1500であれば、4を返します。その下のforループで、その文字数分だけループしています。内部の処理ですが、まずX座標の指定部分のコードを見てください。SCOREX+20というのは数字の書き出し位置の基準となるX座標です。この値に19×iの値を足すと、数字の書き出し位置が取得できます。19×iというのは、数字の画像一つ分の幅が19だからです。1111という値を描画しようとしたら、文字数は4です。最初のループではiは0なので、最初の数字はSCOREX+20の位置に描かれます。次のループでiは1なので、次の数字はSCOREX+20+19の位置に描かれます。数字の間の間隔が丁度良い間隔で空いて、数字が描画できることになります。Y座標の指定はただ丁度良い位置に微調整した値を直接指定しているだけです。三つ目のグラフィックハンドルについてですが、bufには1バイトずつ数字が順番に格納されてます。添え字にiを使えば、先頭の数字から取り出すことができます。この数字は文字扱いなので、計算に使うとANSIコードの値を返します。この値から文字としての数字の0を引くと、実際の数字を得ることが出来ます。該当の数字の画像を指定できることになります。他のスコアについてもこれを繰り返しているだけです。このDraw関数をAll関数で呼び出しています。次に得点を実際に加えるために、CONTROLクラスのCollisionAll関数の中でSetScore関数を呼び出してスコアを加算したりします。敵を倒すと100点、グレイズ一つで20点の設定にしています。最後に一度だけ実行して値を設定してます。PLAYERクラスからGetLife関数というものを呼び出していますが、これはただlife値を返すだけの関数です。今回の変更に伴って、PLAYERクラスのSetDamage関数を、ライフが一つ減るように変更しています。PLAYER::SetDamageFlag(){damageflag=true;//ライフを減らす--life;//消滅エフェクトのフラグを立てるeffect_pdead.SetFlag(x,y);}後はこのSCOREクラスのAll関数をCONTROLクラスのAll関数で呼び出すだけです。すると、以下の動画のようにスコアボードを表示することができます。今回の説明は以上です。次回はアイテムを出現させてみましょう。メニューレイアウト変更。ブラウザキャッシュのクリアをお願い致します。レイアウト変更に伴いブラウザキャッシュのクリアをお願いします。TOPページのデザインを変更。相互リンクページに、複数サイト追加。C言語学習ページ発展編(1~9章)追加。HTML/CSSリファレンスのページ追加。