Character: Ihan näppärän näköistä jälkeä tuolla tulee. Sainkin siitä inspiraatiota väsätä omani mutta sen tuottama jälki ei ole kauhean kehuttavaa.
Code: Select all
Const RW = 128 // HUOM! Tämän tulee olla luvun 2 jokin potenssi
Const ROUGHNESS = 12 // Kartan "karkeus"
SCREEN RW, RW
Dim Array(RW, RW) As Float
Repeat
If GetKey() <> 0 Then
tim = Timer()
ReDim Array(RW, RW)
Array(0, 0) = Rand(10, Rand(10, 255))
Array(RW, 0) = Rand(10, Rand(10, 255))
Array(0, RW) = Rand(10, Rand(10, 255))
Array(RW, RW) = Rand(10, Rand(10, 255))
Diamond(0, 0, RW)
For a = 0 To RW
For i = 0 To RW
If Array(i , a) > 130 Then
Color 150 + 50 * Sin(180 + (Min(255, Array(i, a) - 130) / 125) * 90), 120 + 40 * Sin(180 + (Min(255, Array(i, a) - 130) / 125) * 90), 20
ElseIf Array(i, a) > 80 Then
Color 195 + 45 * Sin(180 + (Min(255, Array(i, a) - 80) / 50) * 90), 175 + 50 * Sin(180 + (Min(255, Array(i, a) - 80) / 50) * 90), 135 + 60 * Sin(180 + (Min(255, Array(i, a) - 80) / 50) * 90)
ElseIf Array(i, a) > 65 Then
Color 40 + 20 * Sin(180 + (Min(255, Array(i, a) - 65) / 15) * 90), 125 + 20 * Sin(180 + (Min(255, Array(i, a) - 65) / 15) * 90), 213 + 30 * Sin(180 + (Min(255, Array(i, a) - 65) / 15) * 90)
Else
Color 20 + 10 * Sin((Min(255, Array(i, a)) / 65) * 90), 50 + 25 * Sin((Min(255, Array(i, a)) / 65) * 90), 120 + 50 * Sin((Min(255, Array(i, a)) / 65) * 90)
EndIf
Dot i, a
Next i
Next a
SetWindow "Time elapsed: " + (Timer() - tim) + "ms"
DrawScreen
EndIf
Until EscapeKey()
Function Diamond(x As integer, y As integer, r As integer)
If r < 2 Then Return 0
Array(x + r / 2, y + r / 2) = (Array(x, y) + Array(x + r, y) + Array(x, y + r) + Array(x + r, y + r)) / 4 + Rand(-ROUGHNESS, ROUGHNESS)
Square(x + r / 2, y + r / 2, r / 2)
EndFunction
Function Square(x As integer, y As integer, r As integer)
If r < 1 Then Return 0
If (x - r) >= 0 Then
If ((y - r) >= 0) And ((y + r) <= RW) And Array(x - r, y) = 0 Then
Array(x - r, y) = (Array(x - r, y - r) + Array(x - r, y + r) + Array(x, y)) / 3
EndIf
If ((y - r) >= 0) And ((y + r) > RW) And Array(x - r, y) = 0 Then
Array(x - r, y) = (Array(x - r, y - r) + Array(x, y)) / 2
EndIf
If ((y - r) < 0) And ((y + r) <= RW) And Array(x - r, y) = 0 Then
Array(x - r, y) = (Array(x - r, y + r) + Array(x, y)) / 2
EndIf
EndIf
If (y - r) >= 0 Then
If ((x - r) >= 0) And ((x + r) <= RW) And Array(x, y - r) = 0 Then
Array(x, y - r) = (Array(x - r, y - r) + Array(x + r, y + r) + Array(x, y)) / 3
EndIf
If ((y - r) >= 0) And ((x + r) > RW) And Array(x, y - r) = 0 Then
Array(x, y - r) = (Array(x - r, y - r) + Array(x, y)) / 2
EndIf
If ((y - r) < 0) And ((x + r) <= RW) And Array(x, y - r) = 0
Array(x, y - r) = (Array(x + r, y + r) + Array(x, y)) / 2
EndIf
EndIf
If (x + r) >= 0 Then
If ((y - r) >= 0) And ((y + r) <= RW) And Array(x + r, y) = 0 Then
Array(x + r, y) = (Array(x + r, y - r) + Array(x + r, y + r) + Array(x, y)) / 3
EndIf
If ((y - r) >= 0) And ((y + r) > RW) And Array(x + r, y) = 0 Then
Array(x + r, y) = (Array(x + r, y - r) + Array(x, y)) / 2
EndIf
If ((y - r) < 0) And ((y + r) <= RW) And Array(x + r, y) = 0
Array(x + r, y) = (Array(x + r, y + r) + Array(x, y)) / 2
EndIf
EndIf
If (y + r) >= 0 Then
If ((x - r) >= 0) And ((x + r) <= RW) And Array(x, y + r) = 0 Then
Array(x, y + r) = (Array(x - r, y - r) + Array(x + r, y - r) + Array(x, y)) / 3
EndIf
If ((y - r) >= 0) And ((x + r) > RW) And Array(x, y + r) = 0 Then
Array(x, y + r) = (Array(x - r, y - r) + Array(x, y)) / 2
EndIf
If ((y - r) < 0) And ((x + r) <= RW) And Array(x, y + r) = 0
Array(x, y + r) = (Array(x + r, y + r) + Array(x, y)) / 2
EndIf
EndIf
Diamond(x - r, y - r, r)
Diamond(x, y - r, r)
Diamond(x - r, y, r)
Diamond(x, y, r)
EndFunction