1 /* Sample for the putsprite command.
2 We draw some garbage on the screen,
3 then we put a masked arrow.
4 It can be moved using arrows; ENTER exits.
5 Improved version; the mask is drawn AFTER the sprite,
6 so we reduce the flicker, and being the mask just "a border",
7 it is put faster. */
8
9 #pragma string name Sprite/Mouse test
10 #pragma output nostreams
11 #pragma data icon 0x00,0x60,0x70,0x78,0x7C,0x18,0x0C,0x00;
12
13 #include <stdio.h>
14 #include <games.h>
15
16 #if defined __TI82__ || defined __TI83__ || defined __TI8x__
17 #define SCREENX 96
18 #define SCREENY 64
19 #endif
20
21 #if defined __TI85__ || defined __TI86__
22 #define SCREENX 128
23 #define SCREENY 64
24 #endif
25
26 char bullet[] =
27 { 11,3,
28 0xE0, 0xE0, /* defb @11100000, @11100000 */
29 0xBF, 0xA0, /* defb @10111111, @10100000 */
30 0xE0, 0xE0 /* defb @11100000, @11100000 */
31 };
32
33 char arrow[] =
34 { 8,8,
35 0x00, /* defb @00000000 */
36 0x60, /* defb @01100000 */
37 0x70, /* defb @01110000 */
38 0x78, /* defb @01111000 */
39 0x7C, /* defb @01111100 */
40 0x18, /* defb @00011000 */
41 0x0C, /* defb @00001100 */
42 0x00 /* defb @00000000 */
43 };
44
45 char arrow_mask[] =
46 { 8,8,
47 0xE0, /* defb @11100000 */
48 0x90, /* defb @10010000 */
49 0x88, /* defb @10001000 */
50 0x84, /* defb @10000100 */
51 0x82, /* defb @10000010 */
52 0xE6, /* defb @11100110 */
53 0x12, /* defb @00010010 */
54 0x1E /* defb @00011110 */
55 };
56
57 char arrow_bk[] =
58 { 8,8,
59 0,0,
60 0,0,0,0,0,0,0,0,
61 0,0,0,0,0,0,0,0
62 };
63
main()64 main()
65 {
66 int x,y,z;
67 int flag = 1;
68 int speed = 1;
69 char *ptr;
70 for (x=10; x<39; x+=3)
71 {
72 putsprite(spr_or,2*x ,x,bullet);
73 putsprite(spr_or,2*x-10,x,bullet);
74 putsprite(spr_or,2*x+10,x,bullet);
75 }
76
77 x=40;
78 y=20;
79
80 bksave(x,y,arrow_bk);
81
82 while(flag!=2)
83 {
84 switch(getk())
85 {
86 case 11: /* arrow up */
87 y-=speed;
88 flag=1;
89 break;
90 case 10: /* arrow down */
91 y+=speed;
92 flag=1;
93 break;
94 case 9: /* arrow right */
95 x+=speed;
96 flag=1;
97 break;
98 case 8: /* arrow left */
99 x-=speed;
100 flag=1;
101 break;
102 case 13: /* [Enter] */
103 flag=2;
104 break;
105 default: /* reset speed */
106 speed=1;
107 break;
108 }
109 if(x<0) x=0;
110 if(y<0) y=0;
111 if(x>(SCREENX-8)) x=(SCREENX-8);
112 if(y>(SCREENY-8)) y=(SCREENY-8);
113 if(flag==1)
114 {
115 if(speed<3)
116 speed++;
117
118 bkrestore(arrow_bk);
119 bksave(x,y,arrow_bk);
120 putsprite(spr_or,x,y,arrow);
121 putsprite(spr_mask,x,y,arrow_mask);
122 flag = 0;
123 }
124 }
125 }
126