Menu
CoddyTech

Свойства

Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 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] = []

Свойство, объявленное без значения, по умолчанию получает значение своего типа: 0 для int, "" для String, false для bool и пустой массив для 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 в player.gd. Объяви следующие свойства:

  • player_name — String, исходное значение которого — "Hero"
  • level — int, исходное значение которого — 1
  • hp — int, исходное значение которого — 100
  • inventory — Array[String], изначально пустой

Затем заверши метод describe(). Он возвращает NAME (level LEVEL, HP hp): ITEMS, где ITEMS — это элементы инвентаря, соединённые с помощью ", ", или no items, если инвентарь пуст.

Предоставленный код считывает имя одного игрока, затем количество последующих команд и сами команды: hit AMOUNT, item NAME или level. Он напрямую изменяет свойства игрока и в конце выводит результат 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