Code archives/Graphics/Sand texture map generator
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Creates screens with sand like colors. Per cursor key pres a new sand pattern is created. These raw drawings would look great behind title screens if you fix them up. | |||||
; ; ; ; ; Graphics 640,480,16,2 SetBuffer BackBuffer() ; Global bbuffer = CreateImage(GraphicsWidth(),GraphicsHeight()) ; Type bmap Field map End Type ; SeedRnd MilliSecs() Global n# , nn# Global uy = 245 Global ly = 245 Global n2# = 360/2 Global n3# = 284 Global ax = GraphicsWidth() ; Dim clock360(5000) For i=0 To 5000 : clock360(i) = Rand(360) : Next ; Dim sy(600,1);x1,x2 ; setscanline() ; While KeyDown( 1 ) = False Cls ; ms = MilliSecs() For i=0 To 10 r=255-i*5 g=255-i*9 b=255-i*12 tex Rand(-100,100)*i,Rand(-i*15,300-(i*10)),r,g,b; ; q1 = q1 + 5 ; q2 = q2 + 5 ; q3 = q3 + 5 Next ; Color 255,255,255 Text GraphicsWidth()-120,0,MilliSecs()-ms ; Flip WaitKey ; ;Delay 100 ;Color 0,0,0 : Rect 0,0,100,50,True : Color 255,255,255 ;Text 0,0,outval$ ;Text 0,20,n2 ; ; Flip Wend End ; Function tex(x,y,r,g,b) SetBuffer ImageBuffer(bbuffer) Cls makeredsurface ;100,100 connectscanline r,g,b im.bmap = New bmap im\map = CreateImage(256,256) GrabImage im\map,0,0 SetBuffer BackBuffer() For i=0 To 4 DrawImage im\map,Rand(400)+x,Rand(200)+y Next End Function ; Function makeredsurface(nx=0,ny=0) ;n# , nn# setscanline SeedRnd MilliSecs() uy = 245 ly = 245 n2# = 360/2 n3# = 284 ax = GraphicsWidth() n=Rand(0,350) While KeyDown(1) = False If n < 359 Then n = n + 1 : n2 = n2 + 4.1 If n3 < 359 Then n3 = n3 + 1 Else n3=clock360(cnt+100) If n2>360 Then n2 = clock360(cnt+400) nn = nn + .1 Else ; Flip Return End If ; ax = (Cos(n) * 90) ay = ((Sin(n3) * (50 ))) tx = ( ax ) ty = ( ay ) + ( Cos(n2)*Rand(1,12) ) ; If ty < uy Then touch = 1 : uy = ty : mrect(tx,uy,2,ly-uy,0) uy = 96 ly = 96 End If If ty > ly Then touch = -1 : ly = ty : mrect(tx,(ly-uy+20),2,ly-uy,1) uy = 96 ly = 96 End If cnt=cnt+1 Wend End Function ; Function mrect(x1,y1,w1,h1#,tp) Local w#,h#,x#,y# y1=y1+100 x1=x1+100 x = (x1*3/2) y = (y1*2/2) w = (((w1*Rand(2,36))/2)*2) h = 2 x=x/2.4;1.5 y=(y*1)+32;2 w=w*1;3 h=h*1;3 If x < sy(y,0) Then sy(y,0) = x If x+w+28 < sy(y,1) Then sy(y,1) = x+w End Function Function connectscanline(ar#,ag#,ab#) ; Local mm#[16201] Local n# ; For i=0 To 16200 mm[i] = 255-n n = n +.01566 Next n=0 g=ag;20 b=ab;10 LockBuffer ImageBuffer(bbuffer) For nx=-4 To 4 For ny=-4 To 4 For i=1 To 200 Color ar-mm[n],ag-mm[n],ab-mm[n] If sy(i,0) < 250 Then WritePixelFast sy(i,0)+nx*Rand(10)+32,i+ny*Rand(10),getrgb(ColorRed(),ColorGreen(),ColorBlue()) WritePixelFast sy(i,1)+nx*Rand(10)+32,i+ny*Rand(10),getrgb(ColorRed(),ColorGreen(),ColorBlue()) End If n = n + 1 Next Next Next UnlockBuffer ImageBuffer(bbuffer) ; End Function Function setscanline() For i=0 To GraphicsHeight() sy(i,0) = GraphicsWidth()/2 sy(i,1) = GraphicsWidth()/2 Next End Function Function makescanline() Color 100,0,0 For i=1 To GraphicsHeight() If sy(i,1) <> sy(i+1,1) Rect sy(i,0),i,sy(i,1),1 End If Next End Function ;Standard functions for converting colour to RGB values, for WritePixelFast and ReadPixelFast Function GetRGB(r,g,b) Return b Or (g Shl 8) Or (r Shl 16) End Function Function GetR(rgb) Return rgb Shr 16 And %11111111 End Function Function GetG(rgb) Return rgb Shr 8 And %11111111 End Function Function GetB(rgb) Return rgb And %11111111 End Function |
Comments
None.
Code Archives Forum