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