SHOW:
|
|
- or go back to the newest paste.
1 | local c = require("component") | |
2 | local computer = require("computer") | |
3 | local gpu = c.gpu | |
4 | - | --local os = require("os") |
4 | + | |
5 | local math = require("math") | |
6 | - | os.execute("resolution 124 48") |
6 | + | |
7 | local w, h = gpu.getResolution() | |
8 | x = w - 4 | |
9 | - | x = w / 2 -- шарик |
9 | + | y = h - 4 |
10 | - | y = h / 2 -- |
10 | + | l = 16 |
11 | - | dy = 1 |
11 | + | t = 0 |
12 | - | dx = 0 |
12 | + | platformaS = w / 2 - l / 2 - 1 -- стартовая позиция платформ |
13 | - | l = 32 --длина платформы в пикселях |
13 | + | platformaS2 = platformaS -- платформа2 позиция старта |
14 | - | platformaS = w / 2 - l / 2 |
14 | + | platformaS1 = platformaS -- 1 |
15 | - | kirpichNX = 6 --кол-во кирпичей |
15 | + | dy = -1 -- изменение положения шарика по у |
16 | - | kirpichNY = 4 |
16 | + | dx = 0 -- по х (вектор = 1) |
17 | - | PBTkir = 0 --расстояние между кирпичами |
17 | + | ez = 16 -- не знаю работает ли... в теории дает возможность двигаться платформе в 16 быстрее шара. |
18 | - | heightKirpich = 2 |
18 | + | |
19 | - | widthKirpich = 10 --размер кирпича |
19 | + | colorPlatforma = 321321 -- цвет платформы |
20 | - | strengthKirpich = 321321 --не рабочий стафф |
20 | + | colorShar = 123123 -- цвет шара |
21 | - | colorPlatforma = 321321 --цвет платформы |
21 | + | |
22 | - | colorShar = 123123 --цвет шарика |
22 | + | |
23 | function GameOver(player) -- конец игры(player = loser) | |
24 | - | function PutPixel(x, y, color, text) --просто удобная штука. мне так проще |
24 | + | |
25 | return 0 | |
26 | end | |
27 | ||
28 | function PutPixel(x, y, color, text) -- люблю эту функцию, получает пиксель там где надо | |
29 | gpu.setBackground(color) | |
30 | - | function getKirpich(xk, yk, colorK) --рисуем кирпич |
30 | + | |
31 | - | gpu.setBackground(colorK) |
31 | + | |
32 | - | gpu.fill(xk, yk, widthKirpich, heightKirpich, " ") |
32 | + | |
33 | ||
34 | ||
35 | - | function printKirpich() --рисуем кирпичи |
35 | + | |
36 | - | for i1 = 0, kirpichNX - 1 do |
36 | + | |
37 | - | for i2 = 0, kirpichNY - 1 do |
37 | + | function getPlatform() -- подготовка, рисует платформу |
38 | - | getKirpich(PBTkir + (widthKirpich + PBTkir) * i1 + 2, PBTkir + (heightKirpich + PBTkir) * i2 + 2, math.random() * 1000000) |
38 | + | for i = 0, l - 1 do |
39 | PutPixel(platformaS + i , h, colorPlatforma, " ") | |
40 | PutPixel(platformaS + i , 1, colorPlatforma, " ") | |
41 | end | |
42 | end | |
43 | - | function getPlatform() --рисуем платформу |
43 | + | |
44 | - | for i = 1, l do |
44 | + | function start() -- начало игры |
45 | gpu.setBackground(0) | |
46 | gpu.fill(1, 1, w, h, " ") | |
47 | PutPixel(w / 2 - 6, h / 2 - 6, 777777, "Hello World") | |
48 | os.sleep(1) | |
49 | - | function GameOver(reason) --ну тут понятно гейм овер |
49 | + | |
50 | getPlatform() | |
51 | - | dy = 0 - dy |
51 | + | |
52 | ||
53 | - | computer.shutdown() |
53 | + | |
54 | function platforma() -- движение платформы - 205 = --> 203 = <-- 208 = <-- 200 = --> | |
55 | for i = 1, ez do | |
56 | - | function start() --стартует игра и вызывает всякие функции для отрисовки всего |
56 | + | event.listen("key_down", function(k1, k2, k3, k4) key = k4 end) -- подходит с трудом ибо если оба нажали работает у последнего |
57 | if key == 203 and platformaS1 - 1 > 0 then --1 игрок | |
58 | PutPixel(platformaS1 + l - 1, h, 0, " ") | |
59 | PutPixel(platformaS1 - 1, h, colorPlatforma, " ") | |
60 | platformaS1 = platformaS1 - 1 | |
61 | key = 0 | |
62 | end | |
63 | - | printKirpich() |
63 | + | if key == 205 and platformaS1 + l < w + 1 then |
64 | PutPixel(platformaS1, h, 0, " ") | |
65 | PutPixel(platformaS1 + l, h, colorPlatforma, " ") | |
66 | - | function platforma() --платформа едет |
66 | + | platformaS1 = platformaS1 + 1 |
67 | - | event.listen("key_down", function(k1, k2, k3, k4) key = k4 end) |
67 | + | key = 0 |
68 | - | if key == 203 and platformaS > 1 then |
68 | + | |
69 | - | PutPixel(platformaS + l, h, 0, " ") |
69 | + | if key == 208 and platformaS2 + 1 > 0 then --2 игрок |
70 | - | PutPixel(platformaS, h, colorPlatforma, " ") |
70 | + | PutPixel(platformaS2 + l - 1, 1, 0, " ") |
71 | - | platformaS = platformaS - 1 |
71 | + | PutPixel(platformaS2 - 1, 1, colorPlatforma, " ") |
72 | - | key = 0 |
72 | + | platformaS2 = platformaS2 - 1 |
73 | key = 0 | |
74 | - | if key == 205 and platformaS + l < w - 2 then |
74 | + | |
75 | - | PutPixel(platformaS, h, 0, " ") |
75 | + | if key == 200 and platformaS2 + l < w + 1 then |
76 | - | PutPixel(platformaS + l, h, colorPlatforma, " ") |
76 | + | PutPixel(platformaS2, 1, 0, " ") |
77 | - | platformaS = platformaS + 1 |
77 | + | PutPixel(platformaS2 + l, 1, colorPlatforma, " ") |
78 | - | key = 0 |
78 | + | platformaS2 = platformaS2 + 1 |
79 | key = 0 | |
80 | - | event.ignore("key_down", function(k1, k2, k3, k4) end) |
80 | + | |
81 | - | os.sleep(1 / 20) |
81 | + | os.sleep(0,05) |
82 | end | |
83 | end | |
84 | - | function test() --проверка всего |
84 | + | |
85 | - | if x < 3 or x > w - 2 then --отражение от границ экрана |
85 | + | |
86 | function test() -- физика(нет) не работает. Если у шарика у < 1 то меняет направление несколько раз = не работает | |
87 | if 3 > x or x > w - 3 then | |
88 | - | if y < 3 then --см верх |
88 | + | |
89 | end | |
90 | if 3 > y or y > h - 2 then | |
91 | - | if y < h - 5 then --определение отражение от кирпичей |
91 | + | |
92 | - | local char, foreColor, backColor = gpu.get(x + dx, y + dy) |
92 | + | |
93 | - | kx = x + dx |
93 | + | if t < 1 then |
94 | - | ky = y + dy |
94 | + | if y == 2 then |
95 | - | if backColor ~= 0 then |
95 | + | if x < platformaS2 or x > platformaS2 + l then |
96 | - | char, foreColor, backColor1 = gpu.get(x + 1, y) |
96 | + | GameOver(0) |
97 | - | char, foreColor, backColor2 = gpu.get(x - 1, y) |
97 | + | |
98 | - | char, foreColor, backColor3 = gpu.get(x, y + 1) |
98 | + | dx = ((x % platformaS2) - l / 2) / l * 2 -- зависимость dx от места попадание на платформу игрок |
99 | - | char, foreColor, backColor4 = gpu.get(x, y - 1) |
99 | + | |
100 | - | if backColor1 ~= backColor and backColor2 ~= backColor then |
100 | + | |
101 | - | dy = 0 - dy |
101 | + | |
102 | - | end |
102 | + | if y == h - 1 then |
103 | - | if backColor3 ~= backColor and backColor4 ~= backColor then |
103 | + | if x < platformaS1 or x > platformaS1 + l then |
104 | - | dx = 0 - dx |
104 | + | |
105 | - | end |
105 | + | |
106 | - | char, foreColor, backColor5 = gpu.get(kx - 1, ky) |
106 | + | dx = ((x % platformaS2) - l / 2) / l * 2 -- зависимость dx от места попадание на платформу игрок |
107 | - | while backColor5 == backColor and kx - 2 > 0 do |
107 | + | |
108 | - | char, foreColor, backColor5 = gpu.get(kx - 2, ky) |
108 | + | t = 8 |
109 | - | kx = kx - 1 |
109 | + | |
110 | - | end |
110 | + | |
111 | - | char, foreColor, backColor5 = gpu.get(kx, ky - 1) |
111 | + | |
112 | - | while backColor5 == backColor and ky - 2 > 0 do |
112 | + | |
113 | - | char, foreColor, backColor5 = gpu.get(kx, ky - 2) |
113 | + | |
114 | - | ky = ky - 1 |
114 | + | function shar() --движение шара, надо переделать последовательность. |
115 | - | end |
115 | + | |
116 | - | getKirpich(kx, ky, 0) --удаляет киприч |
116 | + | |
117 | y = y + dy | |
118 | test() | |
119 | - | if y + dy > h or y + dy == h then --отражение шарика от платформы |
119 | + | |
120 | - | if x < platformaS + 1 or x > platformaS + l + 1 then |
120 | + | |
121 | ||
122 | ||
123 | - | dy = 0 - dy |
123 | + | start() |
124 | - | dx = ((x % (platformaS + 1)) - l / 2) / l * 2 --зависимость dx от места попадание на платформу игрок, надо доработать |
124 | + | while key ~= 28 do -- конец игры если нажали enter |
125 | shar() | |
126 | platforma() | |
127 | platforma() -- ez не работало сделал костыль безногому | |
128 | end | |
129 | gpu.setBackground(0) |