Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Подключение библиотеки.
- local widget = require "widget";
- -- Подключение физики.
- local physics = require "physics";
- physics.start ();
- -- Очки в начале игры.
- local score = 0;
- -- Загрузка фона.
- local background = display.newRect (display.contentCenterX, display.contentCenterY, 400, 600);
- background:setFillColor (0.50, 0.55, 0.80);
- -- Текст очков.
- local score_text = display.newText (score, display.contentCenterX, 70, "12084.ttf", 60);
- score_text:setFillColor (0.35, 0.45, 0.70);
- -- Загрузка круга.
- local circle = display.newCircle (display.contentCenterX , 400, 25);
- circle:setFillColor (0.35, 0.45, 0.70);
- circle.myName = "Circle";
- -- Загрузка стен.
- -- 1-й ряд.
- local wall_1 = display.newRect (30, 270, 300, 18);
- wall_1:setFillColor (0.35, 0.45, 0.70);
- wall_1.myName = "Wall";
- local wall_2 = display.newRect (420, 270, 300, 18);
- wall_2:setFillColor (0.35, 0.45, 0.70);
- wall_2.myName = "Wall";
- -- 2-й ряд.
- local wall_3 = display.newRect (290, 170, 300, 18);
- wall_3:setFillColor (0.35, 0.45, 0.70);
- wall_3.myName = "Wall";
- local wall_4 = display.newRect (-100, 170, 300, 18);
- wall_4:setFillColor (0.35, 0.45, 0.70);
- wall_4.myName = "Wall";
- -- 3-й ряд.
- local wall_5 = display.newRect (50, 70, 300, 18);
- wall_5:setFillColor (0.35, 0.45, 0.70);
- wall_5.myName = "Wall";
- local wall_6 = display.newRect (440, 70, 300, 18);
- wall_6:setFillColor (0.35, 0.45, 0.70);
- wall_6.myName = "Wall";
- -- 4-й ряд.
- local wall_7 = display.newRect (350, -30, 300, 18);
- wall_7:setFillColor (0.35, 0.45, 0.70);
- wall_7.myName = "Wall";
- local wall_8 = display.newRect (-40, -30, 300, 18);
- wall_8:setFillColor (0.35, 0.45, 0.70);
- wall_8.myName = "Wall";
- -- Подключение физики к кругу.
- physics.addBody (circle, "dynamic", {radius = 24});
- circle.gravityScale = 0;
- circle.isSensor = true;
- circle.isSleepingAllowed = false;
- -- Подключение физики к стенам.
- physics.addBody (wall_1, "static");
- physics.addBody (wall_2, "static");
- physics.addBody (wall_3, "static");
- physics.addBody (wall_4, "static");
- physics.addBody (wall_5, "static");
- physics.addBody (wall_6, "static");
- physics.addBody (wall_7, "static");
- physics.addBody (wall_8, "static");
- -- Добавление ID к кругу.
- circle.ID = "Circle";
- -- Добавление ID к стенам.
- wall_1.ID = "Wall";
- wall_2.ID = "Wall";
- wall_3.ID = "Wall";
- wall_4.ID = "Wall";
- wall_5.ID = "Wall";
- wall_6.ID = "Wall";
- wall_7.ID = "Wall";
- wall_8.ID = "Wall";
- -- Функция "Движение и генерирование стен".
- local function Movement_and_generation_of_walls (event)
- local speed = 1.2;
- -- Движение стен.
- wall_1.y = wall_1.y + speed;
- wall_2.y = wall_1.y + speed;
- wall_3.y = wall_3.y + speed;
- wall_4.y = wall_3.y + speed;
- wall_5.y = wall_5.y + speed;
- wall_6.y = wall_5.y + speed;
- wall_7.y = wall_7.y + speed;
- wall_8.y = wall_7.y + speed;
- -- Генерирование стен.
- if (wall_1.y > 520) then
- wall_1.y = 120;
- elseif (wall_2.y > 520) then
- wall_2.y = 120;
- elseif (wall_3.y > 520) then
- wall_3.y = 120;
- elseif (wall_4.y > 520) then
- wall_4.y = 120;
- elseif (wall_5.y > 520) then
- wall_5.y = 120;
- elseif (wall_6.y > 520) then
- wall_6.y = 120;
- elseif (wall_7.y > 520) then
- wall_7.y = 120;
- elseif (wall_8.y > 520) then
- wall_8.y = 120;
- end
- end
- Runtime:addEventListener ("enterFrame", Movement_and_generation_of_walls);
- -- Функция "Управление кругом".
- local function Circle_control (event)
- local circle = event.target;
- local phase = event.phase;
- if ("began" == phase) then
- display.currentStage:setFocus (circle);
- circle.touchOffsetX = event.x - circle.x;
- elseif ("moved" == phase) then
- circle.x = event.x - circle.touchOffsetX;
- elseif ("ended" == phase or "cancelled" == phase) then
- display.currentStage:setFocus (nil);
- end
- return true;
- end
- circle:addEventListener ("touch", Circle_control);
- -- Функция "Столкновение между кругом и стеной".
- local function The_collision_between_the_circle_and_the_wall (self, event)
- if (event.phase == "began") then
- if (self.ID == "Circle" and event.other.ID == "Wall") then
- End_of_the_game ();
- end
- end
- end
- circle.collision = The_collision_between_the_circle_and_the_wall;
- circle:addEventListener ("collision", circle);
- -- Функция "Добавление очков".
- local function Addition_of_score ()
- if (wall_1.y > 400) then
- score = score + 1;
- score_text.text = score;
- if (wall_3.y > 400) then
- score = score + 1;
- score_text.text = score;
- if (wall_5.y > 400) then
- score = score + 1;
- score_text.text = score;
- if (wall_7.y > 400) then
- score = score + 1;
- score_text.text = score;
- end
- end
- end
- end
- end
- Runtime:addEventListener ("enterFrame", Addition_of_score);
- -- Функция "Конец игры".
- function End_of_the_game ()
- Runtime:removeEventListener ("enterFrame", Movement_and_generation_of_walls);
- Runtime:removeEventListener ("enterFrame", Addition_of_score);
- circle:removeEventListener ("touch", Circle_control);
- circle:removeEventListener ("collision", circle);
- -- Меню после пороигрыша.
- local menu_after_defeat = display.newRect (display.contentCenterX, 150, 300, 180);
- menu_after_defeat:setFillColor (0.35, 0.45, 0.70);
- menu_after_defeat.alpha = 0.85;
- -- Текст "Вы проиграли!"
- local text_end_of_the_game = display.newText ("Game over!", display.contentCenterX, 140, "12084.ttf", 30);
- text_end_of_the_game:setFillColor (0.50, 0.55, 0.80);
- -- Текст очков.
- local score_text = display.newText (score, display.contentCenterX, 100, "12084.ttf", 50);
- score_text:setFillColor (0.50, 0.55, 0.80);
- -- Кнопка рестарта.
- local restart_button = widget.newButton (
- {
- label = "RESTART",
- labelColor = {default = {0.35, 0.45, 0.70}, over = {0.50, 0.55, 0.80, 1}},
- font = "12084.ttf",
- onEvent = Beginning_of_the_game,
- shape = "roundedRect",
- width = 200,
- height = 40,
- cornerRadius = 15,
- fillColor = {default = {0.50, 0.55, 0.80, 1}, over = {0.35, 0.45, 0.70, 2}},
- strokeColor = {default = {0.35, 0.45, 0.70, 2},
- over = {0.50, 0.55, 0.80, 3}},
- strokeWidth = 5
- }
- )
- restart_button.x = display.contentCenterX;
- restart_button.y = 190;
- end
- -- Функция "Начало игры".
- function Beginning_of_the_game ()
- Runtime:addEventListener ("enterFrame", Movement_and_generation_of_walls);
- Runtime:addEventListener ("enterFrame", Addition_of_score);
- circle:addEventListener ("touch", Circle_control);
- circle:addEventListener ("collision", circle);
- -- Удаление меню после рестарта игры.
- display.remove (menu_after_defeat);
- display.remove (text_end_of_the_game);
- display.remove (score_text);
- -- Очки.
- score = 0;
- -- Скорость.
- speed = 1.2;
- -- Круг.
- circle.x = display.contentCenterX;
- circle.y = 400;
- -- Стены.
- wall_1.x = 30;
- wall_1.y = 270;
- wall_2.x = 420;
- wall_2.y = 270;
- wall_3.x = 290;
- wall_3.y = 170;
- wall_4.x = -100;
- wall_4.y = 170;
- wall_5.x = 50;
- wall_5.y = 70;
- wall_6.x = 440;
- wall_6.y = 70;
- wall_7.x = 350;
- wall_7.y = -30;
- wall_8.x = -40;
- wall_8.y = -30;
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement