швидкості по x.
_dy: integer; - вектор швидкості по y.
Методи: Create (rad, color, dx, dy, x, y: integer); - створення об'екта.Destroy; override;-знищення об'єкта.
Властивості, що дозволяють зчитувати і встановлювати значення відповідних полів:
property x: integer read _x write _x; y: integer read _y write _y; rad: integer read _rad write _rad; color: integer read _color write _color; dx: integer read _dx write _dx; dy : integer read _dy write _dy;
Клас TBalls містить масив м'ячів, кожен з яких це об'єкт класу TBall.
Поля :: array [0 .. 100] of TBall; - масив м'ячів.
num: integer; - кількість елементів у масиві.
Методи властиві даному класу:
function Add (x, y, dx, dy, col, rad: integer): boolean; - додати м'яч.
function del (n: integer): boolean; - видалити мяч.GetData (i: integer): TBall; - метод чтенія.SetData (i: integer; Value: TBall); - метод запису.
Властивість дозволяє отримати інформацію про об'єкт:
property Items [i: integer]: Tball read GetData write SetData;
Опис алгоритму
Алгоритм визначення розрахунку руху м'ячів після зіткнення один з одним:
У вкладеному циклі порівнюємо кожен м'ячик окремо з усіма подальшими. Для цього визначаємо відстань між координатами центрів і порівнюємо із сумою радіусів. Якщо відстань між центрами стає менше суми радіусів тоді за правилом пружного удару, міняємо вектор швидкості одного з іншим. І після цього вони продовжують переміщатися вже з іншими швидкостями. При цьому для того, що б не виникало ніяких помилок при зіткненні їх один з одним, до координат по x і по y додаємо значення вектора швидкості на дану вісь і перемальовували. Це дозволяє уникнути залипання м'ячів один в одному, із за різних значень векторів швидкості одного й іншого. p align="justify"> Алгоритм перевірки на співудар кожного м'яча з межами екрану:
Ми повинні перевірити на досягнення м'ячем кордонів певної площі екрану, для цього визначаємо його кордон і порівнюємо з кількістю пікселів по даній осі. Якщо виконується одна з умов тоді змінюємо вектор швидкості на протилежний по даній осі. І після проробляємо теж саме для наступного кульки. Також враховуємо, що м'яч може перескочити через кордон із за великого значення вектора швидкості, щоб уникнути даної події зробимо також як і при зіткненні м'ячів, один з одним, тобто відкинемо м'яч призначення вектора швидкості від кордону по кожній осі при їх зіткненні.
Текст програми
Наведемо опис класів:
unit Unit2; Wi...