1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
| uses
GraphABC, Events, Timers;
type
TCircles = class //Круги которые появляются
x, y, radiusDefault: integer;
constructor create(New_X, new_Y, New_Radius: integer);
procedure FailCircle;
procedure WriteCircle;
end;
procedure CreateCircles;forward;
procedure FailCircle;forward;
procedure TCircles.FailCircle;
begin
try
LockDrawing
finally
y:=y+1;
WriteCircle;
end;
end;
procedure TCircles.WriteCircle;
begin
try
LockDrawing;
finally
begin
Circle(x, y, radiusDefault);
Redraw;
end;
end;
end;
constructor TCircles.create(New_X, new_Y, New_Radius: integer);
begin
x := New_X;
y := new_Y;
radiusDefault := New_Radius;
end;
////////////////////////////////////////////////////////////////////////////////
var timer1:= new Timer(3000,CreateCircles);//создание через каждые 3 секунды
var timer2:= new Timer(70,FailCircle);//падение шариков
const
radius = 25; //радиус кругов
speed_circle = 10; //скорость перемещения шарика
n = 20; //количество кругов
procedure FonCreate;//создание фона
begin
FloodFill(1, 1, clSkyBlue);
end;
var
x_coord, y_coord, i: integer;//координаты управляемого шарика
krug: array [1..n] of TCircles;//падающие шарики
countcircles: integer;//счётчик падающих шариков
procedure CreateUpperCircle;//создание управляемого шарика
begin
x_coord := WindowWidth div 2;
y_coord := WindowHeight div 2;
circle(x_coord, y_coord, radius);
end;
procedure UpperCircus(Key: integer);//управление шариком
begin
case Key of
VK_Left: x_coord := x_coord - 1 * speed_circle;//Движение шарика влево
VK_Right: x_coord := x_coord + 1 * speed_circle;//движение шарика вправо
VK_Up: y_coord := y_coord - 1 * speed_circle;//движение шарика вверх
VK_Down: y_coord := y_coord + 1 * speed_circle;//движение шарика вниз
end;
try //если процедура LockDrawing не срабатывает,то происходит сразу прорисовка.
LockDrawing;//блокировка вывода на экран
SetBrushColor(clSkyBlue);
FillCircle(x_coord, y_coord, radius + speed_circle + 2);//закрашивание круга
SetBrushColor(clBlue);//восстанавливаем цвет кисти
// SetPenColor(clRed);//воостанавливаем исходный цвет ручки
circle(x_coord, y_coord, radius);//рисование управляемого шарика
Redraw;
except
begin
SetBrushColor(clSkyBlue);
SetPenColor(clSkyBlue);
FillCircle(x_coord, y_coord, radius + speed_circle + 2);//закрашивание круга
SetBrushColor(clBlue);//восстанавливаем цвет кисти
SetPenColor(clRed);//воостанавливаем исходный цвет ручки
circle(x_coord, y_coord, radius);//рисование управляемого шарика
Redraw;
end;
end
end;
procedure CreateCircles;//создание падающих шариков
begin
if countcircles<=n then
begin
countcircles := countcircles + 1;
krug[countcircles].WriteCircle;
end
else timer1.Stop;
timer2.Start;//Запускаем таймер падения шариков
end;
procedure RewriteFailCircles(j: integer);
var
i: integer;
begin
for i := 1 to j do
with krug[i] do
begin
LockDrawing;
Circle(x, y, radius);
Redraw;
end;
end;
procedure FailCircle;//падение шариков
var i:integer;
begin
begin
try
LockDrawing;
finally
begin
for i:=1 to countcircles do
krug[i].FailCircle;
end;
end;
end;
end;
function Stolknovenie(): boolean;//проверка на столкновение падающих шариков с шариком управляемым
begin
end;
////////////////////////////////////////////////////////////////////////////////
begin
MaximizeWindow;//максимизируем графическое окно
SetPenColor(clSkyBlue);//устанавливаем цвет ручки
SetPenWidth(2);//устанавливаем размер ручки
SetBrushColor(clBlue);//устанавливаем цвет кисти
FonCreate;//создаём фон
countcircles := 0;//обнуляем счётчик созданных кругов
CreateUpperCircle;//создаём управляемый шарик
for i := 1 to n do
begin
krug[i] := TCircles.create(25 + Random(WindowWidth) - 10, radius, radius);
end;
OnKeyDown := UpperCircus;//проверка события нажатия клавишь и управление шариком
timer1.Start;//запускаем таймер,который создаёт падающие шарики
end. |