This is a color cycling demo similar to things that were popular in the late 80s on hardware like Amigas and Atari ST.
Just cleaning out some old drives from a couple of years ago. This shouldn't be taken as any example of good coding.
Global GFXHEIGHT=480
Global GFXWIDTH=640
Global maxstars=1000
Graphics GFXWIDTH, GFXHEIGHT
SetMaskColor 255,255,0
Global critterlist:TList=New TList
Global critterlist2:TList = New TList
SetScale 2,2
SetColor 0,0,0
DrawRect 100,100,100,100
SetColor 255,255,0
DrawText "WILDLY INTERESTING COPPER EFFECTS",000,130
myimage:TImage = CreateImage(1000,75,1)
Global ticks
GrabImage myimage, 000,100
SetScale 1,1
SetBlend solidblend
For i = 1 To 10
Local s:proceduralpic = New proceduralpic
s.randcolors()
s.initgrid()
s.x = 68*i
s.y = 120
ListAddLast critterlist,s
Next
For i = 1 To 10
s:proceduralpic = New proceduralpic
s.randcolors()
s.initgrid()
s.x = 68*i-64
s.y = 240
ListAddLast critterlist2,s
Next
Type Tstar
Field x,y,vx,vy,size:Int
Field alpha:Float
Method update()
x=x+vx
y = y + vy
If x < 0 x = GFXWIDTH
End Method
Method draw()
SetColor 255,255,255
SetAlpha alpha
Plot x,y
'DrawRect x,y, size,size
End Method
End Type
Type Tstarfield
Global star_list:TList = New TList
Function init(num_stars)
For Local i = 1 To num_stars
s:Tstar = New Tstar
s.x = Rand(GFXWIDTH)
s.y = Rand(GFXHEIGHT)
s.vx = (Rand(5)+Rnd())*-1
s.vy = 0
s.size=Rand(3)
s.alpha = Rnd()+.5
ListAddLast(star_list,s)
Next
End Function
Method update()
For s:tstar=EachIn star_list
s.update()
SetBlend alphablend
s.draw()
Next
End Method
End Type
Type Tcolor
Field r#, g#, b#
End Type
Global mystarfield:TStarfield = New TStarfield
myStarfield.init(MAXSTARS)
While KeyDown(key_escape)=0
For Local thiscritter:proceduralpic = EachIn critterlist
If thiscritter.x < -32
thiscritter.x = 640
thiscritter.randcolors()
thiscritter.initgrid()
EndIf
Next
For thiscritter:proceduralpic = EachIn critterlist2
If thiscritter.x > 640
thiscritter.x = -32
thiscritter.randcolors()
thiscritter.initgrid()
EndIf
Next
Cls
ticks = ticks + 1
SetScale 1,1
SetBlend solidblend
copperblock (170,230,ticks)
SetColor 255,255,255
SetBlend maskblend
SetScale 2,2
DrawImage myimage,0-Sin(ticks)*210-210,115
SetScale 1,1
mystarfield.update()
copperblock (300,400,ticks+20)
copperblock 25,65,ticks-20
SetBlend solidblend
For thiscritter:proceduralpic = EachIn critterlist
thiscritter.x = thiscritter.x - 5
thiscritter.y = 120+Sin(thiscritter.x*10)*3
thiscritter.draw()
Next
For thiscritter:proceduralpic = EachIn critterlist2
thiscritter.x = thiscritter.x + 5
thiscritter.y = 240+Sin(thiscritter.x*10)*3
thiscritter.draw()
Next
Flip
Wend
Function waveline(x1, x2, y, frequency#, amplitude#)
For Local i = x1 To x2 Step 2
myy=y+Sin(i*frequency)*amplitude
DrawRect i, myy, 2,2
Next
End Function
Function copperblock(starty, endy,timestep)
For i = starty To endy Step 2
SetColor Abs(Sin(i*20+timestep*20)*255), Abs(Tan(i*5+timestep*2)*50),Abs(Cos(i*5+timestep*20)*255)
waveline 0,640,i, Sin(timestep)*5, Cos(timestep)*20
Next
End Function
'---------------------------------
Type color
'---------------------------------
Field r:Int, g:Int, b:Int
Method SetmyColor(myr,myg,myb)
r=myr
g=myg
b=myb
End Method
Method randcolor()
r=Rand(100,255)
g=Rand(100,255)
b=Rand(100,255)
End Method
Method thiscolor()
SetColor r,g,b
End Method
End Type
'---------------------------------
Type proccritter
'---------------------------------
Field x, y, vx, vy, angle
Field primarycolor:color=New color
Field secondarycolor:color=New color
Method update()
End Method
Method draw()
End Method
End Type
'--------------------------------
Type proceduralpic Extends proccritter
'--------------------------------
Field grid[8,8]
Field myimage = CreateImage(32,32)
Method randcolors()
primarycolor.randcolor()
secondarycolor.randcolor()
End Method
Method initgrid()
For myx = 0 To 7
For myy = 0 To 7
grid[myx,myy]=0
Next
Next
For i = 1 To 25
xrand = Rand(0,3)
yrand = Rand(0,7)
celltype = Rand(2)
grid[xrand,yrand]=celltype
grid[7-xrand,yrand]=celltype
Next
Cls
For myy = 0 To 7
For myx = 0 To 7
SetColor(0,0,0)
If grid[myx, myy]=1
primarycolor.thiscolor()
Else If grid [myx, myy]=2
secondarycolor.thiscolor()
EndIf
DrawRect (100+myx*4), (100+myy*4), 3, 3
Next
Next
SetColor 255,255,255
GrabImage myimage,100,100
End Method
Method draw()
SetColor 150,150,150
DrawImage myimage, x+2,y+2
SetColor 255,255,255
DrawImage myimage, x, y
End Method
Method update()
End Method
End Type
|