Такк.... ну вот что я скажу ... по этоому поводу...
Помню что когда-то я переводил свою прогу ... из QB на VB, но сейчас её искать - гиблое дело .... софта ... полкомпа
Зато я откопал оригинал QB-шной проги .... Ну думаю не составит труда её переделать ... напомню SCREEN 12 (разрешение 640х480), посему такие координаты STX и STY (если их менять ... то будет менятся место откудова звездочки летят ..... причем сначала произсходи взрыв ... а затем полет звезднный...)
-----------------------------------------------------------
надеюсьь это хоть как-то поможет

(код ниже)
-----------------------------------------------------------
CLS : SCREEN 12
STX = 320: STY = 240
CONST Num = 150
DIM X0(Num), X1(Num), Y0(Num), Y1(Num), Col(Num)
PRINT "Hello"
0 KEY$ = INKEY$
GOSUB Scan
IF X1(A MOD Num) = 0 AND Y1(A MOD Num) = 0 THEN GOSUB MakeStart
X = Proverka
IF X = 1 THEN GOSUB MakeStart ELSE GOSUB DrawStar
A = A + 1
IF KEY$ = "" THEN GOTO 0
SCREEN 0
END
DrawStar:
Index = A MOD Num
'Анализ ключей
'если М0=-1 значит вверх иначе вниз
'если М1=-1 значит влево иначе вправо
M0 = SGN(Y1(Index))
M1 = SGN(X1(Index))
'запоминаем положение для послдующего стирания
X0(Index) = X1(Index)
Y0(Index) = Y1(Index)
PSET (STX + X0(Index), STY + Y0(Index)), 0
'определяем расстояние от стартовой точки FullLen
Xlen = ABS(X1(Index))
Ylen = ABS(Y1(Index))
FullLen = SQR(Xlen ^ 2 + Ylen ^ 2)
IF FullLen <> 0 THEN Temp = Xlen / FullLen ELSE Temp = Xlen / (FullLen + 1E-20)
IF FullLen <> 0 THEN Temp2 = Ylen / FullLen ELSE Temp2 = Ylen / (FullLen + 1E-20)
'изменяем расстояние от стартовой точки допустим линейно
Izmena = 3 + FullLen / 25
X1(Index) = M1 * (FullLen + Izmena) * Temp
Y1(Index) = M0 * (FullLen + Izmena) * Temp2
'определив позицию новыx точек, рисуем их
PSET (STX + X1(Index), STY + Y1(Index)), Col(Index)
RETURN
MakeStart:
Index = A MOD Num
X1(Index) = INT(RND * 100 - 50): X0(Index) = X1(Index)
Y1(Index) = INT(RND * 100 - 50): Y0(Index) = Y1(Index)
SELECT CASE INT(RND * 3)
CASE 0: Col(Index) = 7
CASE 1: Col(Index) = 8
CASE ELSE: Col(Index) = 15
END SELECT
RETURN
Scan:
Index = A MOD Num
Proverka = 0
IF ABS(STX + ABS(X1(Index))) > 650 THEN Proverka = 1
IF ABS(STY + ABS(Y1(Index))) > 490 THEN Proverka = 1
RETURN
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)