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
Muuten sika siisti, mut tiippuu vaan liian harvaan noi kirjaimet.
Ei vaan mun mielestä. Käytithän Matrix fonttia?
Sitä voi säätää noista konsteista(CHAR_HEIGHT) jos viittii.
Olet Kukkuluuruu täysin oikeassa. Sori. Siinä tosiaan on bugi! Itse en onnistu sitä tappamaan, voisiko joku auttaa?
exe löytyy tästä:
http://koti.mbnet.fi/nordta/Matrix/
Tarviiko toi jonkun .net-dll:n kun tää valittaa että ei oo mscoree.dll tiedostoa.
Siihen tarttee Frameworkin.
Framework 1.1:sen
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.
Jotkut merkit jää jumiin ja kirjottuu päällekkäin, muuten hyvä :)
Johtuu muuten siitä, että pictureboxi ei ole tarpeeksi korkea
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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.