Ok, KDG cố giải thích sơ hén...
Trước tiên LQ phải hiểu, cả 2 trò chơi này đều cần dùng tới "timer" : cứ đến mỗi thời hạng dt (có thể là 1 giây, 1/10 giây hay gì đó, tùy theo mình chọn) thì mình phải tính lại vị trí của các vật "di động".
Trên màn hình, điểm nằm ở gốc trái trên cao là (x, y) = (0, 0).
Nếu ở 1 thời điểm T, vật di động nằm ở (X, Y) thì đến thời điểm T+dt, vật sẽ nằm ở (X+dx, Y+dy).
dx và dy là những cái mình cần tính, và chúng chỉ có thể thay đổi khi "chạm" vào 1 "chướng ngại vật".
Trò bi da với 3 bi :
Các bi có thể di chuyển trong phạm vi cái bàn hình chữ nhật, bề dài = L, bề rộng = l
Nếu mình chọn gốc trái trên cao của bàn là (X1, Y1), thì gốc phải bên dưới của bàn sẽ là (X2=X1+L, Y2=Y1+l)
Nếu bán kính của bi là R, (Xb, Yb) là vị trí của bi, dxb & dyb là độ di chuyển của bi :
- bi chạm vào thành trái nghĩa là "Xb + dxb < X1", chạm thành phải nếu "Xb + dxb > X2"
Lúc đó bi phải dội qua/lại : dxb => -dxb, dyb không thay đổi.
- bi đang chạm vào thành trên nếu "Yb + dyb < Y1", chạm thành dưới nếu "Yb + dyb > Y2"
Lúc đó bi dội lên/xuống : dyb => -dyb, dxb không thay đổi.
- bi chạm vào bi khác : cái này khó tính hơn, đợi KDG rảnh sẽ tìm phương thức cho LQ sau hén, đại khái là theo họa đồ dưới đây (bi A đang nằm 1 chổ, bi B chạy theo hướng đỏ, chạm bi A, sẽ dội theo hướng đỏ tiếp sau đó, trong khi bi A sẽ đi theo hướng xanh).
