Code: Select all
;-CONSTANTS
#SPRITECOUNT = 255 ; +1 because I will use id 0 too
#SPRITESIZE = 64
#SPRITEID = 1
#BGCOLOR = 8454016
#MAINWINDOW_H = 0
#WINDOWWIDTH = 1366
#WINDOWHEIGHT = 768
#SPEEDOFCARDS = 0.01
UsePNGImageDecoder()
;-STRUCTURES
Structure simplespritestructure
id.f
x.f
y.f
targetx.f
targety.f
EndStructure
;-GLOBALS
Global Dim spritelist.simplespritestructure(#SPRITECOUNT)
;-PROCEDURES
Procedure setupspritelist()
For x=0 To #SPRITECOUNT
With spritelist(x)
\id=#SPRITEID
\x=Random(#WINDOWWIDTH-#SPRITESIZE)
\y=Random(#WINDOWHEIGHT-#SPRITESIZE)
\targetx=Random(#WINDOWWIDTH-#SPRITESIZE)
\targety=Random(#WINDOWHEIGHT-#SPRITESIZE)
EndWith
Next x
EndProcedure
Procedure newtarget(x)
With spritelist(x)
\targetx=Random(#WINDOWWIDTH-#SPRITESIZE)
\targety=Random(#WINDOWHEIGHT-#SPRITESIZE)
EndWith
EndProcedure
Procedure drawspritelist()
For x=0 To #SPRITECOUNT
With spritelist(x)
DisplayTransparentSprite(\id,Round(\x,#PB_Round_Nearest),Round(\y,#PB_Round_Nearest))
EndWith
Next x
EndProcedure
Procedure updatespritelist()
For x=0 To #SPRITECOUNT
With spritelist(x)
\x.f=\x.f*(1-#SPEEDOFCARDS)+\targetx.f*#SPEEDOFCARDS
\y.f=\y.f*(1-#SPEEDOFCARDS)+\targety.f*#SPEEDOFCARDS
If Round(\x,#PB_Round_Nearest)=Round(\targetx,#PB_Round_Nearest) And Round(\y,#PB_Round_Nearest)=Round(\targety,#PB_Round_Nearest)
newtarget(x)
EndIf
EndWith
Next x
EndProcedure
;-MAINPROGRAM START
InitSprite()
InitKeyboard()
OpenWindow(#MAINWINDOW_H,0,0,#WINDOWWIDTH,#WINDOWHEIGHT,"moving sprites",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#MAINWINDOW_H),0,0,#WINDOWWIDTH,#WINDOWHEIGHT,1,0,0,#PB_Screen_WaitSynchronization)
CatchSprite(#SPRITEID,?cardpng,#PB_Sprite_AlphaBlending)
ZoomSprite(#SPRITEID,#SPRITESIZE,#SPRITESIZE)
setupspritelist()
;-MAINLOOP
Repeat
Repeat:Until Not WindowEvent()
ExamineKeyboard()
ClearScreen(#BGCOLOR)
updatespritelist()
drawspritelist()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
;-DATASECTIONS
DataSection
cardpng:
Data.a $89,$50,$4E,$47,$0D,$0A,$1A,$0A,$00,$00,$00,$0D,$49,$48,$44,$52,$00,$00,$00,$10,$00,$00,$00,$10,$08,$06,$00
Data.a $00,$00,$1F,$F3,$FF,$61,$00,$00,$00,$3C,$49,$44,$41,$54,$38,$CB,$63,$60,$40,$02,$8C,$8C,$8C,$FF,$89,$C1,$0C
Data.a $D8,$00,$48,$82,$58,$80,$61,$08,$29,$9A,$B1,$1A,$32,$6A,$00,$0D,$0C,$20,$C6,$40,$9C,$06,$C0,$D8,$84,$0C,$C1
Data.a $6B,$00,$0C,$0F,$8C,$0B,$06,$26,$16,$28,$CE,$4C,$94,$64,$67,$00,$DE,$8F,$A6,$1F,$B1,$D0,$29,$1D,$00,$00,$00
Data.a $00,$49,$45,$4E,$44,$AE,$42,$60,$82
EndDataSection
Code: Select all
;-CONSTANTS
#SPRITECOUNT = 25 ; +1 because I will use id 0 too
#SPRITESIZE = 64
#SPRITEID = 1
#MOUSESPRITEID = 2
#BGCOLOR = 8454016
#SELECTCOLOR = 8421631
#MAINWINDOW_H = 0
#WINDOWWIDTH = 1366
#WINDOWHEIGHT = 768
#SPEEDOFCARDS = 0.1
UsePNGImageDecoder()
;-STRUCTURES
Structure simplespritestructure
id.f
x.f
y.f
targetx.f
targety.f
EndStructure
;-GLOBALS
Global Dim spritelist.simplespritestructure(#SPRITECOUNT)
Global selectedcard = -1
;-PROCEDURES
Procedure setupspritelist()
For x=0 To #SPRITECOUNT
With spritelist(x)
\id=#SPRITEID
\x=Random(#WINDOWWIDTH-#SPRITESIZE)
\y=Random(#WINDOWHEIGHT-#SPRITESIZE)
\targetx=\x
\targety=\y
EndWith
Next x
EndProcedure
Procedure newtarget(x)
With spritelist(x)
\targetx=Random(#WINDOWWIDTH-#SPRITESIZE)
\targety=Random(#WINDOWHEIGHT-#SPRITESIZE)
EndWith
EndProcedure
Procedure drawspritelist()
For x=0 To #SPRITECOUNT
With spritelist(x)
DisplayTransparentSprite(\id,Round(\x,#PB_Round_Nearest),Round(\y,#PB_Round_Nearest))
If x = selectedcard
DisplayTransparentSprite(\id,Round(\x,#PB_Round_Nearest),Round(\y,#PB_Round_Nearest),128,#SELECTCOLOR)
EndIf
EndWith
Next x
EndProcedure
Procedure updatespritelist()
For x=0 To #SPRITECOUNT
With spritelist(x)
\x.f=\x.f*(1-#SPEEDOFCARDS)+\targetx.f*#SPEEDOFCARDS
\y.f=\y.f*(1-#SPEEDOFCARDS)+\targety.f*#SPEEDOFCARDS
If Round(\x,#PB_Round_Nearest)=Round(\targetx,#PB_Round_Nearest) And Round(\y,#PB_Round_Nearest)=Round(\targety,#PB_Round_Nearest)
;newtarget(x)
EndIf
EndWith
Next x
EndProcedure
Procedure updatemouse()
ExamineMouse()
If MouseButton(#PB_MouseButton_Left)
selectedcard=-1
For x = 0 To #SPRITECOUNT
With spritelist(x)
If MouseX()>\x And MouseX()<\x+#SPRITESIZE
If MouseY()>\y And MouseY()<\y+#SPRITESIZE
selectedcard=x
EndIf
EndIf
EndWith
Next x
EndIf
If MouseButton(#PB_MouseButton_Right)
If selectedcard<>-1
spritelist(selectedcard)\targetx = MouseX()-(#SPRITESIZE/2)
spritelist(selectedcard)\targety = MouseY()-(#SPRITESIZE/2)
selectedcard = -1
EndIf
EndIf
DisplayTransparentSprite(#MOUSESPRITEID,MouseX(),MouseY())
EndProcedure
;-MAINPROGRAM START
InitSprite()
InitKeyboard()
InitMouse()
OpenWindow(#MAINWINDOW_H,0,0,#WINDOWWIDTH,#WINDOWHEIGHT,"use mouse left and rightclick",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#MAINWINDOW_H),0,0,#WINDOWWIDTH,#WINDOWHEIGHT,1,0,0,#PB_Screen_WaitSynchronization)
CatchSprite(#MOUSESPRITEID,?mousepng,#PB_Sprite_AlphaBlending)
ZoomSprite(#MOUSESPRITEID,#SPRITESIZE,#SPRITESIZE)
CatchSprite(#SPRITEID,?cardpng,#PB_Sprite_AlphaBlending)
ZoomSprite(#SPRITEID,#SPRITESIZE,#SPRITESIZE)
setupspritelist()
;-MAINLOOP
Repeat
Repeat:Until Not WindowEvent()
ExamineKeyboard()
ClearScreen(#BGCOLOR)
updatespritelist()
drawspritelist()
updatemouse()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
;-DATASECTIONS
DataSection
cardpng:
Data.a $89,$50,$4E,$47,$0D,$0A,$1A,$0A,$00,$00,$00,$0D,$49,$48,$44,$52,$00,$00,$00,$10,$00,$00,$00,$10,$08,$06,$00
Data.a $00,$00,$1F,$F3,$FF,$61,$00,$00,$00,$3C,$49,$44,$41,$54,$38,$CB,$63,$60,$40,$02,$8C,$8C,$8C,$FF,$89,$C1,$0C
Data.a $D8,$00,$48,$82,$58,$80,$61,$08,$29,$9A,$B1,$1A,$32,$6A,$00,$0D,$0C,$20,$C6,$40,$9C,$06,$C0,$D8,$84,$0C,$C1
Data.a $6B,$00,$0C,$0F,$8C,$0B,$06,$26,$16,$28,$CE,$4C,$94,$64,$67,$00,$DE,$8F,$A6,$1F,$B1,$D0,$29,$1D,$00,$00,$00
Data.a $00,$49,$45,$4E,$44,$AE,$42,$60,$82
EndDataSection
DataSection
mousepng:
Data.a $89,$50,$4E,$47,$0D,$0A,$1A,$0A,$00,$00,$00,$0D,$49,$48,$44,$52,$00,$00,$00,$10,$00,$00,$00,$10,$08,$06,$00
Data.a $00,$00,$1F,$F3,$FF,$61,$00,$00,$00,$3E,$49,$44,$41,$54,$38,$CB,$63,$60,$64,$64,$FC,$0F,$C2,$0C,$E4,$02,$90
Data.a $66,$10,$20,$DB,$10,$AA,$19,$40,$B6,$21,$C8,$06,$90,$65,$08,$D5,$0D,$20,$D9,$10,$9A,$18,$40,$92,$21,$B0,$84
Data.a $84,$1C,$9D,$64,$25,$2E,$AA,$A4,$87,$C1,$91,$2A,$29,$CE,$5C,$74,$07,$00,$61,$2F,$8D,$D9,$D0,$48,$39,$69,$00
Data.a $00,$00,$00,$49,$45,$4E,$44,$AE,$42,$60,$82
EndDataSection