Menu
CoddyTech

Tòa tháp ngẫu nhiên

Bài học 4 trên 21 trong khóa học Trò chơi Roblox: Tháp bất tận của Coddy.

Một tòa tháp có cùng một màn lặp lại năm lần thì chẳng vui chút nào. ServerStorage.Stages có bảy loại: Steps, KillBricks, Conveyor, VanishingSteps, Bounce, Spinner và Lasers. Chọn ngẫu nhiên một loại cho mỗi tầng:

local all = stages:GetChildren()
local stage = all[math.random(1, #all)]

math.random(1, #all) trả về một số nguyên từ 1 đến số màn, nên mỗi màn đều có cơ hội được chọn như nhau. Hầu hết chúng chưa làm gì cả: các vòng quay, băng chuyền và tia laser sẽ hoạt động trong chương tiếp theo.

Trên màn cuối cùng là ServerStorage.Finish, một bục vàng đánh dấu điểm kết thúc hành trình leo trèo. stack đã có thể nâng mọi Model, nên nó cũng nâng được Finish.

challenge icon

Thử thách

Dễ

Hãy xây mỗi tòa tháp từ các tầng ngẫu nhiên, đặt tầng kết thúc lên trên cùng.

  1. Viết pickStage(): trả về một đối tượng con ngẫu nhiên của stages.
  2. Trong buildTower, xếp pickStage() thay vì stages.Steps.
  3. Sau vòng lặp, xếp ServerStorage.Finish lên trên cùng.

Nhấn Chơi vài lần: mỗi tòa tháp sẽ khác nhau và có một bục vàng trên đỉnh. Sau đó nhấn Kiểm tra.

Tự làm thử

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local stages = ServerStorage.Stages
local tower = nil

print("Each tower has " .. Settings.StageCount .. " stages")

-- Mỗi người chơi có Wins trên bảng xếp hạng
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local wins = Instance.new("IntValue")
	wins.Name = "Wins"
	wins.Parent = leaderstats
end)

-- Bài học 4: Đặt tháp ngẫu nhiên ở đây

-- Đặt một bản sao của mô hình lên đỉnh tháp; trả về bản sao và vị trí đỉnh mới
local function stack(template, bottom)
	local copy = template:Clone()
	local box, size = copy:GetBoundingBox()
	local lift = bottom - (box.Position.Y - size.Y / 2)
	copy:PivotTo(copy:GetPivot() + Vector3.new(0, lift, 0))
	copy.Parent = tower
	return copy, bottom + size.Y
end

-- Tạo tháp từ các màn Steps
local function buildTower()
	tower = Instance.new("Model")
	tower.Name = "Tower"
	tower.Parent = workspace
	local top = 0
	for i = 1, Settings.StageCount do
		local stage, newTop = stack(stages.Steps, top)
		top = newTop
	end
end

buildTower()

Tất cả bài học trong Trò chơi Roblox: Tháp bất tận

Tự luyện tập: Playground Roblox