Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Dimadjan
1

Игра, падение шариков(зависает)

21.04.2013, 14:13. Показов 758. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
решил написать простую игру, падение шариков. Но она зависает. не могу понять почему. Буду благодарен если объясните.
Pascal
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.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2013, 14:13
Ответы с готовыми решениями:

Игра с удалением шариков из массива
Всем привет, еще раз! В общем стоит передо мной следующая задача: Есть N - количество шаров (1 &lt;=...

9 шариков - логическая игра и как правильно ее реализовать ?
Есть два игрока , у каждого игрока по 9 ячеек ,и в каждой ячейке по 9 шариков(начальные данные),...

По данному расположению шариков определите, сколько шариков будет сейчас уничтожено
В одной компьютерной игре игрок выставляет в линию шарики разных цветов. Когда образуется...

Можно ли купить k шариков мороженого ,если его продают по 3 и по 5 шариков?
Задача : &quot;В кафе мороженое продают по три шарика и по пять шариков. Можно ли купить ровно k шариков...

0
21.04.2013, 14:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2013, 14:13
Помогаю со студенческими работами здесь

Мороженое продают по три шарика и по пять шариков. Можно ли купить ровно k шариков мороженого?
В кафе мороженое продают по три шарика и по пять шариков. Можно ли купить ровно k шариков...

В кафе продается мороженое по 3 или по 5 шариков в порции. Определить, можно ли купить K шариков мороженного
В кафе продается мороженое по 3 или по 5 шариков в порции. Определить, можно ли купить K шариков...

Найти число шариков, у которых отклонение будет меньше 1,08 мм, если изготовлено 1000 шариков
Автомат изготавливает шарики. Диаметр шарика - случайная величина, подчиненная нормальному закону....

В кафе мороженое продают по три шарика и по пять шариков. Можно ли купить ровно k шариков мороженого?
Добрый день, товарищи, вот есть такая задачка... В кафе мороженое продают по три шарика и по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru