Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB.NET: Matrix koodi

Sivun loppuun

peki [03.04.2004 10:22:44]

#

Tippuvat Matrix -koodirivit.
Tarvitaan:
Timer:tmrUpdate - interval 10
pictureBox:picSurface - Formin kokoinen

Koodi on melko tylsästi kommentoitua(sori).

Mikä tahansa fontti käy, mutta Matrix fontin saa täältä:
http://www.deviantart.com/download/2040700/

Edit:
Koodissa on pikkubugi:
Mitä lujempaa kirjaimet liikkuvat, sitä kauempana ne ovat toisistaan, mitä hiljempaa sen lähempänä.
Se ei hirveästi katselemista haittaa, mutta jos joku keksisi ratkaisun sen tappamiseen olisin kiitollinen.

Public Class frmMatrix
    Inherits System.Windows.Forms.Form


   ' Tähän väliin tulee Windows Form Designer generated code


    Const CHAR_HEIGHT As Byte = 20
    Const LINES As Byte = 21

    'taustapuskuri
    Dim b As Bitmap
    Dim g As Graphics
    'rivit
    Dim c(LINES) As CodeSlide
    'fontti
    Dim f As Font

    Private Sub frmMatrix_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Byte
        For i = 0 To LINES
            c(i) = New CodeSlide
        Next i

        Randomize()
        ' Taustapuskuri
        b = New Bitmap(picSurface.Width, picSurface.Height)
        g = Graphics.FromImage(b)
        ' Matrix fontti
        f = New Font("mCode15", 10)
        tmrUpdate.Enabled = True
    End Sub

    Private Sub tmrUpdate_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrUpdate.Tick
        Dim i As Integer
        Dim a As Byte
        g.Clear(Color.Black)
        ' joka rivi
        For a = 0 To LINES
            'joka kirjain
            For i = 0 To 25
                ' jos ulkopuolella -> siirrä ylös
                If c(a).Pos(i) + c(a).Vel(i) >= b.Height Then
                    ' kirjain ykkönen -> alusta perusarvot
                    If i = 25 Then
                        c(a).r = Rnd() * -500 - 300
                        ' lastvelocity auttaa pitämään koko kirjainpötkön kasassa?
                        c(a).lv = c(a).v

                        c(a).v = Rnd() * 8 + 9
                    End If
                    c(a).Vel(i) = c(a).v
                    ' lastvelocity aloituspisteestä´, jotta saadaan pidettyä kasassa
                    c(a).Pos(i) = c(a).r - c(a).lv
                End If
                ' siirretään kirjaimia
                c(a).Pos(i) += c(a).Vel(i)
                ' Vaihdetaan merkkiä 30% todennäköisyydellä
                If Int(Rnd() * 100) >= 70 Then c(a).rndAsciiInd(i)
                ' piiretään merkki
                g.DrawString(Chr(c(a).Ascii(i)), f, New _
                SolidBrush(Color.FromArgb(c(a).Color(i), _
                255, c(a).Color(i))), 30 * a, c(a).Pos(i))
            Next
        Next
        picSurface.BackgroundImage = b
        picSurface.Refresh()
    End Sub

    ' koodipötkö
    Private Class CodeSlide
        Public Structure Letter
            Dim Ascii As Byte
            Dim color As Byte ' vaaleasta vihreään(0-255)
            Public pos As Double
            Public vel As Double
        End Structure

        Private Letters(25) As Letter
        Public r As Double
        Public v As Double
        Public lv As Double

        Public Property Color(ByVal ind As Byte) As Byte
            Get
                Return Letters(ind).color
            End Get
            Set(ByVal Value As Byte)
                Letters(ind).color = Value
            End Set
        End Property
        Public ReadOnly Property Ascii(ByVal ind As Byte) As Byte
            Get
                Return Letters(ind).Ascii
            End Get
        End Property
        Public Property Pos(ByVal ind As Byte) As Double
            Get
                Return Letters(ind).pos
            End Get
            Set(ByVal Value As Double)
                Letters(ind).pos = Value
            End Set
        End Property
        Public Property Vel(ByVal ind As Byte) As Double
            Get
                Return Letters(ind).vel
            End Get
            Set(ByVal Value As Double)
                Letters(ind).vel = Value
            End Set
        End Property

        Sub New()
            Dim i As Integer
            Dim Asc As Byte
            Dim v As Byte = Rnd() * 8 + 9
            r = Rnd() * 500 - 300
            ' alustus
            For i = 0 To 25
                ' nappaa validi ascii...
                Asc = setAscii()
                ' väri saadaan suhteesta i/25 = color/255
                Letters(i).color = 255 * i / 25
                Letters(i).Ascii = Asc
                ' jonnekin ylös...
                Letters(i).pos = i * CHAR_HEIGHT - r
                Letters(i).vel = v
                lv = v
            Next
        End Sub

        Private Function setAscii() As Byte
            ' Validit asciit: 65-76, 84, 97-111, 116, 120-122
setA:
            Dim d As Byte = Int(Rnd() * 122)
            If d < 65 Then GoTo setA
            If d > 76 And d < 84 Then GoTo setA
            If d > 84 And d < 97 Then GoTo setA
            If d > 111 And d < 116 Then GoTo setA
            If d > 116 And d < 120 Then GoTo setA
            If d > 122 Then GoTo setA
            Return d
        End Function

        Public Sub rndAsciiInd(ByVal ind As Byte)
            Letters(ind).Ascii = setAscii()
        End Sub
    End Class
End Class

TuGi [06.04.2004 20:54:51]

#

Muuten sika siisti, mut tiippuu vaan liian harvaan noi kirjaimet.

peki [06.04.2004 21:00:25]

#

Ei vaan mun mielestä. Käytithän Matrix fonttia?

peki [06.04.2004 21:01:00]

#

Sitä voi säätää noista konsteista(CHAR_HEIGHT) jos viittii.

peki [06.04.2004 21:43:04]

#

Olet Kukkuluuruu täysin oikeassa. Sori. Siinä tosiaan on bugi! Itse en onnistu sitä tappamaan, voisiko joku auttaa?

tnb [06.04.2004 22:55:23]

#

exe löytyy tästä:
http://koti.mbnet.fi/nordta/Matrix/

sooda [07.04.2004 10:08:06]

#

Tarviiko toi jonkun .net-dll:n kun tää valittaa että ei oo mscoree.dll tiedostoa.

TuGi [07.04.2004 10:57:29]

#

Siihen tarttee Frameworkin.

peki [07.04.2004 15:11:03]

#

Framework 1.1:sen

Meitzi [07.04.2004 22:33:53]

#

Kiittii muuten ihan kirotusti koodista. Olen aika pitkään yrittäny keksiä miten saan gdi+:lla piirretyt jutut kuvaksi. Ne kun eivät muuten tahdo pysyä kovinkaan pitkään ikkunassa. Itse tuo Matrix efektihän tuossa ei ollu kovin kummonen, kirjaimiahan pitäisi olla useammassa kerroksessa jne.

sooda [08.04.2004 10:11:26]

#

Jotkut merkit jää jumiin ja kirjottuu päällekkäin, muuten hyvä :)

peki [12.04.2004 17:41:22]

#

Johtuu muuten siitä, että pictureboxi ei ole tarpeeksi korkea

wanhus [28.11.2004 13:56:58]

#

Mulla tulee vaan täällänen koodi ku avaan sen exen:
---------------------------
Matrix.exe - Sovellusvirhe
---------------------------
Sovelluksen alustus epäonnistui (0xc0000135). Lopeta sovellus valitsemalla OK.
---------------------------
OK
---------------------------

ja mist sais sen frameworkin?


Sivun alkuun

Vastaus

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

Tietoa sivustosta