Advertisement
Guest User

Untitled

a guest
Aug 18th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.56 KB | None | 0 0
  1. -- Подключение библиотеки.
  2. local widget = require "widget";
  3.  
  4. -- Подключение физики.
  5. local physics = require "physics";
  6. physics.start ();
  7.  
  8. -- Очки в начале игры.
  9. local score = 0;
  10.  
  11. -- Загрузка фона.
  12. local background = display.newRect (display.contentCenterX, display.contentCenterY, 400, 600);
  13. background:setFillColor (0.50, 0.55, 0.80);
  14.  
  15. -- Текст очков.
  16. local score_text = display.newText (score, display.contentCenterX, 70, "12084.ttf", 60);
  17. score_text:setFillColor (0.35, 0.45, 0.70);
  18.  
  19. -- Загрузка круга.
  20. local circle = display.newCircle (display.contentCenterX , 400, 25);
  21. circle:setFillColor (0.35, 0.45, 0.70);
  22. circle.myName = "Circle";
  23.  
  24. -- Загрузка стен.
  25. -- 1-й ряд.
  26. local wall_1 = display.newRect (30, 270, 300, 18);
  27. wall_1:setFillColor (0.35, 0.45, 0.70);
  28. wall_1.myName = "Wall";
  29.  
  30. local wall_2 = display.newRect (420, 270, 300, 18);
  31. wall_2:setFillColor (0.35, 0.45, 0.70);
  32. wall_2.myName = "Wall";
  33.  
  34. -- 2-й ряд.
  35. local wall_3 = display.newRect (290, 170, 300, 18);
  36. wall_3:setFillColor (0.35, 0.45, 0.70);
  37. wall_3.myName = "Wall";
  38.  
  39. local wall_4 = display.newRect (-100, 170, 300, 18);
  40. wall_4:setFillColor (0.35, 0.45, 0.70);
  41. wall_4.myName = "Wall";
  42.  
  43. -- 3-й ряд.
  44. local wall_5 = display.newRect (50, 70, 300, 18);
  45. wall_5:setFillColor (0.35, 0.45, 0.70);
  46. wall_5.myName = "Wall";
  47.  
  48. local wall_6 = display.newRect (440, 70, 300, 18);
  49. wall_6:setFillColor (0.35, 0.45, 0.70);
  50. wall_6.myName = "Wall";
  51.  
  52. -- 4-й ряд.
  53. local wall_7 = display.newRect (350, -30, 300, 18);
  54. wall_7:setFillColor (0.35, 0.45, 0.70);
  55. wall_7.myName = "Wall";
  56.  
  57. local wall_8 = display.newRect (-40, -30, 300, 18);
  58. wall_8:setFillColor (0.35, 0.45, 0.70);
  59. wall_8.myName = "Wall";
  60.  
  61. -- Подключение физики к кругу.
  62. physics.addBody (circle, "dynamic", {radius = 24});
  63. circle.gravityScale = 0;
  64. circle.isSensor = true;
  65. circle.isSleepingAllowed = false;
  66.  
  67. -- Подключение физики к стенам.
  68. physics.addBody (wall_1, "static");
  69.  
  70. physics.addBody (wall_2, "static");
  71.  
  72. physics.addBody (wall_3, "static");
  73.  
  74. physics.addBody (wall_4, "static");
  75.  
  76. physics.addBody (wall_5, "static");
  77.  
  78. physics.addBody (wall_6, "static");
  79.  
  80. physics.addBody (wall_7, "static");
  81.  
  82. physics.addBody (wall_8, "static");
  83.  
  84. -- Добавление ID к кругу.
  85. circle.ID = "Circle";
  86.  
  87. -- Добавление ID к стенам.
  88. wall_1.ID = "Wall";
  89.  
  90. wall_2.ID = "Wall";
  91.  
  92. wall_3.ID = "Wall";
  93.  
  94. wall_4.ID = "Wall";
  95.  
  96. wall_5.ID = "Wall";
  97.  
  98. wall_6.ID = "Wall";
  99.  
  100. wall_7.ID = "Wall";
  101.  
  102. wall_8.ID = "Wall";
  103.  
  104. -- Функция "Движение и генерирование стен".
  105. local function Movement_and_generation_of_walls (event)
  106. local speed = 1.2;
  107.  
  108. -- Движение стен.
  109.   wall_1.y = wall_1.y + speed;
  110.  
  111.   wall_2.y = wall_1.y + speed;
  112.  
  113.   wall_3.y = wall_3.y + speed;
  114.  
  115.   wall_4.y = wall_3.y + speed;
  116.  
  117.   wall_5.y = wall_5.y + speed;
  118.  
  119.   wall_6.y = wall_5.y + speed;
  120.  
  121.   wall_7.y = wall_7.y + speed;
  122.  
  123.   wall_8.y = wall_7.y + speed;
  124.  
  125. -- Генерирование стен.
  126.   if (wall_1.y > 520) then
  127.     wall_1.y = 120;
  128.   elseif (wall_2.y > 520) then
  129.     wall_2.y = 120;
  130.   elseif (wall_3.y > 520) then
  131.     wall_3.y = 120;
  132.   elseif (wall_4.y > 520) then
  133.     wall_4.y = 120;
  134.   elseif (wall_5.y > 520) then
  135.     wall_5.y = 120;
  136.   elseif (wall_6.y > 520) then
  137.     wall_6.y = 120;
  138.   elseif (wall_7.y > 520) then
  139.     wall_7.y = 120;
  140.   elseif (wall_8.y > 520) then
  141.     wall_8.y = 120;
  142.   end
  143. end
  144.  
  145. Runtime:addEventListener ("enterFrame", Movement_and_generation_of_walls);
  146.  
  147. -- Функция "Управление кругом".
  148. local function Circle_control (event)
  149.  
  150.   local circle = event.target;
  151.   local phase = event.phase;
  152.  
  153.   if ("began" == phase) then
  154. display.currentStage:setFocus (circle);
  155. circle.touchOffsetX = event.x - circle.x;
  156.  
  157.   elseif ("moved" == phase) then
  158. circle.x = event.x - circle.touchOffsetX;
  159.  
  160.   elseif ("ended" == phase or "cancelled" == phase) then
  161. display.currentStage:setFocus (nil);
  162. end
  163.  
  164.   return true;
  165.  
  166. end
  167.  
  168. circle:addEventListener ("touch", Circle_control);
  169.  
  170. -- Функция "Столкновение между кругом и стеной".
  171. local function The_collision_between_the_circle_and_the_wall (self, event)
  172.  
  173.   if (event.phase == "began") then
  174.     if (self.ID == "Circle" and event.other.ID == "Wall") then
  175.       End_of_the_game ();
  176.     end
  177.   end
  178. end
  179.  
  180. circle.collision = The_collision_between_the_circle_and_the_wall;
  181. circle:addEventListener ("collision", circle);
  182.  
  183. -- Функция "Добавление очков".
  184. local function Addition_of_score ()
  185.  
  186.   if (wall_1.y > 400) then
  187.     score = score + 1;
  188.     score_text.text = score;
  189.  
  190.   if (wall_3.y > 400) then
  191.     score = score + 1;
  192.     score_text.text = score;
  193.  
  194.   if (wall_5.y > 400) then
  195.     score = score + 1;
  196.     score_text.text = score;
  197.  
  198.   if (wall_7.y > 400) then
  199.     score = score + 1;
  200.     score_text.text = score;
  201.         end
  202.       end
  203.     end
  204.   end
  205. end
  206.  
  207. Runtime:addEventListener ("enterFrame", Addition_of_score);
  208.  
  209. -- Функция "Конец игры".
  210. function End_of_the_game ()
  211.  
  212.   Runtime:removeEventListener ("enterFrame", Movement_and_generation_of_walls);
  213.   Runtime:removeEventListener ("enterFrame", Addition_of_score);
  214.   circle:removeEventListener ("touch", Circle_control);
  215.   circle:removeEventListener ("collision", circle);
  216.  
  217.   -- Меню после пороигрыша.
  218.   local menu_after_defeat = display.newRect (display.contentCenterX, 150, 300, 180);
  219.   menu_after_defeat:setFillColor (0.35, 0.45, 0.70);
  220.   menu_after_defeat.alpha = 0.85;
  221.  
  222.   -- Текст "Вы проиграли!"
  223.   local text_end_of_the_game = display.newText ("Game over!", display.contentCenterX, 140, "12084.ttf", 30);
  224.   text_end_of_the_game:setFillColor (0.50, 0.55, 0.80);
  225.  
  226.   -- Текст очков.
  227.   local score_text = display.newText (score, display.contentCenterX, 100, "12084.ttf", 50);
  228.   score_text:setFillColor (0.50, 0.55, 0.80);
  229.  
  230.   -- Кнопка рестарта.
  231.   local restart_button = widget.newButton (
  232.   {
  233.   label = "RESTART",
  234.   labelColor = {default = {0.35, 0.45, 0.70}, over = {0.50, 0.55, 0.80, 1}},
  235.   font = "12084.ttf",
  236.   onEvent = Beginning_of_the_game,
  237.   shape = "roundedRect",
  238.   width = 200,
  239.   height = 40,
  240.   cornerRadius = 15,
  241.   fillColor = {default = {0.50, 0.55, 0.80, 1}, over = {0.35, 0.45, 0.70, 2}},
  242.   strokeColor = {default = {0.35, 0.45, 0.70, 2},
  243.   over = {0.50, 0.55, 0.80, 3}},
  244.   strokeWidth = 5
  245.   }
  246.   )
  247.   restart_button.x = display.contentCenterX;
  248.   restart_button.y = 190;
  249. end
  250.  
  251. -- Функция "Начало игры".
  252. function Beginning_of_the_game ()
  253.  
  254.   Runtime:addEventListener ("enterFrame", Movement_and_generation_of_walls);
  255.   Runtime:addEventListener ("enterFrame", Addition_of_score);
  256.   circle:addEventListener ("touch", Circle_control);
  257.   circle:addEventListener ("collision", circle);
  258.  
  259.   -- Удаление меню после рестарта игры.
  260.   display.remove (menu_after_defeat);
  261.  
  262.   display.remove (text_end_of_the_game);
  263.  
  264.   display.remove (score_text);
  265.  
  266.   -- Очки.
  267.   score = 0;
  268.  
  269.   -- Скорость.
  270.   speed = 1.2;
  271.  
  272.   -- Круг.
  273.   circle.x = display.contentCenterX;
  274.   circle.y = 400;
  275.  
  276.   -- Стены.
  277.   wall_1.x = 30;
  278.   wall_1.y = 270;
  279.  
  280.   wall_2.x = 420;
  281.   wall_2.y = 270;
  282.  
  283.   wall_3.x = 290;
  284.   wall_3.y = 170;
  285.  
  286.   wall_4.x = -100;
  287.   wall_4.y = 170;
  288.  
  289.   wall_5.x = 50;
  290.   wall_5.y = 70;
  291.  
  292.   wall_6.x = 440;
  293.   wall_6.y = 70;
  294.  
  295.   wall_7.x = 350;
  296.   wall_7.y = -30;
  297.  
  298.   wall_8.x = -40;
  299.   wall_8.y = -30;
  300. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement