Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: Starfield

moptim [23.10.2006 18:47:23]

#

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 Function

moptim [23.10.2006 18:48:31]

#

Saa kommentoida vapaasti.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta