Как создать игру Roblox, в которой игрок должен угадать случайно сгенерированный пин? - PullRequest
0 голосов
/ 23 апреля 2020

Итак, я работал над этим на прошлой неделе. Я перепробовал все (основываясь на своих знаниях) и пока ничего ... мой код не работал первый раз, второй раз, третий раз ... четвертый ... et c ... в конце я позволил разочарованию взять меня под контроль и в итоге удалил весь сценарий. К счастью, не части и модели, в противном случае я действительно ввернут ...

Мне нужно создать игру, в которой я должен создать своего рода клавиатуру, сначала я думал, что GUI будет работать .. нет, это должен быть Surface GUI, с которым я не знаю, как правильно обращаться ... В любом случае, мне нужно было создать клавиатуру с использованием Surface GUI и отобразить ее на отдельном экране, как обычно клавиатура будет ...

Игрок сначала должен будет ввести «начальный» номер, то есть, чтобы ввести случайно сгенерированный номер, который ему сначала понадобился для ввода пина stati c, чтобы «войти» , "после этого он попытался бы угадать число ...

Я буквально попробовал все, что мог, но ничего ... Это в основном из-за моего отсутствия опыта в LUA, я" я более продвинут в Python и почти ничего не знаю в Java ... Если бы кто-нибудь мог помочь мне в том, как это сделать, я был бы очень признателен

1 Ответ

0 голосов
/ 05 мая 2020

Сначала загрузите этот и поместите его на экран Gui в Starter Gui. Затем используйте следующее LocalScript, помещенное в рамку PIN-кода:

-- Script settings

local len = 4 -- replace this as needed...
local regen = false -- determines whether PIN will regenerate after a failed attempt
local regmes = "Enter PIN..." -- start message of PIN pad
local badmes = "Wrong PIN!" -- message displayed when PIN is wrong
local success = "Correct PIN!" -- message displayed when PIN is right


-- Script workings

local pin = script.Parent
local top = pin.Top
local txt = top.Numbers
local nums = top.NumKeys
local pin
local stpin
local nms
txt.Text = regmes
local see = game:GetStorage("ReplicatedStorage").PINActivate
local function activate()
    if pin.Visible then
        pin.Visible = false
        for _, btn in pairs(nums:GetChildren()) do
            btn.Active = false
        end
        return
    else
        pin.Visible = true
        for _, btn in pairs(nums:GetChildren()) do
            btn.Active = true
        end
        return
    end
end
local function rand()
    math.randomseed(os.time) -- better random numbers this way
    return tostring(math.floor(math.random(0,9.9)))
end
local function gen()
    nms = {rand()}
    for i=2, len, 1 do
        nms[#nms+1]=rand()
    end
    stpin = nms[1]
    for i=2, #nms, 1 do
        stpin = stpin..nms[i]
    end
    pin = tonumber(stpin) -- converts the number string into an actual number
end
gen()
local function activate(str)
    if tonumber(str) ~= pin then
        txt.Text = badmes
        wait(2)
        txt.Text = regmes
        if regen then
            gen()
            wait(0.1)
        end
        return
    else
        txt.Text = success
        wait(2)
        activate()
        -- insert code here...
    end
end
for _, btn in pairs(nums:GetChildren()) do
    btn.Activated:Connect(function()
        if txt.Text == "Wrong PIN!" then return end
        txt.Text = txt.Text..btn.Text
        if string.len(txt.Text) >= len then
            activate(txt.Text)
        end
        wait(0.1)
    end)
end
see.OnClientEvent:Connect(activate)

И в сценарии укажите это:

local Players = game:GetService("Players")
local see = game:GetService("ReplicatedStorage").PINActivate
local plr
-- replace Event with something like Part.Touched
Event:Connect(function(part)
    if part.Parent.Head then
        plr = Players:GetPlayerFromCharacter(part.Parent)
        see:FireClient(plr)
    end
end)

Что это будет делать, это вызвать ScreenGui только для этого игрока, чтобы они могли ввести PIN-код, а также закрыть его. Вы можете изменить по мере необходимости; хорошего дня! : D

...