今回はプロジェクト「0020keisan」で前回作り上げたソースコードを参考に新しいプロジェクト「0025keisan2」を作成して、変数を使った計算をし、結果を表示するプログラムを作ってみましょう。
前回の計算結果を表示するプログラムは下のように作りました。
#include <stdio.h>
int main( void )
{
printf("村人A:あなたのレベルは「%d」なんですか!\n", 5);
printf("村人A:レベル「%d」ともなれば、\n", 5);
printf(" 凡人とはやっぱりちがいますよね。\n");
printf("村人A:なんかオーラというか、そういうの。\n");
printf("村人A:レベル「%d」だと体力も「%d」もあるんですね。\n", 5, 5 * 100 );
}
このプログラムはレベル5 のプレイヤーに話しかける村人の会話をイメージしています。
プレイヤーの体力は 5 × 100 で、1 レベル上がると体力が 100 上がっていくようなイメージです。
じゃあ、レベルが 6 になったときは、どうプログラムを書いたらよいでしょうか。
数値 5 の部分を 6 用に全部書き換えれば、レベル 6 のプレイヤーに向けた文章となるかと思います。でもプレイヤーのレベル毎に文章を用意して表示して・・・とするのは非常に効率が悪いですね。
このレベルや体力ような、場合によって変わるような数値を
変数を使うことで、うまく処理できます。
変数とは変数は数値だったり文字だったりを入れておくことのできる箱のようなもの、とよく例えられます。
変数をC言語で作るとき、まずは「こういう名前で、これくらいの整数が入る箱をつくるよ」という
宣言をします。
宣言をして、整数だったり文字だったりを入れることのできる箱(変数)ができたら、晴れてそこに整数や文字を入れることができます。
変数に文字を入れることを代入とよびます。
この数値だったり文字などを記録しておくことのできる箱はどこにできているかというと、 PCやスマホなどに組み込んであるメモリの中に作られます。 PCやスマホの電源を落としたりすると後に残らないため揮発性(きはつせい)メモリと呼ばれています。
変数はちゃんとハードディスクやSDカード上などにファイルとして保存(セーブ)しておかないと消えてしまうので、ゲームプログラミングをするときも、どの変数をちゃんとディスクやSDカードに保存したか、注意する必要があります。
このあたりのハードウェアの基本的な知識は、後々ポインタについてお話する際にもう少し細かくお話しようと思います。
新しくプロジェクト「0025_keisan2」を作成 し、 空のソースコード「Keisan2.c」を作成して以下の内容をコピペもしくはキーボードからエディタに入力してみてください。
このソースコードは前のプロジェクトで作成した 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);
}
実行してみると、下のような結果になります。
村人A:レベル「5」だと体力も「500」もあるんじゃのう。
村人A:ところで今日の気温は「-60.500000」度。
雪に埋もれて訓練ですかな。
村人A:おや、いま寒さに耐えて、経験値が上がって
レベル「6」になったようじゃね。
いくつか変更を加えています。
ではでは、4行目から見ていきましょう。
int level;
ここで整数をいれることができる level という名前の変数を宣言しています。
int 変数名;
という書き方で、以降、変数名に整数を代入することができます。
今後、この変数名に整数を代入したり、取り出したり出来るようにするよ!
ということです。この int で宣言された変数を int型と呼びます。
Integerの頭3文字をとっていて、日本語で「整数」という意味です。そのまんまですね。
変数は 使う前に上のような書き方でまず宣言する必要がある ので、注意しましょう。
その後、6行目で実際に数値「5」を代入しています。
level = 5;
書き方はこんな感じですね。
変数名 = 変数にいれる値;
あ、変数名、=(イコールの記号)、変数に入れる値、のそれぞれの間はスペースや改行をいれても大丈夫です。 あまり離れすぎてると人間の目で読みづらくなってしまうのでおすすめはしませんけど・・。
int level;
level = 100;
などのように最初の行で変数 level を宣言したあと、 次の行で変数の最初の値を代入(初期化)するプログラムは1行にまとめることができます。
int level = 100;
int 変数名 = 整数
という書き方ですね。
以降、このmain関数の中では「level」は整数の変数として扱うことができます。 また、Keisan2.c の 8 行目で、プレイヤー体力を想定した変数 "tairyoku" に level × 100 の結果を代入しています。
tairyoku = level * 100;
つまりこの式で tairyoku = 5 * 100 = 500 で、500が代入されることになります。 記号「*」(アスタリスクと読む)は掛け算を表しています。 こんな風に掛け算以外に、2つの整数を計算する電卓のような処理はプログラムで簡単に書くことができます。
2つの整数の基本的な演算に使う記号と、使った例
記号 | 意味 |
---|---|
+ | 足し算 |
– | 引き算 |
* | 掛け算 |
/ | 割り算の商 |
% | 割り算の余り |
Keisan2.c の14行目で、今までにない演算が登場しています。
変数名++
という書き方です。
これは変数の中身を 1 プラスするという意味で、
インクリメントと呼ばれます。
「++変数名」という書き方でも同じ結果になります。
level++;
変数 level は数値「5」から「6」にインクリメントされることになります。
逆に 変数の中身を1 マイナスするという演算は
変数名–-
のように「–」の記号を使います。これは
デクリメントと呼ばれます。
「-–変数名」という書き方でも同じ結果になります。
1つの整数の演算によく使う記号と使った例
記号 | 意味 | 使い方例 | 結果 |
---|---|---|---|
++ | 1プラス | int level = 5; ++level; | 6 |
-— | 1マイナス | int hitpoint = 100; hitpoint-–; | 99 |
今回は非常によく使われる変数と計算について、例を使ってお話しました。
最後に14行目の結果、無事に15行目でレベルが 6 になった文章が表示されているかとおもいます。
printf("村人A:おや、いま寒さに耐えて、経験値が上がって\n");
printf(" レベル「%d」になったようじゃね。\n", level);
ここで、16行目の「%d」に整数の変数 level の中身が表示されたかとおもいます。
最初 level は 5 で、 level++ が演算されて 6 となっていますので、最終的に下のように表示されていれば想定通りです!
村人A:レベル「5」だと体力も「500」もあるんじゃのう。
村人A:ところで今日の気温は「-60.500000」度。
雪に埋もれて訓練ですかな。
村人A:おや、いま寒さに耐えて、経験値が上がって
レベル「6」になったようじゃね。
今回はここまで。お疲れ様です。
更新日 | 更新内容 |
---|---|
2018/8/27 | ソースコードが一部誤っていたため、修正(羽田様、ご指摘ありがとうございます!!) あわせて、末尾14行目~の解説を少し追記。 |
羽田 哲夫 2018年8月25日 12:30 PM
「第2章02 変数を使ってレベルから体力などを計算する」のプログラムに記載されている最後のprintf文に「level」変数の記載が抜けているようです。
本当に為になり、毎日ワクワクしながらサイトに従いVisual Studio Community 2017 にプログラムを入力しています。
以上
あまじ 2018年8月27日 11:24 PM
羽田様、貴重なコメント&ご指摘ありがとうございます!最後の printf 文の「level」変数記載が抜けている件、修正させていただきました。楽しく読んでいただだけているようで、とてもとてもうれしいです。記事について、後半のイラストや記載が薄いものもある
ので、なるべく充実させるように頑張ろうと思います。また気軽にご指摘、コメントいただけるとうれしく思います。(連載記事の中でリンク切れになっちゃっている箇所がありますが、すぐに修正する予定ですので、少々お待ちいただければと思います。)
コメント、ありがとうございます。
ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。
Twitter:@NodachiSoft_jpお名前:以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください
お名前: