Como Fazer um Jogo Capture the Flag

Como Criar Capture The Flag no Roblox Studio

Quer aprender a desenvolver um jogo incrível no Roblox? Hoje eu vou te mostrar passo a passo como criar um Capture The Flag no Roblox Studio, desde a configuração das equipes até a programação da bandeira e do sistema de pontuação!

No vídeo abaixo, você acompanha a aula completa e, logo depois, pode conferir todos os códigos utilizados para facilitar sua aprendizagem. 💻🔥

Assista agora e bora programar! 🚀👇

🚩 Como Criar um Capture The Flag no Roblox Studio! 🎮

Se você sempre quis desenvolver um jogo no Roblox Studio, essa é sua chance! No vídeo de hoje, eu te ensino passo a passo como criar um Capture The Flag, desde a configuração das equipes até a programação da bandeira e do sistema de pontuação.

Assista agora e aprenda a programar seu próprio jogo! 💻🔥

💡 Códigos da Aula: Como Criar um Capture The Flag no Roblox Studio!

Aqui estão todos os códigos usados na aula para você acompanhar e testar no seu jogo. Eles vão te ajudar a configurar equipes, criar a mecânica de captura da bandeira e definir a pontuação.

Copie, adapte e crie sua própria versão do Capture The Flag! 🚀💻

LocalScript

				
					local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RemoteEvent = ReplicatedStorage.RemoteEvent

local ScreenGui = script.Parent.ScreenGui

local BluePoints = ScreenGui.Frame.BluePoints

local RedPoints = ScreenGui.Frame.RedPoints




RemoteEvent.OnClientEvent:Connect(function(points)
	RedPoints.Text= points.red
	BluePoints.Text= points.blue
end)
				
			

ServerScript

				
					local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RemoteEvent = ReplicatedStorage.RemoteEvent
local Teams = game:GetService("Teams")
local Players = game:GetService("Players")

local points ={
	red=0,
	blue=0
}

local BlueFlag = ReplicatedStorage.BlueFlag
local RedFlag = ReplicatedStorage.RedFlag

local BlueFlagTool  = ReplicatedStorage.BlueFlagTool
local RedFlagTool = ReplicatedStorage.RedFlagTool

local SpawnBlue = game.Workspace.SpawnBlue
local SpawnRed = game.Workspace.SpawnRed

local RedBase  = game.Workspace.RedBase
local BlueBase = game.Workspace.BlueBase

local teamBlue = Teams:FindFirstChild("TeamBlue")
local teamRed= Teams:FindFirstChild("TeamRed")


local function handFlag(player:Players, flag)
	print(player.Name.."Agora está carregando a bandeira")
	flag:Destroy()
	local FlagTool
	
	if flag.Name=="BlueFlag" then
		FlagTool = BlueFlagTool:Clone()
		player:SetAttribute("HasFlag", true)
		player:SetAttribute("ColorFlag", "Blue")
	else
		FlagTool = RedFlagTool:Clone()
		player:SetAttribute("HasFlag", true)
		player:SetAttribute("ColorFlag", "Red")
	end
	
	FlagTool.Parent = player.Backpack
	local humanoid = player.Character  and player.Character:FindFirstChild("Humanoid")
	if humanoid then
		humanoid:EquipTool(FlagTool)
	end
	wait(1)
	
end

local function restartGame()
	local numberBlue = #teamBlue:GetPlayers()
	local numberRed =  #teamRed:GetPlayers()
	
	for _, player in ipairs(Players:GetPlayers()) do
		if not player.Team then
			if numberBlue<= numberRed then
				player.Team = teamBlue
			else
				player.Team = teamRed
			end
		end
		local character = player.Character
		local humanoidRootPart= character and character:WaitForChild("HumanoidRootPart")
		if player.Team == teamBlue then
			humanoidRootPart.CFrame = SpawnBlue.CFrame * CFrame.new(0,1,0)
		else
			humanoidRootPart.CFrame = SpawnRed.CFrame * CFrame.new(0,1,0)
		end
	end
end
local function generateFlag()
	if game.Workspace:FindFirstChild("Flags") then
		game.Workspace.Flags:Destroy()
		
	end
	local FolderFlags = Instance.new("Folder")
	FolderFlags.Name="Flags"
	FolderFlags.Parent=game.Workspace
	
	local redFlag = RedFlag:Clone()
	local blueFlag = BlueFlag:Clone()
	redFlag.Parent= game.Workspace.Flags
	blueFlag.Parent=game.Workspace.Flags
	
	local randomX = math.random(50,50)
	local ramdomZ = math.random(-50,50)
	
	redFlag:SetPrimaryPartCFrame(RedBase.CFrame + Vector3.new(randomX, 1, ramdomZ))
	blueFlag:SetPrimaryPartCFrame(BlueBase.CFrame + Vector3.new(randomX, 1, ramdomZ))
	
	local redFlagDebounce= false
	redFlag.Part.Touched:Connect(function(hit)
		print("Encostei na flag")
		if hit.Parent:FindFirstChild("Humanoid") then
			local character = hit.Parent
			local player = Players:GetPlayerFromCharacter(character)
			
			if player.Team ~= teamRed and not redFlagDebounce then
				redFlagDebounce =true
				
				print("Carregar bandeira")
				handFlag(player, redFlag)
				wait(2)
				redFlagDebounce= false
				
			end
		end
	end)
	local blueFlagDebounce =false
	blueFlag.Part.Touched:Connect(function(hit)
		if hit.Parent:FindFirstChild("Humanoid") then
			 local character = hit.Parent
			 local player = Players:GetPlayerFromCharacter(character)
			 
			 if player.Team ~= teamBlue and not blueFlagDebounce then
					blueFlagDebounce = true
					print("Entregar a bandeira pro player")
					handFlag(player, blueFlag)
					wait(2)
					blueFlagDebounce= false
			 end
		end
	end)
	
