Menu
CoddyTech

プロパティ

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 を保持しているためです。

challenge icon

チャレンジ

簡単

player.gd内のクラスPlayerを完成させてください。次のプロパティを宣言します。

  • player_name。初期値が"Hero"のString
  • level。初期値が1のint
  • hp。初期値が100のint
  • inventory。初期状態が空の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())
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: GDScriptオンラインコンパイラ