第2章03 変数を使ったレベルや体力など表示する@イチからゲーム作りで覚えるC言語

イチからゲーム作りで覚えるC言語
連載ページ一覧へ
2章04 char型変数を使って1文字表示して計算する
NEXT : 2章04 char型変数を使って1文字表示して計算する
2章02 変数を使ってレベルから体力などを計算する : PREV

この記事でやること

今回はプロジェクト「0025_keisan」で前回作り上げたソースコードを流用して、引き続き変数を使った計算をし、結果を表示するプログラムを作ってみましょう。

この記事はゆる~くC言語でゲームを作りながらプログラミングを学ぶための連載記事です。シリーズものですので記事の一覧はこちらを参照してくださいね。

前回の変数を使用したプログラム(続き)

前回の計算結果を表示するプログラムは下のように作りました。

#include <stdio.h>
int main( void )
{
 int level;
 int tairyoku;
 float kion;
 level = 5;
 tairyoku = level * 100;
 kion = -60.5f;
 printf("村人A:レベル「%d」だと", level );
 printf("体力も「%d」もあるんじゃのう。\n", tairyoku );
 printf("村人A:ところで今日の気温は「%f」度。\n", kion );
 printf("       雪に埋もれて訓練ですかな。\n");
 level++;
 printf("村人A:おや、いま寒さに耐えて、経験値が上がって\n");
 printf("       レベル「%d」になったようじゃね。\n", level);
}

前回は 8 行目の、tairyoku 変数に数値を代入するところまで説明しましたが、6行目は飛ばしてました。

浮動小数点数型を使う

6行目で、float という文を使っています。
これは小数を扱う変数を宣言できます。
この float で宣言される変数を float と呼びます。小数といっても、PC上でうまく小数を扱うために、効率が良く、誤差が小さくなるような浮動小数点数ふどうしょうすうてんすう)とよばれる形式に従って管理&計算されます。長いし読み方むずかしいですね。

 float kion;

これで kion に小数を代入できるようになりました。
その後、9行目で実際に小数の値を代入します。

 kion = -60.5f;

気温を表す変数 kion にマイナス 60.5 度を設定しました。極寒です。

ここで、数値の後に「f」という一文字がついていますね。
これは浮動小数点定数(floating-constant)と呼ばれ、「F」や「f」を数値の末尾につけると、それは float の変数に代入できる値(型)の数値であることを示し、浮動小数点値(小数)を表すのに使います。

前回は int(整数)、今回は float(浮動小数点)を扱う例を紹介しました。
この2つ以外にもいくつかの基本となる型(基本型)があるので一覧で記載しておきます。
どの型もコードを読んでると出てきます。自分でプログラムを書いていれば、そのうち自然と覚えちゃうと思います。

C言語で使えるイロイロな基本型の一部
使い方
char 文字を扱う時
値の範囲:
-128 ~ 127
chat *message=”わたし体力ぜろ。”;
※この↑の書き方とイミは次の記事で。
short int 型より小さな整数を扱える
値の範囲:
-32,768 ~ 32,767
short moteru_yakusou_no_kazu=10;
int 整数を扱える
値の範囲:
-2,147,483,648
~ 2,147,483,647
int hitpoint = 100;
long int 型より大きな整数を扱える
値の範囲:
-2,147,483,648 ~ 2,147,483,647
long exp = 12345L;
float 小数を扱える
値の範囲:±10-38 ~ ±1038
float powerup1 = 1.5F;
float powerup2 = 1.125f;
double float 型より大きな小数を扱える
値の範囲:±10-4932 ~ ±104932
double kyori = 200000000.432;
bool いろんなフラグ管理に使える。
値の範囲:0(false) か 1(true) を扱える
bool seikai = true;
※この↑の書き方とイミは次の記事で。

上に書いた、それぞれの型がもてる値の範囲については、Windows以外のPCでは違うことがあります。上にかいた値の範囲は標準の Visual Studio 2017 でC言語を使った場合で書いています。

例えば「AVR」とか「PIC」なんていう有名なマイコンがありますが、そういった低スペック上で動くゲームを作ろう!とおもった場合、上の範囲でもてる値も小さく設定されていたりします。
例:int 型で扱える値の範囲が「-32,768 ~ 32,767」とか。

ゲーム作りでの基本型の使い分け注意点

char、short、int、long はどれも整数を扱うことができます。
じゃあ、どれを使ったらよいのでしょうか。これはケースバイケースとなります。
それぞれの型が取り扱える整数の幅は基本的に char < short ≦ int ≦ long だし、全部いちばん大きな数が扱える long 型でプログラム書けばいいじゃん!って思われた方もいるかもです。

扱える数値が大きければそれでも動くと思いますが、一般には int 型が使える数値の範囲で済む処理は long 型ではなく int 型で書いたほうが早く処理できる、とか、使用するメモリの量も少なく済むなどの利点があります。
通常、同じ整数を扱う型では、扱える値が小さいほうが、使うメモリの量は小さいです。
なのでメモリの使用量も char < short ≦ int ≦ long ってことになります。

例えば、 0~100の数値を大量に記憶しておきたい場合どの型でもOKです。でも「大量に」という目的を考えると、char のほうが long よりもメモリ使用量が少ないため、こちらを使ったほうが良い、という話になります。
でも、ちゃんとメモリ量や数値を意識するなら、より正確に定義されている型を使うほうが良いです。標準のchar型、int型などはコンパイルする環境によって使うメモリ量や扱える数値の幅が変わってしまう可能性があるからです。
簡単に書くと、0~100の整数を扱うという目的だったら、 char 型よりも uint8_t 型(0~255を扱うことのできる型)を使ったほうが良いとのこと。これを使うと、char と比べて、使うメモリの量がしっかり決まっているということ、数値の幅が 0~255 で固定(コンパイルする環境によって変わらない)などの利点があります。

特に 3D 系の処理では double 型より float 型での計算が一般的だったり、計算処理の速度が異なることが多いです。(このあたりは対象にするPCとかスマホのGPU(グラフィック演算装置)によって変わってきますけど・・)

とりあえず、プログラムを組みながらそれぞれの型の特徴を覚えつつ、プログラムの速度とか、メモリとかを考えるときに、改めて意識すればよいと思っています。

あとがき

今回はここまで。おつかれさまです。
次回はそれぞれの型を printf で表示する時の変換指定子についてお話したいと思います。
(すでに整数を表示する %d についてはこのシリーズ前の記事でお話しましたー。)

イチからゲーム作りで覚えるC言語
連載ページ一覧へ
2章04 char型変数を使って1文字表示して計算する
NEXT : 2章04 char型変数を使って1文字表示して計算する
2章02 変数を使ってレベルから体力などを計算する : PREV

非常に参考になったサイトさまや、参考文献など

ページの更新履歴

更新日 更新内容
更新なし