מגדל אקראי
שיעור 3 מתוך 18 בקורס משחק Roblox: מגדל אינסופי של Coddy.
מגדל מאותו שלב חמש פעמים הוא לא כיף. ב-ServerStorage.Stages יש שבעה סוגים: מדרגות, לבני הרג, מסוע, מדרגות נעלמות, קפיצה, סביבון ולייזרים. בחרו אחד באקראי לכל קומה:
local all = stages:GetChildren()
local stage = all[math.random(1, #all)]math.random(1, #all) מחזירה מספר שלם מ-1 ועד מספר השלבים, כך שלכל שלב יש סיכוי זהה. רובם עדיין לא עושים כלום: הסביבונים, המסועים והלייזרים שלהם יתעוררו לחיים בפרק הבא.
מעל השלב האחרון מניחים את ServerStorage.Finish, משטח זהב שבו מסתיימת הטיפוס. stack כבר מרים כל Model, ולכן הוא מרים גם את Finish.
אתגר
קל- כתבו
pickStage(): החזירו ילד אקראי שלstages. - בתוך
buildTower, ערמו אתpickStage()במקום אתstages.Steps. - אחרי הלולאה, ערמו את
ServerStorage.Finishבראש.
לחצו על Play כמה פעמים: כל מגדל שונה. ואז לחצו על Check.
נסו בעצמכם
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")
-- כל שחקן מקבל Wins בלוח המובילים
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)
-- מקם עותק של מודל בראש המגדל; מחזיר את העותק ואת הגובה החדש של ראש המגדל
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
-- בנה מגדל משלבים מסוג 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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.