KrYn0MoRe

2048 game v0.5 (local)

Oct 14th, 2020 (edited)
1,046
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. warn([[
  2. = Made by KrYn0MoRe (AlmightyToast) =
  3. - WIP NOT DONE YET
  4. ]])
  5.  
  6. local plr = game:GetService("Players").LocalPlayer
  7.  
  8. --
  9.  
  10. ScreenGui0 = Instance.new("ScreenGui")
  11. Frame1 = Instance.new("Frame")
  12. Frame2 = Instance.new("Frame")
  13. TextBox3 = Instance.new("TextBox")
  14. TextButton4 = Instance.new("TextButton")
  15. TextButton5 = Instance.new("TextButton")
  16. ScreenGui0.Parent = nil
  17. ScreenGui0.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
  18. Frame1.Name = "Main"
  19. Frame1.Parent = ScreenGui0
  20. Frame1.Position = UDim2.new(0.5, -250, 0.5, -250)
  21. Frame1.Size = UDim2.new(0, 500, 0, 500)
  22. Frame1.BackgroundColor = BrickColor.new("Institutional white")
  23. Frame1.BackgroundColor3 = Color3.new(1, 1, 1)
  24. Frame1.BackgroundTransparency = 1
  25. Frame2.Name = "Map"
  26. Frame2.Parent = Frame1
  27. Frame2.Size = UDim2.new(1, 0, 1, 0)
  28. Frame2.BackgroundColor = BrickColor.new("Institutional white")
  29. Frame2.BackgroundColor3 = Color3.new(1, 1, 1)
  30. TextBox3.Name = "Title"
  31. TextBox3.Parent = Frame1
  32. TextBox3.Position = UDim2.new(0, 0, -0.200000003, 50)
  33. TextBox3.Size = UDim2.new(1, 0, 0, 50)
  34. TextBox3.BackgroundColor = BrickColor.new("Institutional white")
  35. TextBox3.BackgroundColor3 = Color3.new(1, 1, 1)
  36. TextBox3.BackgroundTransparency = 1
  37. TextBox3.Font = Enum.Font.SourceSans
  38. TextBox3.FontSize = Enum.FontSize.Size14
  39. TextBox3.Text = "Score: 0"
  40. TextBox3.TextColor = BrickColor.new("Institutional white")
  41. TextBox3.TextColor3 = Color3.new(1, 1, 1)
  42. TextBox3.TextScaled = true
  43. TextBox3.TextSize = 14
  44. TextBox3.TextStrokeTransparency = 0
  45. TextBox3.TextWrap = true
  46. TextBox3.TextWrapped = true
  47. TextButton4.Name = "close"
  48. TextButton4.Parent = Frame1
  49. TextButton4.Position = UDim2.new(0.931999981, 0, -0.0839999989, 0)
  50. TextButton4.Size = UDim2.new(0, 34, 0, 34)
  51. TextButton4.BackgroundColor = BrickColor.new("Really red")
  52. TextButton4.BackgroundColor3 = Color3.new(1, 0, 0)
  53. TextButton4.Font = Enum.Font.SourceSans
  54. TextButton4.FontSize = Enum.FontSize.Size14
  55. TextButton4.Text = "X"
  56. TextButton4.TextColor = BrickColor.new("Institutional white")
  57. TextButton4.TextColor3 = Color3.new(1, 1, 1)
  58. TextButton4.TextScaled = true
  59. TextButton4.TextSize = 14
  60. TextButton4.TextStrokeTransparency = 0
  61. TextButton4.TextWrap = true
  62. TextButton4.TextWrapped = true
  63. TextButton5.Name = "start"
  64. TextButton5.Parent = Frame1
  65. TextButton5.Position = UDim2.new(1.02199996, 0, -2.98023224e-08, 0)
  66. TextButton5.Size = UDim2.new(0, 100, 0, 100)
  67. TextButton5.BackgroundColor = BrickColor.new("Institutional white")
  68. TextButton5.BackgroundColor3 = Color3.new(1, 1, 1)
  69. TextButton5.BackgroundTransparency = 0.5
  70. TextButton5.Font = Enum.Font.SourceSans
  71. TextButton5.FontSize = Enum.FontSize.Size14
  72. TextButton5.Text = "Start"
  73. TextButton5.TextColor = BrickColor.new("Institutional white")
  74. TextButton5.TextColor3 = Color3.new(1, 1, 1)
  75. TextButton5.TextScaled = true
  76. TextButton5.TextSize = 14
  77. TextButton5.TextStrokeTransparency = 0
  78. TextButton5.TextWrap = true
  79. TextButton5.TextWrapped = true
  80.  
  81. --
  82.  
  83. ScreenGui0.Parent = plr:FindFirstChildOfClass('PlayerGui')
  84. script.Parent = ScreenGui0
  85.  
  86. local cube_ui = Instance.new("TextLabel")
  87. cube_ui.Name = "cube"
  88. cube_ui.Text = ''
  89. cube_ui.Parent = script
  90. cube_ui.Size = UDim2.new(0, 30, 0, 30)
  91. cube_ui.BackgroundColor = BrickColor.new("Institutional white")
  92. cube_ui.BackgroundColor3 = Color3.new(1, 1, 1)
  93.  
  94. local gui = script.Parent
  95. local main = gui.Main
  96. local title = main.Title
  97. local start_button = main.start
  98. local close_button = main.close
  99. local map = main.Map
  100.  
  101. local direction = ''
  102. local nums = {}
  103. local cubes = {}
  104. local m = 4
  105. local map_size = 500
  106. local cube_size = map_size/m
  107. local score = 0
  108.  
  109. local playing = false
  110. local paused = false
  111. local can_pause = false
  112. local can_press = false
  113.  
  114. local colors = {
  115.     [2] = Color3.fromRGB(85, 255, 255),
  116.     [4] = Color3.fromRGB(85, 170, 255),
  117.     [8] = Color3.fromRGB(0, 0, 255),
  118.     [16] = Color3.fromRGB(255, 170, 0),
  119.     [32] = Color3.fromRGB(170, 0, 0),
  120.     [64] = Color3.fromRGB(255, 0, 0),
  121.     [128] = Color3.fromRGB(170, 170, 0),
  122.     [256] = Color3.fromRGB(0, 255, 0),
  123.     [512] = Color3.fromRGB(255, 255, 0),
  124.     [1024] = Color3.fromRGB(255, 255, 0),
  125. }
  126.  
  127. main.Position = UDim2.new(0.5,-map_size/2,0.5,-map_size/2)
  128. main.Size = UDim2.new(0,map_size,0,map_size)
  129.  
  130. local main_music = Instance.new("Sound",gui)
  131. main_music.SoundId = 'rbxassetid://704165118'
  132. main_music.Looped = true
  133. main_music.Volume = 0
  134. main_music:Play()
  135. game:GetService("TweenService"):Create(main_music,TweenInfo.new(1),{Volume = 1}):Play()
  136.  
  137. close_button.MouseButton1Click:Connect(function()
  138.     gui:Destroy()
  139. end)
  140.  
  141. start_button.MouseButton1Click:Connect(function()
  142.     local click_s = Instance.new("Sound",gui)
  143.     click_s.SoundId = 'rbxassetid://452267918'
  144.     click_s.Volume = 0.5
  145.     click_s:Play()
  146.     if playing and can_pause then
  147.         paused = not paused
  148.         if paused then
  149.             start_button.Text = 'Resume'
  150.         else
  151.             start_button.Text = 'Pause'
  152.         end
  153.     elseif not playing and not paused then
  154.         if main_music then
  155.             game:GetService("TweenService"):Create(main_music,TweenInfo.new(1),{Volume = 0}):Play()
  156.             game:GetService("Debris"):AddItem(main_music)
  157.         end
  158.         start()
  159.     end
  160. end)
  161.  
  162. game:GetService("UserInputService").InputBegan:Connect(function(input,gamepress)
  163.     if input.UserInputType == Enum.UserInputType.Keyboard and playing and can_press and not paused and not gamepress then
  164.         local key = input.KeyCode
  165.         if key == Enum.KeyCode.A then
  166.             local s = 'a'
  167.             direction = s
  168.             move()
  169.         elseif key == Enum.KeyCode.D then
  170.             local s = 'd'
  171.             direction = s
  172.             move()
  173.         elseif key == Enum.KeyCode.W then
  174.             local s = 'w'
  175.             direction = s
  176.             move()
  177.         elseif key == Enum.KeyCode.S then
  178.             local s = 's'
  179.             direction = s
  180.             move()
  181.         end
  182.     end
  183. end)
  184.  
  185. function add_num()
  186.     local rng = math.random(1,#cubes)
  187.     local cube = cubes[rng]
  188.     if not nums[rng] then
  189.         table.insert(nums,rng,cube)
  190.         if math.random(1,2) == 1 then
  191.             cube['point'].Value = 4
  192.         else
  193.             cube['point'].Value = 2
  194.         end
  195.         update_cube(cube,rng)
  196.     else
  197.         local total = 0
  198.         for i,v in pairs(nums) do
  199.             if v then
  200.                 total = total + 1
  201.             end
  202.         end
  203.         if total >= m^2 then
  204.             return lose()
  205.         else
  206.             add_num()
  207.         end
  208.     end
  209. end
  210.  
  211. function update_cube(v,i,c)
  212.     if (i and nums[i]) or c or table.find(nums,v) then
  213.         local c = Color3.fromRGB(25,25,25)
  214.         if colors[v['point'].Value] then
  215.             c = colors[v['point'].Value]
  216.         end
  217.         v.BackgroundColor3 = c
  218.         v['pui'].Text = tostring(v['point'].Value)
  219.         print(v['pui'].Text)
  220.     else
  221.         v.BackgroundColor3 = Color3.new(1,1,1)
  222.         v['pui'].Text = ' '
  223.         warn(v['pui'].Text)
  224.     end
  225. end
  226.  
  227. function move()
  228.     local x2,y2 = 0,0
  229.     if direction == 'a' then
  230.         x2 = -1
  231.         y2 = 1
  232.     elseif direction == 'd' then
  233.         x2 = 1
  234.         y2 = 1
  235.     elseif direction == 'w' then
  236.         x2 = 1
  237.         y2 = -1
  238.     elseif direction == 's' then
  239.         x2 = 1
  240.         y2 = 1
  241.     end
  242.     if direction == 's' then -- down
  243.         for Y = m,1,-y2 do
  244.             for X = 1,m,x2 do
  245.                 local n = (Y*m-m)+X
  246.                 if nums[n] then
  247.                     local cube = cubes[n]
  248.                     local next_cube = cube
  249.                     local hit_cube = nil
  250.                     local n2 = n
  251.                     local n4 = 0
  252.                     for i = Y,m,y2 do
  253.                         local n3 = (i*m-m)+X
  254.                         --print('i: ' .. i .. ' ' .. 'n:' .. n3)
  255.                         --print('x: ' .. X .. ' ' .. 'y: ' .. i)
  256.                         if cubes[n3] ~= cube then
  257.                             if not nums[n3] then
  258.                                 n2 = n3
  259.                                 next_cube = cubes[n3]
  260.                             else
  261.                                 n4 = n3
  262.                                 hit_cube = cubes[n3]
  263.                                 break
  264.                             end
  265.                         end
  266.                     end
  267.                     --print('n2: ' .. n2)
  268.                     if n2 > 0 and (n2 ~= n or hit_cube) then
  269.                         local c = false
  270.                         if hit_cube and cube['point'].Value == hit_cube['point'].Value then
  271.                             hit_cube['point'].Value = hit_cube['point'].Value*2
  272.                             score = score + hit_cube['point'].Value
  273.                             update_cube(hit_cube,n4,true)
  274.                             c = true
  275.                         elseif next_cube and not nums[n2] then
  276.                             table.insert(nums,n2,next_cube)
  277.                             next_cube['point'].Value = cube['point'].Value
  278.                             update_cube(next_cube,n2,true)
  279.                             c = true
  280.                         end
  281.                         if c then
  282.                             nums[n] = nil
  283.                             cube['point'].Value = 0
  284.                             update_cube(cube,n,false)
  285.                         end
  286.                     end
  287.                 end
  288.             end
  289.         end
  290.     elseif direction == 'w' then -- up
  291.         for Y = 1,m,-y2 do
  292.             for X = 1,m,x2 do
  293.                 local n = (Y*m-m)+X
  294.                 if nums[n] then
  295.                     local cube = cubes[n]
  296.                     local next_cube = cube
  297.                     local hit_cube = nil
  298.                     local n2 = n
  299.                     local n4 = 0
  300.                     for i = Y,1,y2 do
  301.                         local n3 = (i*m-m)+X
  302.                         --print('i: ' .. i .. ' ' .. 'n:' .. n3)
  303.                         --print('x: ' .. X .. ' ' .. 'y: ' .. i)
  304.                         if cubes[n3] ~= cube then
  305.                             if not nums[n3] then
  306.                                 n2 = n3
  307.                                 next_cube = cubes[n3]
  308.                             else
  309.                                 n4 = n3
  310.                                 hit_cube = cubes[n3]
  311.                                 break
  312.                             end
  313.                         end
  314.                     end
  315.                     --print('n2: ' .. n2)
  316.                     if n2 > 0 and (n2 ~= n or hit_cube) then
  317.                         local c = false
  318.                         if hit_cube and cube['point'].Value == hit_cube['point'].Value then
  319.                             hit_cube['point'].Value = hit_cube['point'].Value*2
  320.                             score = score + hit_cube['point'].Value
  321.                             update_cube(hit_cube,n4,true)
  322.                             c = true
  323.                         elseif next_cube and not nums[n2] then
  324.                             table.insert(nums,n2,next_cube)
  325.                             next_cube['point'].Value = cube['point'].Value
  326.                             update_cube(next_cube,n2,true)
  327.                             c = true
  328.                         end
  329.                         if c then
  330.                             nums[n] = nil
  331.                             cube['point'].Value = 0
  332.                             update_cube(cube,n,false)
  333.                         end
  334.                     end
  335.                 end
  336.             end
  337.         end
  338.     elseif direction == 'a' then -- left
  339.         for X = 1,m,-x2 do
  340.             for Y = 1,m,y2 do
  341.                 local n = (Y*m-m)+X
  342.                 if nums[n] then
  343.                     local cube = cubes[n]
  344.                     local next_cube = cube
  345.                     local hit_cube = nil
  346.                     local n2 = n
  347.                     local n4 = 0
  348.                     for i = X,1,x2 do
  349.                         local n3 = (Y*m-m)+i
  350.                         --print('i: ' .. i .. ' ' .. 'n:' .. n3)
  351.                         --print('x: ' .. i .. ' ' .. 'y: ' .. Y)
  352.                         if cubes[n3] ~= cube then
  353.                             if not nums[n3] then
  354.                                 n2 = n3
  355.                                 next_cube = cubes[n3]
  356.                             else
  357.                                 n4 = n3
  358.                                 hit_cube = cubes[n3]
  359.                                 break
  360.                             end
  361.                         end
  362.                     end
  363.                     --print('n2: ' .. n2)
  364.                     if n2 > 0 and (n2 ~= n or hit_cube) then
  365.                         local c = false
  366.                         if hit_cube and cube['point'].Value == hit_cube['point'].Value then
  367.                             hit_cube['point'].Value = hit_cube['point'].Value*2
  368.                             score = score + hit_cube['point'].Value
  369.                             update_cube(hit_cube,n4,true)
  370.                             c = true
  371.                         elseif next_cube and not nums[n2] then
  372.                             table.insert(nums,n2,next_cube)
  373.                             next_cube['point'].Value = cube['point'].Value
  374.                             update_cube(next_cube,n2,true)
  375.                             c = true
  376.                         end
  377.                         if c then
  378.                             nums[n] = nil
  379.                             cube['point'].Value = 0
  380.                             update_cube(cube,n,false)
  381.                         end
  382.                     end
  383.                 end
  384.             end
  385.         end
  386.     elseif direction == 'd' then -- right
  387.         for X = m,1,-x2 do
  388.             for Y = 1,m,y2 do
  389.                 local n = (Y*m-m)+X
  390.                 if nums[n] then
  391.                     local cube = cubes[n]
  392.                     local next_cube = cube
  393.                     local hit_cube = nil
  394.                     local n2 = n
  395.                     local n4 = 0
  396.                     for i = X,m,x2 do
  397.                         local n3 = (Y*m-m)+i
  398.                         --print('i: ' .. i .. ' ' .. 'n:' .. n3)
  399.                         --print('x: ' .. i .. ' ' .. 'y: ' .. Y)
  400.                         if cubes[n3] ~= cube then
  401.                             if not nums[n3] then
  402.                                 n2 = n3
  403.                                 next_cube = cubes[n3]
  404.                             else
  405.                                 n4 = n3
  406.                                 hit_cube = cubes[n3]
  407.                                 break
  408.                             end
  409.                         end
  410.                     end
  411.                     --print('n2: ' .. n2)
  412.                     if n2 > 0 and (n2 ~= n or hit_cube) then
  413.                         local c = false
  414.                         if hit_cube and cube['point'].Value == hit_cube['point'].Value then
  415.                             hit_cube['point'].Value = hit_cube['point'].Value*2
  416.                             score = score + hit_cube['point'].Value
  417.                             update_cube(hit_cube,n4,true)
  418.                             c = true
  419.                         elseif next_cube and not nums[n2] then
  420.                             table.insert(nums,n2,next_cube)
  421.                             next_cube['point'].Value = cube['point'].Value
  422.                             update_cube(next_cube,n2,true)
  423.                             c = true
  424.                         end
  425.                         if c then
  426.                             nums[n] = nil
  427.                             cube['point'].Value = 0
  428.                             update_cube(cube,n,false)
  429.                         end
  430.                     end
  431.                 end
  432.             end
  433.         end
  434.     end
  435.     update_score()
  436.     local total = 0
  437.     for i,v in pairs(nums) do
  438.         if v then
  439.             total = total + 1
  440.         end
  441.     end
  442.     if total >= m^2 then
  443.         return lose()
  444.     else
  445.         add_num()
  446.     end
  447. end
  448.  
  449. function set()
  450.     map:ClearAllChildren()
  451.     nums = {}
  452.     cubes = {}
  453.     --direction = 'a'
  454.     score = 0
  455.     --title.Text = 'Score: ' .. score
  456.     --playing = false
  457.     --paused = false
  458.     for Y = 1,m do
  459.         for X = 1,m do
  460.             local cu = cube_ui:Clone()
  461.             local cs = Instance.new("NumberValue")
  462.             cs.Name = 'point'
  463.             cs.Value = 0
  464.             cs.Parent = cu
  465.             local pui = Instance.new("TextLabel")
  466.             pui.Name = 'pui'
  467.             pui.Text = ''
  468.             pui.TextScaled = true
  469.             pui.BackgroundTransparency = 1
  470.             pui.BorderSizePixel = 0
  471.             pui.TextColor3 = Color3.new(1,1,1)
  472.             pui.TextStrokeTransparency = 0
  473.             pui.Size = UDim2.new(1,0,1,0)
  474.             pui.Parent = cu
  475.             local s = cube_size
  476.             cu.Position = UDim2.new(0,s*X-s,0,s*Y-s)
  477.             cu.Size = UDim2.new(0,s,0,s)
  478.             cu.Parent = map
  479.             table.insert(cubes,(Y*m-m)+X,cu)
  480.         end
  481.         wait(0)
  482.     end
  483.     add_num()
  484.     add_num()
  485. end
  486.  
  487. function lose()
  488.     can_press = false
  489.     playing = false
  490.     can_pause = false
  491.     title.Text = 'Ended with score of ' .. score
  492.     start_button.Text = '...'
  493.     local death_s = Instance.new("Sound",gui)
  494.     death_s.SoundId = 'rbxassetid://4649069508'
  495.     death_s.Volume = 1
  496.     death_s:Play()
  497.     wait(1)
  498.     start_button.Text = 'Start'
  499.     main_music = Instance.new("Sound",gui)
  500.     main_music.SoundId = 'rbxassetid://704165118'
  501.     main_music.Looped = true
  502.     main_music.Volume = 0
  503.     main_music:Play()
  504.     game:GetService("TweenService"):Create(main_music,TweenInfo.new(1),{Volume = 1}):Play()
  505.     can_press = true
  506. end
  507.  
  508. function update_score()
  509.     title.Text = 'Score: ' .. tostring(score)
  510. end
  511.  
  512. function start()
  513.     if not playing and not paused then else return end
  514.     can_press = false
  515.     playing = true
  516.     can_pause = false
  517.     start_button.Text = 'Starting..'
  518.     set()
  519.     local t = 5
  520.     for i = t,0,-1 do
  521.         title.Text = 'Starting.. (' .. i .. ')'
  522.         wait(1)
  523.     end
  524.     title.Text = 'Go!'
  525.     local start_s = Instance.new("Sound",gui)
  526.     start_s.SoundId = 'rbxassetid://3044638823'
  527.     start_s.Volume = 1
  528.     start_s:Play()
  529.     wait(1)
  530.     can_pause = true
  531.     can_press = true
  532.     start_button.Text = 'Pause'
  533.     update_score()
  534. end
RAW Paste Data