プロパティ
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 6/65。
クラスが宣言する変数は、そのクラスのプロパティ(メンバー変数とも呼ばれます)です。各オブジェクトが持つデータです。クラスの先頭で、それぞれ型と初期値を指定して宣言します:
# player.gd
class_name Player
extends RefCounted
var player_name: String = "Hero"
var level: int = 1
var hp: float = 100.0
var inventory: Array[String] = []値を指定せずに宣言されたプロパティは、その型のデフォルト値で始まります。intの場合は0、Stringの場合は""、boolの場合はfalse、Array[String]の場合は空の配列です。
クラスの外では、ドットを使ってプロパティを読み取り、変更します。クラスのメソッド内では、その名前を使います。
var p := Player.new()
p.level += 1
p.inventory.append("sword")
print(p.level) # 2
print(p.inventory) # ["sword"]各オブジェクトは、配列も含めて各プロパティの独自のコピーを持ちます。[]はプレイヤーごとに新しい空の配列を作成するため、ほかのプレイヤーのインベントリは空のままです。
型がチェックされます。p.level = "max" は、プログラムの実行前に報告されるエラーです。これは、level が int を保持しているためです。
チャレンジ
簡単player.gd内のクラスPlayerを完成させてください。次のプロパティを宣言します。
player_name。初期値が"Hero"のStringlevel。初期値が1のinthp。初期値が100のintinventory。初期状態が空のArray[String]
次に、メソッドdescribe()を完成させてください。このメソッドはNAME (level LEVEL, HP hp): ITEMSを返します。ここでITEMSは、インベントリの各要素を", "で結合したものです。インベントリが空の場合はno itemsになります。
用意されたコードは、1人目のプレイヤー名を読み取り、続いてコマンドの数を読み取ってから、コマンドを読み取ります。コマンドはhit AMOUNT、item NAME、またはlevelです。プレイヤーのプロパティを直接変更し、最後にそのプレイヤーと、変更を加えていない2人目のプレイヤーについてdescribe()を出力します。Adaと、コマンドhit 30、item sword、level、item shieldを指定すると、次のように出力されます。
Ada (level 2, 70 hp): sword, shield
Hero (level 1, 100 hp): no itemsコードはplayer.gdに記述してください。main.gdには用意された入出力コードがあり、編集できません。
自分で試してみよう
extends Node
func _ready():
# 提供された入出力コード: そのままにしてください
var hero := Player.new()
hero.player_name = OS.read_string_from_stdin()
var guest := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
match parts[0]:
"hit":
hero.hp -= int(parts[1])
"item":
hero.inventory.append(parts[1])
"level":
hero.level += 1
print(hero.describe())
print(guest.describe())
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