第6章 プログラミング(変数編)
おそらく初めてプログラミングをする人は「変数」という言葉に見慣れない人が多いでしょう。プログラミングをする上で変数とは欠かせません。ここでしっかり押さえておきましょう。
1.変数とは
2.変数名とその役割
3.変数宣言
4.代入
5.演算子
変数とは
プログラミングにおいて変数とはコンピューターが値を保存する記憶領域のことです。ざっくり説明しますとコンピューターが値を記憶する場所のことです。
値には様々な種類があり「1」「83」「0.5」の数の値もあれば「こんにちは」「Hello」「 ( 5 , 10 ) 」などの文字列の値やベクトルの値もあります。
変数はあらゆる場所で使われています。「プレイヤーの攻撃力」「敵の防御力」「主人公の名前」などはすべて変数です。
ゲーム開発以外の場面でも使われており、「年齢」や「生年月日」、「ユーザーの名前」なんかも変数で処理されています。
変数名とその役割
変数には名前があります。その変数の名前を変数名と呼びます。いまいちピンと来ないかもしれませんが、先ほど登場した「プレイヤーの攻撃力」「敵の防御力」「主人公の名前」「年齢」…などはすべて変数名です。
なぜ変数名が必要なのか。と思う方もいるかもしれません。では皆さんは「153」という数の値を見た時に何かわかりますか?おそらく理解できる人は一人もいないでしょう。これはMちゃんの身長を示しています。
「わかるわけないだろ!」と思いますよね。コンピューターも同じです。数値だけではわかるわけがないのです。もしこれが「m_stature」という変数名であれば、すんなり理解できたと思います。
こういった変数や値に対する曖昧さを回避するために変数名は必要なのです。しっかりと変数に変数名で意味付けをしてあげてください。
ここで変数名のルールを書いておきます。
1.半角英数字または「_」の文字を使用できる。
2.1文字目に数字をつかうことはできない。
3.あらかじめ用意されたキーワードと全く同じ名前は使うことはできない。(func、extends、varなど)
「あらかじめ用意されたキーワード」とはGDScriptがすでに使っているキーワードのことです。func、extend、var、switch、for…など多くの文字が使われております。ですがキーワードと全く同じになることはほとんどないため気にする必要はありません。
変数名として使える例 :player_level、_attack_point、item_1、func_point
変数名として使えない例:敵データ、_攻撃力、1_up、func
変数宣言
まず、変数を使うためにはコンピューターに「〇〇っていう変数名の変数を使うよ!」と言わなくてはなりません。これを変数宣言と言います。
GDScriptにおいて変数宣言の文法は以下のようになっております。
var <変数名>
ではさっそくノードにスクリプトをアタッチしてプログラムを書いてみましょう。(スクリプトのアタッチは第5章を参照してください。)
不安要素をなくすために筆者のシーン・プロジェクトの構成を載せておきます。(Programノードの種類はNode2Dです。)
ソースコードの余分なコメントを削除しましょう。
extends Node2D
func _ready():
pass
そうしたら早速、変数を宣言します。今回は変数名を「value」にします。(「#」の後ろの文字列はコメントなので不要です)
extends Node2D
func _ready():
var value # 変数宣言
これで「value」という変数名の変数を宣言することができました。
これで変数宣言は完了です。
代入
変数宣言で変数を用意出来たら、次は変数に値を入れていきます。変数宣言をしたばかりでは「変数に変数名はついているけど値はない」状態です。
実際に以下のように変数を出力してみてください。print( 変数名 ) で変数を出力できます。
extends Node2D
func _ready():
var value # 変数宣言
print( value ) # 変数の出力
実行すると下パネルに以下のような出力がされています。
「Null」とは何もないという意味です。つまりこの変数には何も入っていません。変数名だけが付いている状態です。
何も入っていないことが確認できたので、次は値を入れる方法を見ていきましょう。
変数に値を入れることを代入と言います。代入の文法は以下の通りです。
<変数名> = <値>
プログラミングにおいて「=」は代入という意味です。数学では等しいという意味になりますがプログラミングでは違います。間違えて覚えないように注意してください。
ではさっそく代入をしましょう。今回は「10」という数の値を代入します。
extends Node2D
func _ready():
var value # 変数宣言
value = 10 # 代入
print( value ) # 変数の出力
ソースコードを入力したら実行してみましょう。
今度は「Null」ではなく「10」という数の値が出てきました。ほかにも試してみましょう。
extends Node2D
func _ready():
var value_1 # value_1の変数宣言
var value_2 # value_2の変数宣言
value_1 = 10 # value_1へ代入
value_2 = 33 # value_2へ代入
print( value_1 ) # value_1の出力
print( value_2 ) # value_2の出力
このように変数宣言を2回しても基本的なところは同じです。
では次の実行結果はどうなるでしょうか。
extends Node2D
func _ready():
var value # 変数宣言
value = 10 # 代入
value = 100 # もういちど代入
print( value ) # 変数の出力
なんとvalueに「10」を代入した後に、さらに「100」を代入しています。そしてその実行結果は…
「100」と表示されました。では「10」はどこに行ってしまったのでしょうか?
実は代入は上書きなのです。すでにある値を削除して新たに書き換えることが代入です。
なので先ほどの変数「value」は次のように変化していました。
代入のポイントとしては「=」は等しいではなく代入、代入は上書きという2点です。
演算子
演算子という名前を知らなくとも見たことはたくさんあると思います。とくによく見るのは「+」「ー」「×」「÷」の四則演算子でしょう。演算子とは計算をするために表す記号のことです。先ほど登場した「=」も代入演算子と呼ばれます。
ここでは最もよく使われるであろう四則演算を実践していきます。
まずは「value_left」と「value_right」の変数を2つ用意します。
extends Node2D
func _ready():
# 変数宣言
var value_left
var value_right
# 変数の代入
value_left = 10
value_right = 5
次は value_left と value_right の足し算(加算)の結果を出力しましょう。
extends Node2D
func _ready():
# 変数宣言
var value_left
var value_right
# 変数の代入
value_left = 10
value_right = 5
# 変数の加算の結果を出力
print( value_left + value_right )
実行結果は次のようになります。
これは非常に単純です。「value_left」が10、「value_right」が5のため「10 + 5」で15という結果になったのです。
では他の引き算(減算)、掛け算(乗算)、割り算(除算)も同様の手順で出力してみましょう。気を付けなくてはならないのは掛け算は「*」(Shift + 「:」)、割り算は「/」を使うことです。
extends Node2D
func _ready():
# 変数宣言
var value_left
var value_right
# 変数の代入
value_left = 10
value_right = 5
# 変数の加算の結果を出力
print( value_left + value_right )
# 変数の減算の結果を出力
print( value_left - value_right )
# 変数の乗算の結果を出力
print( value_left * value_right )
# 変数の除算の結果を出力
print( value_left / value_right )
実行結果は以下のようになります。
これらの計算結果は変数に代入することができます。
extends Node2D
func _ready():
# 変数宣言
var value_left
var value_right
var result
# 変数の代入
value_left = 10
value_right = 5
# 計算結果をresultに代入
result = value_left + value_right
# resultを出力
print( result )
出力結果です。
演算子の例として最後にもう一つだけ例を出します。次のコードの実行結果はどうなるでしょうか。
extends Node2D
func _ready():
# 変数宣言
var value
# 変数の代入
value = 10
value = value + 15
# valueを出力
print( value )
同じ変数を使っているからエラー?いいえそうではありません。
実行結果は25となります。これは代入演算子の特徴で「右の処理を優先して処理をする」というものがあるからです。
「valueと15を足してvalueに入れる」と表現すれば日本語でも違和感なく覚えられると思います。
「こんなのどこで使うの?」と考える人もいるかもしれません。例えばRPGを作るとしてプレイヤーのレベルを上げる処理が必要になったときに、演算子を使えば「level = level + 1」の一行で済ますことができます。
以下にサンプルコードと実行結果を置いておきます。
extends Node2D
func _ready():
# 変数宣言
var level
# levelの代入
level = 1
# levelを出力
print( "現在のレベル:" , level )
print( "テレレレッテッテッテー!!レベルが上がった!!" )
#levelに1加算した結果をlevelに入れる
level = level + 1
# levelを出力
print( "現在のレベル:" , level )
変数はゲームの中にありふれていますが、その基本はどれも同じです。まだ触れていない部分(文字列の値、変数の型)などありますがとりあえずは変数で数の値をしっかりと処理できれば大丈夫です。
次
前
この記事が気に入ったらサポートをしてみませんか?