This program will give a general idea of what sprites are and how they can be used.
Content
Source Code
10 REM SPRITE DEMO
20 BORDER 0: INK 7: PAPER 0: CLS
30 RANDOMIZE USR 65112: REM OPEN SPRITE
35 LET a=62414: LET b=65236
36 POKE b,a-256*INT (a/256): POKE b+1,INT (a/256)
40 FOR I=1 TO 7: FOR X=1 TO 6: PRINT #3;CHR$ 16;CHR$ I;AT 5,4+X*2;CHR$ X;: NEXT X: NEXT I
50 FOR I=1 TO 6: FOR X=7 TO 10: PRINT #3;CHR$ 16;CHR$ I;AT 9,X*3-6;CHR$ X;
60 PRINT AT 15,4; INK I;"WRITTEN BY ERIC BOISVERT";AT 17,3;"COPYRIGHT ©1987 BYTE POWER"
70 NEXT X: NEXT I
80 PAUSE 300: CLS
90 REM MAIN
100 GO SUB 1000
110 FOR X=32 TO 15 STEP -1
120 PRINT #3;AT 10,X;CHR$ 16;: PAUSE 5: PRINT #3;AT 10,X;CHR$ 15;: PAUSE 5: NEXT X
130 LET cx=16: LET cy=0: PRINT #3;AT 10,15;CHR$ 14: PAUSE 60: LET bx=6: LET by=17
140 LET S$="Hi, I'm Eric, your host for the next few minutes...": GO SUB 1020
150 LET S$="I wrote this demo program to show you how to use the SPRITE utility...": GO SUB 1020
160 FOR X=15 TO 2 STEP -1
170 PRINT #3;AT 10,X;CHR$ 16;: PAUSE 5: PRINT #3;AT 10,X;CHR$ 15;: PAUSE 5: NEXT X
180 PRINT #3;AT 10,2;CHR$ 14;: LET by=4
190 LET s$="First I would like to define what a SPRITE is.": GO SUB 1020
200 LET s$="A sprite is simply a graphic like a UDG but it can be much bigger...I am a perfect example of sprite and so is this..."
210 GO SUB 1020
220 REM TRAIN DEMO
230 GO SUB 1000: PLOT 0,130: DRAW 255,10
240 PRINT #3;AT 3,4;CHR$ 31;#3;AT 2,27;CHR$ 31;#3;AT 7,5;CHR$ 32;#3;AT 8,27;CHR$ 32;
250 FOR x=0 TO 31 STEP 4: PRINT #3;CHR$ 17;CHR$ 4;AT 14,x;CHR$ 30;: NEXT x
260 FOR t=1 TO 3: FOR x=32 TO -15 STEP -1: POKE 23681,x: PRINT #3;CHR$ 16;CHR$ 2;AT 12,PEEK 23681;CHR$ 29;: PAUSE 5: IF x=10 THEN PAUSE 60
270 IF t=3 AND x=1 THEN GO TO 290
280 NEXT x: NEXT t
290 FOR X=32 TO 16 STEP -1
300 PRINT #3;AT 11,X;CHR$ 16;: PAUSE 5: PRINT #3;AT 11,X;CHR$ 15;: PAUSE 5: NEXT X
310 PRINT #3;AT 11,16;CHR$ 14;: LET bx=7: LET by=18
320 LET s$="Hi again... As you may already have noticed, this image was mostly formed with sprites of different size, color, and shape...": GO SUB 1020
330 OVER 1: FOR x=1 TO 10: PRINT #3;AT 7,8;CHR$ 12;#3;AT 3,6;CHR$ 12;#3;AT 12,13;CHR$ 12;#3;AT 12,18;CHR$ 12;: PAUSE 10
340 PRINT #3;AT 7,8;CHR$ 12;#3;AT 3,6;CHR$ 12;#3;AT 12,13;CHR$ 12;#3;AT 12,18;CHR$ 12;: PAUSE 10: NEXT x: OVER 0
350 LET s$="Yes, even me!": GO SUB 1020
360 LET s$="Now that you have a good idea of what is a sprite...Watch the next few examples...": GO SUB 1020
370 PAUSE 180
380 REM AQUARIUM DEMO
390 PAPER 0: INK 7: CLS
400 POKE 23560,0: POKE 23672,0: POKE 23673,0
410 FOR X=1 TO 5: PRINT #3;CHR$ 16;CHR$ 4;AT 18,X*5;CHR$ 24;: NEXT X
420 DIM F(3,5): PRINT AT 21,0; PAPER 4;TAB 6;"AQUARIUM SIMULATION",
430 RESTORE 440: FOR Y=1 TO 3: FOR X=1 TO 5: READ F(Y,X): NEXT X: NEXT Y
440 DATA 20,8,4,1,4,21,14,3,-1,27,23,3,6,1,26
450 FOR X=1 TO 3: IF F(X,4)<>0 THEN GO TO 470
460 LET F(X,1)=INT (RND*4)+20: LET F(X,2)=5+INT (RND*10): LET F(X,3)=INT (RND*4)+4: LET F(X,4)=1: LET F(X,5)=-5: IF F(X,1)=21 OR F(X,1)=22 THEN LET F(X,5)=32: LET F(X,4)=-1
470 POKE 23681,F(X,5): PRINT #3;CHR$ 16;CHR$ F(X,3);AT F(X,2),PEEK 23681;CHR$ F(X,1);
480 LET F(X,5)=F(X,5)+F(X,4): IF F(X,5)>31 OR F(X,5)<-4 THEN LET F(X,4)=0
490 IF PEEK 23673<10 AND PEEK 23560=0 THEN NEXT X: GO TO 450
500 REM BOXING SIMULATION
510 POKE 23560,0: CLS
520 PRINT PAPER 6; INK 0;AT 2,7;TAB 24;AT 3,7;" LE BOXING MATCH ";AT 4,7;TAB 24;
530 PRINT AT 20,0; PAPER 4;TAB 5;"BOXING MATCH SIMULATION",
540 PRINT AT 12,4; INK 2;"▗";AT 12,27;"▖": FOR X=13 TO 16: PRINT AT X,4; INK 3;"▐";AT X,27;"▌": NEXT X: PRINT AT 17,4; PAPER 2;TAB 28;
550 FOR X=1 TO 8
560 PRINT #3;AT 11,13;CHR$ 25;#3;AT 11,16;CHR$ 27;: PAUSE 1+INT (RND*45)
570 FOR T=1 TO 10
580 PRINT #3;AT 11,13;CHR$ 26;#3;AT 11,15;CHR$ 28;: PAUSE 5: PRINT #3;AT 11,13;CHR$ 25;#3;AT 11,16;CHR$ 27;: PAUSE 5: NEXT T
590 IF X=1 THEN PRINT AT 21,0; PAPER 5; FLASH 1;TAB 9;"WELL ALMOST...",
600 IF PEEK 23560=0 THEN NEXT X: PAUSE 60
610 REM GO ON...
620 CLS : GO SUB 1000
630 FOR X=1 TO 50: PRINT #3;AT 10,15;CHR$ 33;#3;AT 10,15;CHR$ 14;: NEXT X
640 FOR X=1 TO 50: FOR Y=16 TO 14 STEP -2: PRINT #3;AT 10,15;CHR$ Y;: NEXT Y: NEXT X
650 LET cx=16: LET bx=6: LET S$="Gee Wiz, appearing from nowhere is tougher than I thought...": GO SUB 1020
660 LET I=0: FOR x=1 TO 10: PRINT #3;CHR$ 16;CHR$ I;AT 2,x*3-2;CHR$ x;: LET I=I+1: IF I=5 THEN LET I=0
670 NEXT X
680 LET s$="Sprites can be printed INVERSE, FLASH, BRIGHT, OVER and in any COLORS...": GO SUB 1020
690 LET s$="The sprite utility uses a normal PRINT #3 function so it should be fairly easy to learn.": GO SUB 1020
700 LET s$="A typical example is... PRINT #3;AT 10,10;CHR$ 1": GO SUB 1020
710 LET s$="This would print at position 10,10 the sprite no. 1": GO SUB 1020
720 LET s$="You can also limit the printing area by poking the maximum positions possible, lets see an example...": GO SUB 1020
730 PRINT AT 5,8; PAPER 5;TAB 24: FOR x=6 TO 13: PRINT AT x,8; PAPER 5;" ";AT x,23;" ": NEXT x: PRINT AT x,7; PAPER 4;TAB 25
740 POKE 65286,9: POKE 65292,23
750 FOR X=15 TO 5 STEP -1
760 PRINT #3;AT 10,X;CHR$ 16;: PAUSE 5: PRINT #3;AT 10,X;CHR$ 15;: PAUSE 5: NEXT X
770 LET i=2: FOR X=23 TO 5 STEP -1
780 PRINT #3;CHR$ 16;CHR$ i;AT 9,x;CHR$ 19;: PAUSE 5
790 PRINT #3;CHR$ 16;CHR$ i;AT 9,x;CHR$ 18;: PAUSE 5: LET i=i+1: IF i=6 THEN LET i=0
800 NEXT x
810 FOR X=23 TO 13 STEP -1
820 PRINT #3;AT 11,X;CHR$ 16;: PAUSE 5: PRINT #3;AT 11,X;CHR$ 15;: PAUSE 5: NEXT X: LET bx=7: LET by=15
830 LET s$="You can do the same for the top and the bottom...": GO SUB 1030
840 POKE 65298,6: POKE 65304,14
850 FOR x=1 TO 3: PRINT #3;AT 3+x,11;CHR$ 14;#3;AT 14-x,19;CHR$ 14;: PAUSE 10: NEXT x
860 FOR x=3 TO 0 STEP -1: PRINT #3;AT 3+x,11;CHR$ 14;#3;AT 14-x,19;CHR$ 14;AT 6+x,11;" ";AT 13-x,19;" ": PAUSE 10: NEXT x
870 POKE 65298,0: GO SUB 1000
880 PRINT #3;AT 255,15;CHR$ 17;#3;AT 10,15;CHR$ 14;
890 PAUSE 60: LET bx=6: LET by=17: LET s$="Oh! Oh! What's that on the ceiling?": GO SUB 1020: PAUSE 50
900 FOR x=0 TO 10: PRINT #3;AT x,15;CHR$ 17;: NEXT x
910 FOR x=6 TO 0 STEP -1: PRINT #3;CHR$ 16;CHR$ x;AT 5,15;CHR$ 13;: PAUSE 5: NEXT x
920 FOR x=1 TO 20: PRINT #3;CHR$ 21;CHR$ 1;AT 5,15;CHR$ 13;: PAUSE 10: NEXT x
930 FOR X=32 TO 18 STEP -1
940 PRINT #3;AT 10,X;CHR$ 16;: PAUSE 5: PRINT #3;AT 10,X;CHR$ 15;: PAUSE 5: NEXT X
950 PRINT #3;AT 10,18;CHR$ 14;: LET bx=6: LET by=20
960 LET i=6: LET S$="That was just a joke! I'm safe and sound back at BYTE POWER's headquarters... See you next month!": GO SUB 1020: POKE 23560,0
970 PRINT #3;CHR$ 16;CHR$ INT i;AT 5,15;CHR$ 13;: LET i=i-1: IF i=0 THEN LET i=6
980 IF PEEK 23560=0 THEN GO TO 970
990 STOP
1000 REM WINDOW
1010 FOR X=0 TO 14: PRINT AT x,0; PAPER 7; INK 0,,: NEXT X: PAPER 7: INK 0: RETURN
1020 REM SAY SOMETHING!
1030 POKE 65286,0: POKE 65292,32: POKE 65298,0: POKE 65304,22
1040 PRINT #3;CHR$ 21;CHR$ 1;AT BX-1,BY-1;CHR$ 11;
1050 PRINT #1;AT 1,0; INK 0; PAPER 8,,
1060 LET s$=" "+s$+" "
1070 FOR x=1 TO LEN s$-7: PRINT AT bx,by;s$(x TO x+6);: PRINT INK 8; PAPER 8;AT cx,cy;s$(x+7);: LET cy=cy+1: IF cy=32 THEN LET cy=0: LET cx=cx+1: IF cx>21 THEN LET cx=21: RANDOMIZE USR 65370: PRINT #1;AT 1,0; INK 0; PAPER 8,,
1080 PAUSE 5: NEXT X: LET CY=0: LET CX=CX+1: IF SCREEN$ (CX-1,CY)<>" " THEN LET CX=CX+1
1090 LET CY=0: IF CX>21 THEN LET CX=CX-1: RANDOMIZE USR 65370: PRINT #1;AT 1,0; INK 0; PAPER 8,,: GO TO 1090
1100 PRINT #3;CHR$ 21;CHR$ 1;AT BX-1,BY-1;CHR$ 11;
1110 PAUSE 30: RETURN
9998 CLEAR 62000: LOAD "DEMO CODE"CODE : RUN
9999 SAVE "DEMO" LINE 9998: SAVE "DEMO CODE"CODE 62414,2978