wmove
10 REMark This method only works with rectangular sprites: No transparency
11 :
12 REMark Init window
13 ch = FOPEN(#0; "con_")
14 wsx% = SCR_XLIM(#ch): wsy% = SCR_YLIM(#ch)
15 :
16 sprite = 0: REMark Load sprite = 1/Draw = 0
17 RANDOMISE DATE
18 :
19 REMark Load some sprite or draw something
20 IF sprite THEN
21 spr = SprLoad("win4_spr_card_King_spr")
22 sx% = PEEK_W(spr + 4): REMark Get size
23 sy% = PEEK_W(spr + 6)
24 ELSE
25 sx% = 100: REMark Set size
26 sy% = 100
27 END IF
28 :
29 xmx% = wsx% - sx%: REMark Work out limits
30 ymx% = wsy% - sy%
31 cx% = RND(sx% TO xmx% - sx%): REMark Start somewhere
32 cy% = RND(sy% TO ymx% - sy%)
33 dx% = -1: dy% = 1: s% = 2: REMark Initial direction and speed
34 :
35 OUTL#ch; sx%, sy%, cx%, cy%
36 :
37 REMark Draw sprite/something
38 IF sprite THEN
39 SPRW#ch; 0, 0, spr
40 ELSE
41 PAPER#ch; 1: CLS#ch
42 FILL#ch; 1: INK#ch; 7: CIRCLE#ch; 50, 50, 48: FILL#ch; 0
43 FILL#ch; 1: INK#ch; 2: LINE 10,30 TO 50,96 TO 92,30 TO 10,30: FILL#ch; 0
44 END IF
45 :
46 REMark Lets roll!
47 REPeat bounce
48 REMark Move
49 IF dx% > 0 THEN
50 cx% = cx% + s%
51 IF cx% > xmx%: dx% = -1: NEXT bounce
52 ELSE
53 cx% = cx% - s%
54 IF cx% < 0: dx% = 1: NEXT bounce
55 END IF
56 :
57 IF dy% > 0 THEN
58 cy% = cy% + s%
59 IF cy% > ymx%: dy% = -1: NEXT bounce
60 ELSE
61 cy% = cy% - s%
62 IF cy% < 0: dy% = 1: NEXT bounce
63 END IF
64 :
65 OUTL#ch; sx%, sy%, cx%, cy%: REMark Thats it! Move
66 :
67 REMark User interaction
68 k% = CODE(INKEY$(#ch; 1))
69 SELect ON k%
70 = 27: EXIT bounce
71 = 32: BGET#ch; k%: IF k% = 27: EXIT bounce
72 = 208: REMark Cursor up => faster
73 s% = s% + 1: IF s% > 9: s% = 9: BEEP 1000, 2
74 = 216: REMark Curso down => slower
75 s% = s% - 1: IF s% = 0: s% = 1: BEEP 1000, 2
76 END SELect
77 END REPeat bounce
78 QUIT
79 :
80 :
Generated with sb2htm on 2019 Mar 31
©pjwitte March 2oi9
QL Software
