Menu
CoddyTech

方法

本课属于 Coddy GDScript 学习旅程的“面向对象编程”单元。第 5 课,共 65 课。

在类中声明的函数称为方法:它是该类的对象可以执行的操作。和任何函数一样,方法可以接收参数并返回一个值,也可以读取和更改对象的变量:

# score_board.gd
class_name ScoreBoard
extends RefCounted

var points: int = 0

func greet() -> void:
	print("Scoreboard ready")

func add(amount: int) -> void:
	points += amount

func doubled() -> int:
	return points * 2

func add_bonus() -> int:
	add(10)
	return points

使用点号调用对象的方法,并在括号中传入参数:

var board := ScoreBoard.new()
board.greet() # 记分板已就绪
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15

在类中,一个方法通过名称调用同一对象的另一个方法:add(10) 在 add_bonus() 中表示 self.add(10)。

使用 -> void 声明的方法不会返回任何内容,而使用 -> int 声明的方法必须返回一个 int。每次调用都只作用于自己的对象:board.add(5) 会修改 board.points,不会影响其他记分板。

调用必须与声明匹配:不带参数的 board.add() 会在程序运行前报错。

challenge icon

挑战

简单

完成 bank_account.gd 中 BankAccount 类的方法。账户使用变量 balance 存放余额,初始值为 0。

  • deposit(amount) 会将 amount 加到余额中
  • withdraw(amount) 会扣除 amount 并返回 true。如果 amount 大于余额,则不做任何更改并返回 false
  • get_balance() 会返回余额

提供的代码会读取后续命令的数量,然后逐行读取命令:deposit AMOUNT 或 withdraw AMOUNT。它会为每条命令输出一行,并输出最终余额。对于 deposit 50 和 withdraw 80,输出如下:

Deposited 50
Not enough money for 80
Current balance: $50

请将你的代码写在 bank_account.gd 中。main.gd 包含提供的输入和输出代码,不能修改。

亲手试试

extends Node

func _ready():
	# 提供的输入和输出代码:保持原样。
	var account := BankAccount.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var amount := int(parts[1])
		if parts[0] == "deposit":
			account.deposit(amount)
			print("Deposited %d" % amount)
		elif account.withdraw(amount):
			print("Withdrew %d" % amount)
		else:
			print("Not enough money for %d" % amount)
	print("Current balance: $%d" % account.get_balance())
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: GDScript 在线编译器