من لا يزال على قيد الحياة؟
الدرس 7 من 18 في دورة لعبة Roblox: النجاة من الكوارث على Coddy.
لمعرفة من فاز، يجب أن تعرف اللعبة من لا يزال على قيد الحياة. يعمل جدول مفهرس باللاعب كمجموعة: survivors[player] = true يضيف لاعبًا، وsurvivors[player] = nil يزيل لاعبًا، وfor player in survivors do يمرّ على كل من تبقّى.
يُطلق كائن Humanoid الحدث Died عندما تصل صحته إلى 0. يتيح الاتصال به عند بدء الجولة إخراج اللاعب من المجموعة لحظة سقوطه:
survivors[player] = true
character.Humanoid.Died:Connect(function()
survivors[player] = nil
end)ينضم إلى الجولة اللاعبون الأحياء عند بدايتها فقط: فالشخص الذي ينتظر إعادة الظهور لديه شخصية ميتة ذات Health يساوي 0، ونقله آنيًا سيؤدي إلى احتساب لاعب ميت على أنه ناجٍ.
التحدي
متوسطتتبّع الناجين في كل جولة:
- عند بدء الجولة، أنشئ جدولًا فارغًا باسم
survivors. - انقل اللاعبين الذين تكون شخصياتهم موجودة فقط، والذين تكون قيمة
Humanoid.Healthلديهم أكبر من 0؛ وأضف كل لاعب منهم إلىsurvivors، واحذفه منها عند موت Humanoid الخاص به. - عند انتهاء الجولة، انقل الناجين فقط إلى الردهة، واطبع عددهم:
Survivors: 1.
اضغط على Play، ثم اقفز من الجزيرة في الجولة الثانية واقرأ نافذة Output. ثم اضغط على Check.
جرّب بنفسك
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local lobbySpawn = workspace.LobbySpawn
print("Rounds last " .. Settings.RoundLength .. " seconds")
-- يحصل كل لاعب على 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 gui = Instance.new("SurfaceGui")
gui.Parent = workspace.StatusBoard
local status = Instance.new("TextLabel")
status.Name = "Status"
status.Size = UDim2.fromScale(1, 1)
status.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
status.TextColor3 = Color3.fromRGB(255, 255, 255)
status.TextScaled = true
status.Text = "Welcome to Disaster Survival!"
status.Parent = gui
local function setStatus(text)
status.Text = text
end
local function teleport(player, target)
local character = player.Character
if character then
character:PivotTo(target.CFrame + Vector3.new(0, 4, 0))
end
end
-- حلقة الجولات
while true do
for seconds = Settings.Intermission, 1, -1 do
setStatus("Intermission: " .. seconds)
task.wait(1)
end
local map = ServerStorage.Maps.Island:Clone()
map.Name = "Map"
map.Parent = workspace
for _, player in Players:GetPlayers() do
teleport(player, map.Spawn)
end
for seconds = Settings.RoundLength, 1, -1 do
setStatus("Time left: " .. seconds)
task.wait(1)
end
for _, player in Players:GetPlayers() do
teleport(player, lobbySpawn)
end
map:Destroy()
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.