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.
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.
- Viết
pickStage(): trả về một đối tượng con ngẫu nhiên củastages. - Trong
buildTower, xếppickStage()thay vìstages.Steps. - Sau vòng lặp, xếp
ServerStorage.Finishlê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