Звездное небо

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Звездное небо

Сообщение Yurich » 27.08.2003 (Ср) 0:54

Вот, понадобилась формула или алгоритм для эффекта полета вглубь звездного неба (как в скринсейвах). Благодарю за помощь!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.08.2003 (Ср) 2:54

Эх, давно это было! :) Ещё в QB. Помню не всё. :) Но помню:
Имеем массив юзерского типа фиксированной длины (длина=кол-во звёзд). Юзерский тип содежит инфу о координатах точки и о её ускорении. Ускорение изначально 1.02, если не ошибаюсь :roll: Так вот сначала рисуются все N точек в некоторой близости от центра, все координаты запоминаются. Затем на каждой итерации к ускорению добавляется небольшая величина (всё большая с каждым разом), и в соответствии с ней точка перерисовывается так, чтобы она лежала на том самом луче, который соединяет её с центром экрана (это её путь, с него она не должна...), но уже дальше. Предварительно закрашивается старая позиция точки (координаты-то известны), ну и новые записываются в массив.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 27.08.2003 (Ср) 13:21

Такк.... ну вот что я скажу ... по этоому поводу...
Помню что когда-то я переводил свою прогу ... из 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
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 28.08.2003 (Чт) 4:05

Все сказанное далеко не формула, но в былое время юзал GW, TB, QB, PB ... (ой, о чем я?), ОГРОМНОЕ СПАСИБО!

mark+
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 156
Зарегистрирован: 03.07.2003 (Чт) 0:04
Откуда: Kurgan

Сообщение mark+ » 01.09.2003 (Пн) 22:28

Я тоже в данный момент занимаюсь данной тематикой... хотел даже тему открыть. ОГРОМНОЕ СПАСИБО! :lol: :lol: :lol:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 11

    TopList  
cron