Menu
CoddyTech

Proprietà

Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 6 di 65.

Le variabili dichiarate da una classe sono le sue proprietà (chiamate anche variabili membro): i dati che ogni oggetto contiene. Dichiarale all'inizio della classe, ciascuna con un tipo e un valore iniziale:

# 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] = []

Una proprietà dichiarata senza un valore parte dal valore predefinito del suo tipo: 0 per int, "" per String, false per bool e un array vuoto per Array[String].

Fuori dalla classe leggi e modifichi una proprietà con un punto. Nei metodi della classe usi il suo nome:

var p := Player.new()
p.level += 1
p.inventory.append("sword")
print(p.level) # 2
print(p.inventory) # ["sword"]

Ogni oggetto riceve la propria copia di ogni proprietà, array inclusi: [] crea un nuovo array vuoto per ogni giocatore, quindi l'inventario di un altro giocatore rimane vuoto.

Il tipo viene controllato: p.level = "max" è un errore segnalato prima che il programma venga eseguito, perché level contiene un int.

challenge icon

Sfida

Facile

Completa la classe Player in player.gd. Dichiara queste proprietà:

  • player_name, una String che inizia come "Hero"
  • level, un int che inizia da 1
  • hp, un int che inizia da 100
  • inventory, un Array[String] che inizia vuoto

Poi completa il metodo describe(). Restituisce NAME (level LEVEL, HP hp): ITEMS, dove ITEMS è l'inventario unito con ", ", oppure no items quando l'inventario è vuoto.

Il codice fornito legge un nome per un giocatore, poi quanti comandi seguono e infine i comandi: hit AMOUNT, item NAME oppure level. Modifica direttamente le proprietà del giocatore e infine stampa describe() per quel giocatore e per un secondo giocatore che non ha mai modificato. Per Ada e i comandi hit 30, item sword, level e item shield, stampa:

Ada (level 2, 70 hp): sword, shield
Hero (level 1, 100 hp): no items

Il tuo codice va in player.gd. main.gd contiene il codice fornito per l'input/output e non può essere modificato.

Provalo tu

extends Node

func _ready():
	# Supplied input/output code: keep it as it is
	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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore GDScript online