end
generateFlag()

local function addAttributePlayer(player)
	if not player:GetAttribute("HasFlag") then
		player:SetAttribute("HasFlag", false)
		player:SetAttribute("ColorFlag", nil)
	end
end


local function removeTool(player:Player, color)
	-- Verificar no Backpack
	for _, tool in pairs(player.Backpack:GetChildren()) do
		if tool:IsA("Tool") and tool:GetAttribute("color") == color then
			print("Removendo ferramenta do Backpack:", tool.Name)
			tool:Destroy()
			return true
		end
	end

	-- Verificar no Character (caso esteja equipada)
	local character = player.Character
	if character then
		for _, tool in pairs(character:GetChildren()) do
			if tool:IsA("Tool") and tool:GetAttribute("color") == color then
				print("Removendo ferramenta equipada:", tool.Name)
				tool:Destroy()
				return true
			end
		end
	end

	print("Nenhuma ferramenta com cor", color, "foi encontrada para", player.Name)
	return false
		
end

local function updateAllPlayers()
	for _, player in pairs(Players:GetPlayers()) do
		RemoteEvent:FireClient(player, points)
	end
end
BlueBase.Touched:Connect(function(hit)
	if hit.Parent:FindFirstChild("Humanoid") then
		local character = hit.Parent
		local player = Players:GetPlayerFromCharacter(character)
		
		if player.Team == teamBlue then
			if player:GetAttribute("HasFlag") and  player:GetAttribute("ColorFlag")=="Red" then
				print("Entregar bandeira vermelha no blueBase")
				player:SetAttribute("HasFlag", false)
				player:SetAttribute("ColorFlag", nil)
				points.blue += 1
				
				-- restarr game
				-- mostrar tela o pontos
				
				updateAllPlayers()
				removeTool(player, "Red")
				restartGame()
				generateFlag()
				
				print(points)
			end
			
		end
	end
end)

RedBase.Touched:Connect(function(hit)
	if hit.Parent:FindFirstChild("Humanoid") then
		local character = hit.Parent
		local player = Players:GetPlayerFromCharacter(character)

		if player.Team == teamRed then
			if player:GetAttribute("HasFlag") and  player:GetAttribute("ColorFlag")=="Blue" then
				print("Entregar bandeira vermelha no blueBase")
				player:SetAttribute("HasFlag", false)
				player:SetAttribute("ColorFlag", nil)
				points.red += 1
				-- remover tool
				removeTool(player, "Blue")
				-- restarr game
				-- mostrar tela o pontos
				updateAllPlayers()
				restartGame()
				generateFlag()
				print(points)
			end
		end
	end
end)
BlueBase.Touched:Connect(function(hit)
	if hit.Parent:FindFirstChild("Humanoid") then
		local character = hit.Parent
		local player = Players:GetPlayerFromCharacter(character)
		if player.Team == teamBlue then
			if not player:GetAttribute("HasFlag") then
				print("Carregar bandeira")
				handFlag(player, blueFlag)
				player:SetAttribute("HasFlag", true)
				player:SetAttribute("ColorFlag", "Blue")
				points.blue += 1
				-- rest
				-- restarr game
				-- mostrar tela o pontos
				generateFlag()
				print(points)

			end

		end
	end
end)


Players.PlayerAdded:Connect(function(player)
	local numberBlue = #teamBlue:GetPlayers()
	local numberRed = #teamRed:GetPlayers()
	
	if numberBlue <= numberRed then
		player.Team = teamBlue
	else
		player.Team = teamRed
	end
	
	addAttributePlayer(player)
	
	player.CharacterAdded:Connect(function(character)
		local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
		if player.Team == teamBlue then
			humanoidRootPart.CFrame = workspace.SpawnBlue.CFrame  * CFrame.new(0,1,0)
		else
			humanoidRootPart.CFrame = workspace.SpawnRed.CFrame * CFrame.new(0,1,0)
		end
	end)
end)
				
			

🚀 Quer aprender mais sobre programação e criar seus próprios jogos?

Se você curtiu aprender como criar um Capture The Flag no Roblox Studio, então você vai adorar os cursos da Programação for Kids! 🎮💻

Aqui, você vai aprender a programar de forma divertida e prática, criando jogos incríveis e explorando o universo da tecnologia. Do básico ao avançado, nossos cursos são perfeitos para crianças e adolescentes que querem se aprofundar no mundo da programação!

🌟 Confira nossos cursos e comece a programar hoje mesmo

Vem com a gente e transforme suas ideias em realidade! 🚀

Cursos de Programação no Roblox e no Code.Org

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *