かつどんの活動記録 #01(2018/07/05)

まぁそんな訳(どんな訳)で初投稿。
今日の自分が何を知って、何をしたのかを残しときたいなって理由で始めました。
毎日とはいかずとも、気が向いたときに日記感覚で書いていきます。

【今日の活動】
1文字を表示する<number.cpp>とそれを使ってスコアの表示をする<score.cpp>を作った。

< number.cpp >

#include "sprite.h"        // SpriteDraw の定義場所
#include "texture.h"       // テクスチャの管理場所
#include "number.h"

void Number_Draw(float x, float y, int n)        // 表示座標x、表示座標y、表示する値
{
    if (n < 0 || 9 < n)                      // nの範囲指定( 0 < n < 9 )
    {
	return;
    }

    // 値の表示
    SpriteDraw(TEXTURE_INDEX_NUMBER, x, y, n*NUMBER_WIDTH, 0, NUMBER_WIDTH, NUMBER_HEIGHT);
}

引数で座標と表示する値を受け取れるようになってます。

この画像を、受け取ったnの値のよって切り取り座標をずらし、数字1つを表示するようになってます。

< score.cpp >

#include "number.h"

static int score_keta;            // 引数で受け取った桁数を入れとく
static int count_stop_value;      // カンスト値

/* 初期化 */ 
void Score_Initialize(int keta)   // 桁数
{
    // 受け取ったketaの値を格納
    score_keta = keta;

    // 桁数からカンストを求める
    count_stop_value = 1;
    for (int i = 0; i < keta; i++)
    {
        count_stop_value = count_stop_value * 10;
    }
    count_stop_value -= 1;
}

/* 表示 */
void Score_Draw(float x, float y, int score)        // 表示座標x、表示座標y、スコア
{
    if (score < 0)        // スコアが0より低くならないように
    {
    	score = 0;
    }

    // カンストしているかどうかを調べる
    if (score > count_stop_value)
    {
	score = count_stop_value;
    }

    // 一桁目を右側に表示して、右に一桁ずらす
    for (int i = 0; i < score_keta; i++)
    {
        Number_Draw(x + (score_keta - i - 1) * NUMBER_WIDTH, y, score % 10);
	score /= 10;
    }
}

さっき作ったNumber_Drawを使ってスコアを表示します。
まずScore_Initialize内でカンスト値を求めます。
カンスト値は、1を、受け取った桁数回10倍し、その値を-1することで求めました。
Score_Draw内では受け取ったスコアが0より低いか、カンスト値を超えていないかを調べ、一桁目から順に表示するようになってます。
例えばスコアが15673の場合、3から順に7651と表示していきます。
この時気をつけなければならないのが表示座標xで、1を表示したいxに(score_keta - i - 1) * NUMBER_WIDTHを足してあげることで表示されるスコアがおかしくならないようにしています。

このように表示されます。

【実用例】
scoreに変数を渡してあげ、敵を倒した時に+=100など

この記事が気に入ったらサポートをしてみませんか?