Tähtimatka, jonka tein hutaisten n. 20 minuutissa. Hidas, optimoimaton ja ruma. Mutta kommenttien pitäisi olla kunnossa. Selvyydestä en tiedä. Lyhyt on, vaikkapa ehkä Assemblylla tai SDL:llä saisikin lyhyemmän. Ilmoittakaa virheistä!
Muokattu 24.10.2006.
Private Declare Function Sleep Lib "kernel32" (ByVal dwMilliSeconds As Long) As Long
'KoTW tykkää, kun ei ryöstä niin paljoa prosessoria, pitää myös muis-
'taa DoEvents
Private Type Tähti 'tähtityyppi
X As Long 'x-koordinaatti
Y As Long 'y-koordinaatti
Suunta As Integer 'mikähän...
Vauhti As Single 'voiskohan arvata
Koko As Single 'koko
End Type 'pakollinen :D
Dim Tähti(1000) As Tähti, TähtiMäärä As Integer
'muuttujamäärittelyt
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
End 'näppäimen painalluksesta
End Sub 'pois
Private Sub Form_Load()
Randomize Timer 'alustetaan satunnaislukugeneraattori
Me.AutoRedraw = True 'ei välkkyisi
Me.Caption = "Star Field made by KoTW" 'otsikko ja oma nimi mukaan
Me.Show 'olisi kiva jos ikkuna näkyisi
Me.BackColor = 0 'musta tausta
Me.ForeColor = 16777215 'ja valkoinen väri piirtoon
TähtiMäärä = 10 'alustetaan tähtien määrä
For i = 0 To 10 'ja alustetaan niiden sijainti ym.
Tähti(i).X = Me.Width / 2 'keskelle ruutua
Tähti(i).Y = Me.Height / 2 'tämäkin keskelle
Tähti(i).Suunta = Int(360 * Rnd) 'suunta satunnaiseksi
Tähti(i).Vauhti = 5 + 2 * Rnd 'samat vauhdille
Tähti(i).Koko = 1 'ja koko pieneksi
Next i 'silmukan loppu
Looppaa 'kutsutaan looppaa-aliohjel-
End Sub 'maa, joka huolehtii tästä
Private Sub Looppaa() 'looppaa-aliohjelma
Dim a As Single 'hidastetta varten
Do 'aloittakaamme silmukka
Liikuta 'pitääkö muka liikuttaa
Piirrä 'miksi piirtäisin
a = Timer + 0.01 'muuta tätä niin hidastat/nopeutat
Do 'hidaste alkaa
Sleep 10 'ite odotus
DoEvents 'winkkari tarvitsee aikaa omiin hommiinsa o_O
Loop Until Timer > a 'hidasteen loppu
Loop 'ja silmukan loppu
End Sub
Private Sub Form_Unload(Cancel As Integer)
End 'ilman tätä lopetus lagaa
End Sub
Private Sub Liikuta()
Randomize Timer 'alustetaan satunnaislukugeneraattori
For i = 0 To TähtiMäärä 'elikkä joka tähdelle käy näin huonosti
If YliRuudun(Tähti(i)) Then 'jos yli ruudun niin...
Tähti(i).X = Me.Width / 2 'keskelle
Tähti(i).Y = Me.Height / 2 'keskelle tääkin
Tähti(i).Suunta = Int(360 * Rnd) 'ja suunta satunnaiseksi
Tähti(i).Vauhti = 2 + 5 * Rnd 'samat vauhdille
Tähti(i).Koko = 1 'ja koko pieneksi
End If 'If-hässäkän loppu
Tähti(i).X = Tähti(i).X + (Cos(Tähti(i).Suunta) * Tähti(i).Vauhti)
'uusi x-positio
Tähti(i).Y = Tähti(i).Y + (Sin(Tähti(i).Suunta) * Tähti(i).Vauhti)
'uusi y-positio
Tähti(i).Koko = Tähti(i).Koko + 0.01 'ja lisää kokoa
Next i 'silmukan loppu
If TähtiMäärä < 1000 Then 'ettei tulisi virhettä
TähtiMäärä = TähtiMäärä + 1
Tähti(TähtiMäärä).X = Me.Width / 2 'keskelle
Tähti(TähtiMäärä).Y = Me.Height / 2 'keskelle tääkin
Tähti(TähtiMäärä).Suunta = Int(360 * Rnd)
'ja suunta satunnaiseksi
Tähti(TähtiMäärä).Vauhti = 2 + 5 * Rnd
'samat vauhdille
Tähti(TähtiMäärä).Koko = 1 'ja koko alustetaan
End If
End Sub
Private Sub Piirrä()
Cls 'hienompi ilman edellisiä roskia
For i = 0 To TähtiMäärä 'ja joka tähti läpi
DrawWidth = Tähti(i).Koko 'tietyn paksuinen pitää olla
PSet (Tähti(i).X, Tähti(i).Y), 16777215
'piirretään
Next i 'ja seuraava rassukka käsittelyyn
End Sub
Private Function YliRuudun(stara As Tähti) As Boolean
If stara.X < 0 Or stara.Y < 0 Or stara.X > Me.Width Or stara.Y > Me.Height Then YliRuudun = True: Else: YliRuudun = False
'tarkistaa onko yli ruudun
End FunctionSaa kommentoida vapaasti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.