Hi!
This is my first program!
It shows something like a machine.
It is not quite correct, but it works.
Some remarks:
Mouse controlled
Realtime calculation (no look-up tables)
Graphics of Playbasic (no extern graphics to load)
"Aquarium-Effect" by using alpha-blending (SpriteAlphaLevel)
Rotation-speed goes from 1 - 12 (degrees)
Greetings
stef
[pbcode]
; PROJECT : motor-engine 001
; AUTHOR : stef
; CREATED : 26.10.2005
; EDITED : 31.10.2005
; ---------------------------------------------------------------------
RemStart
Demo
This program shows something like a machine
Some remarks:
Mouse controlled
Realtime calculation (no look-up tables)
Graphics of Playbasic (no extern graphics to load)
"Aquarium-Effect" by using alpha-blending (SpriteAlphaLevel)
Rotation-speed goes from 1 - 12 (degrees)
RemEnd
;GRAPHICS
;cylinder housing back
cyl_back_image=GetFreeImage()
CreateImage cyl_back_image,100,160
RenderToImage cyl_back_image
For x=0 To 49
BoxC 0+x,0,100-x,160,1,RGB(3*x,3*x,3*x)
Next x
BoxC 0,0,10,160,1,RGB(20,20,20)
BoxC 90,0,100,160,1,RGB(20,20,20)
BoxC 0,0,100,10,1,RGB(20,20,20)
PrepareFXImage cyl_back_image
cyl_back_sprite=GetFreeSprite()
CreateSprite cyl_back_sprite
SpriteImage cyl_back_sprite,cyl_back_image
SpriteDrawMode cyl_back_sprite,2
;cylinder housing front
cyl_front_image=GetFreeImage()
CreateImage cyl_front_image,100,160
RenderToImage cyl_front_image
For x=0 To 49
BoxC 0+x,0,100-x,160,1,RGB(30+3*x,30+3*x,30+3*x)
Next x
For x=0 To 49
BoxC 0+x,0,100-x,10,1,RGB(3*x,3*x,3*x)
Next x
PrepareFXImage cyl_front_image
cyl_front_sprite=GetFreeSprite()
CreateSprite cyl_front_sprite
SpriteImage cyl_front_sprite,cyl_front_image
SpriteDrawMode cyl_front_sprite,2+4
;piston
piston_image=GetFreeImage()
CreateImage piston_image,80,70
RenderToImage piston_image
BoxC 30,0,50,50,1,RGB(40,40,40)
CircleC 40,50,12,1,RGB(40,40,40)
CircleC 40,50,8,1,RGB(30,30,50)
For x=0 To 39
BoxC 0+x,0,80-x,30,1,RGB(3*x,3*x,3*x)
Next x
PrepareFXImage piston_image
piston_sprite=GetFreeSprite()
CreateSprite piston_sprite
SpriteImage piston_sprite,piston_image
SpriteDrawMode piston_sprite,2
;"pressure"
pressure_image=GetFreeImage()
CreateImage pressure_image,79,160
RenderToImage pressure_image
BoxC 0,0,80,60,1,RGB(250,0,0)
PrepareFXImage pressure_image
pressure_sprite=GetFreeSprite()
CreateSprite pressure_sprite
SpriteImage pressure_sprite,pressure_image
SpriteDrawMode pressure_sprite,2+1024
;flywheel
flywheel_image=GetFreeImage()
CreateImage flywheel_image,200,200
RenderToImage flywheel_image
CircleC 100,100,100,1,RGB(40,40,40)
CircleC 100,100,90,1,RGB(80,80,80)
CircleC 140,60,25,1,0
CircleC 140,140,25,1,0
CircleC 60,60,25,1,0
CircleC 60,140,25,1,0
CircleC 100,100,25,1,RGB(50,50,50)
CircleC 100,100,8,1,RGB(30,30,30)
PrepareFXImage flywheel_image
flywheel_sprite=GetFreeSprite()
CreateSprite flywheel_sprite
SpriteImage flywheel_sprite,flywheel_image
SpriteDrawMode flywheel_sprite,2
CenterSpriteHandle flywheel_sprite
;rod
rod_image=GetFreeImage()
CreateImage rod_image,205,21
RenderToImage rod_image
BoxC 14,6,191,14,1,RGB (150,20,20)
CircleC 10,10,10,1,RGB (150,20,20)
CircleC 191,10,10,1,RGB (150,20,20)
CircleC 10,10,6,1,RGB (30,30,30)
CircleC 191,10,6,1,RGB (30,30,30)
PrepareFXImage rod_image
rod_sprite=GetFreeSprite()
CreateSprite rod_sprite
SpriteImage rod_sprite,rod_image
SpriteDrawMode rod_sprite,2
SpriteHandle rod_sprite,-10,-10
;startbutton
startbutton_image=GetFreeImage()
CreateImage startbutton_image, 50,50
RenderToImage startbutton_image
CircleC 25,25,24,1,RGB (0,200,0)
CenterText 25,20,"START"
PrepareFXImage startbutton_image
startbutton_sprite=GetFreeSprite()
CreateSprite startbutton_sprite
SpriteImage startbutton_sprite,startbutton_image
SpriteDrawMode startbutton_sprite,2
;stopbutton
stopbutton_image=GetFreeImage()
CreateImage stopbutton_image, 50,50
RenderToImage stopbutton_image
CircleC 25,25,24,1,RGB (200,0,0)
CenterText 25,20,"STOP"
PrepareFXImage stopbutton_image
stopbutton_sprite=GetFreeSprite()
CreateSprite stopbutton_sprite
SpriteImage stopbutton_sprite,stopbutton_image
SpriteDrawMode stopbutton_sprite,2
;acceleratebutton
accelerate_image=GetFreeImage()
CreateImage accelerate_image, 50,50
RenderToImage accelerate_image
TriC 0,50,50,50,25,0,RGB (0,200,0,)
CenterText 25,25,"+"
PrepareFXImage accelerate_image
accelerate_sprite=GetFreeSprite()
CreateSprite accelerate_sprite
SpriteImage accelerate_sprite,accelerate_image
SpriteDrawMode accelerate_sprite,2
;breakbutton
break_image=GetFreeImage()
CreateImage break_image, 50,50
RenderToImage break_image
TriC 0,0,50,0,25,50,RGB (200,0,0,)
CenterText 25,10,"-"
PrepareFXImage break_image
break_sprite=GetFreeSprite()
CreateSprite break_sprite
SpriteImage break_sprite,break_image
SpriteDrawMode break_sprite,2
;colouredtriangle
colour_image=GetFreeImage()
CreateImage colour_image,200,200
RenderToImage colour_image
TriC 100,100,200,100, CosNewValue(100,120,100),SinNewValue(100,120,100),RGB(200,200,0)
TriC 100,100,200,100, CosNewValue(100,-120,100),SinNewValue(100,-120,100),RGB(200,0,200)
TriC 100,100,CosNewValue(100,120,100),SinNewValue(100,120,100),CosNewValue(100,-120,100),SinNewValue(100,-120,100),RGB(0,200,200)
PrepareFXImage colour_image
colour_sprite=GetFreeSprite()
CreateSprite colour_sprite
SpriteImage colour_sprite,colour_image
SpriteDrawMode colour_sprite,2
CenterSpriteHandle colour_sprite
;transmission
transmission_image=GetFreeImage()
CreateImage transmission_image,350,50
RenderToImage transmission_image
LineC 25,5,325,45,RGB(30,30,30)
LineC 25,45,325,5,RGB(30,30,30)
CircleC 25,25,25,1,RGB(50,50,50)
CircleC 25,25,8,1,RGB(30,30,30)
CircleC 325,25,25,1,RGB(50,50,50)
CircleC 325,25,8,1,RGB(30,30,30)
PrepareFXImage transmission_image
transmission_sprite=GetFreeSprite()
CreateSprite transmission_sprite
SpriteImage transmission_sprite,transmission_image
SpriteDrawMode transmission_sprite,0
CenterSpriteHandle transmission_sprite
angle=0
speed=0
AlphaLevel#=1.0
corr#=0.2
stop=1
start=0
;MAINLOOP
Do
angle_old=angle
angle= WrapAngle (angle,speed)
sin_angle#=Sin (angle)
cos_angle#=Cos (angle)
PositionSpriteXYZ stopbutton_sprite, 30,50,stop
PositionSpriteXYZ startbutton_sprite, 30,50,start
PositionSpriteXYZ accelerate_sprite, 30,120,300
PositionSpriteXYZ break_sprite, 30,200,300
If PointHitSprite (MouseX(),MouseY(),startbutton_sprite) And LeftMouseButton()=True
If speed = 0
speed=1
start=1
stop=0
Else
start=0
stop=1
EndIf
EndIf
If PointHitSprite (MouseX(),MouseY(),accelerate_sprite) And LeftMouseButton()=True
If stop= 0 Then speed =speed+1
If speed =12 Then speed =12
EndIf
If PointHitSprite (MouseX(),MouseY(),break_sprite) And LeftMouseButton()=True
If stop= 0 Then speed =speed-1
If speed <=1 And start=1 Then speed =1
EndIf
If stop=1 And angle < angle_old Then speed =0
FlushMouse
;gives the "aquariumeffect" of the cylinder
If PointHitSprite (MouseX(),MouseY(),cyl_front_sprite) =True
alphalevel#=alphalevel#-corr#
If alphalevel#<=0 Then alphalevel#=0
Else alphalevel#=alphalevel#+corr#
If alphalevel#>=1 Then alphalevel#=1
EndIf
SpriteAlphaLevel cyl_front_sprite,alphalevel#
PositionSpriteXYZ cyl_back_sprite, 150,110,300
PositionSpriteXYZ cyl_front_sprite, 150,110,100
RotateSprite flywheel_sprite,angle
PositionSpriteXYZ flywheel_sprite, 200,406,300
PositionSpriteXYZ piston_sprite, 160,180+(sin_angle#*50),200
;representation of pressure
ScaleSpriteY pressure_sprite, sin_angle# +1.2
;this is not really correct,but it is sufficient.
If (angle>250 And angle < 270) Then col = 255
SpriteFlashColour pressure_sprite, RGB (255,col,0)
PositionSpriteXYZ pressure_sprite, 161,120,210
If cos_angle# < 0 Then PositionSpriteXYZ pressure_sprite, 161,120,310
col = col + speed
;movement of rod
rod_angle#= GetAngle2D (0,-185,cos_angle#*50,0)
RotateSprite rod_sprite,rod_angle#
PositionSpriteXYZ rod_sprite, 200,232+(sin_angle#*50) ,150
RotateSprite colour_sprite,-angle
PositionSpriteXYZ colour_sprite, 500,406 ,10
PositionSpriteXYZ transmission_sprite, 350,406 ,400
Cls 100
RenderToScreen
DrawOrderedSprites
Sync
If EscKey()= True Then End
Loop
[/pbcode]
Stef,
That is simply Excellent... I'm actually stunned!
Where did you get the idea for that from ?
indeed, that's awesome (idea & realisation)!
very cool piston there
Hi!
Thanks for response.
Just working on another demo named "fireworks" and thinking about creating a game. Title: "Cool Sliding" . Maybe a funracer.
But must still study examples and commands.
Btw.: Have just purchased PlayBasic.
Greetings
stef
Hi!
Fixed a bug in the code above.
The "Transmission" wasn't shown.
Wrong value of SpriteDrawMode!
Should work now correctly.
Sorry
stef
Hello,
It really is a fantastic demo. Nice work.
Have a nice day,
Tomaz