"Decathlon" for Sharp PC-1500 + CE-150
 Sharpentiers.
Author : Maurice Choucroun
Published in "La revue des Sharpentiers" #11, 1985.
BASIC program - 7550 bytes.

----- BASIC program -----------------------------------------
1 "DECATHLON"
2 "Sharpentier no 11"
10 GOSUB 61E3:BEEP 2,75,200:D=4:RANDOM :DIM A$(7),B$(1)*24:A$="000068241F6444"
15 WAIT 0:CLS :CURSOR 3:PAUSE "*** 100 METRES ***":CLS 
16 PAUSE "(4) et (6) pour avancer...":WAIT :PRINT :WAIT 0:CLS 
20 GCURSOR 124:GPRINT 127:GCURSOR 0:GPRINT A$:GCURSOR 128:PAUSE "PRET!"
22 GCURSOR 128:PRINT "     "
25 FOR I=100TO 0STEP -1:GCURSOR 128:PRINT I:NEXT I:BEEP 2,9:TIME =0:GCURSOR 128
30 IF INKEY$ ="4"LET H=1
40 IF INKEY$ ="6"AND HLET H=0,K=K+2:GCURSOR K:GPRINT A$:IF K>118GOTO 60
50 GOTO 30
60 S=40-TIME *2E4:BEEP 1:CLS :CURSOR 5:PAUSE "Temps ";TIME *1E4;" secondes":PAUSE 
70 GOSUB 6E4:PAUSE :GCURSOR 8:BEEP 2:PAUSE "*** SAUT EN HAUTEUR ***":CLS 
71 WAIT :PRINT "(ENTER) pour s[A2]elancer":WAIT 0:CLS 
72 G=1:WAIT 1:B$="7800606060606060"
75 FOR J=1TO 3:CLS :CURSOR 19:PAUSE "PRET!":PAUSE :CURSOR 19:PRINT "GO!  ":BEEP 1
80 GCURSOR 0:GPRINT A$:GCURSOR 100:GPRINT B$
90 FOR I=1TO 95STEP 2:GCURSOR I:GPRINT A$;:IF INKEY$ =CHR$ 13BEEP 1:GOTO 100
92 NEXT I
95 BEEP 3,80:CURSOR 19:PAUSE "SPLAT "+STR$ J:PAUSE :NEXT J:GOTO 200
100 I=I+6:ON GGOTO 110,120,130
110 IF I<95OR I>99GOTO 95
112 GOSUB 160:B$="7C00606060606060":GOTO 75
120 IF I<>97AND I<>99GOTO 95
122 GOSUB 160:B$="7E00606060606060":GOTO 75
130 IF I<>99GOTO 95
132 GOSUB 160:GOTO 200
160 GCURSOR 90:GPRINT "000000000000"
165 WAIT 50:GCURSOR 96:GPRINT "080E320A7E0767676A6868":GCURSOR 96:GPRINT "0000000078127468787A7C68":WAIT 1
170 BEEP 3,5:CURSOR 0:PAUSE "BRAVO!!":PAUSE :G=G+1:RETURN 
200 IF G=2LET S=S+7
201 IF G=3LET S=S+14
202 IF G=4LET S=S+20
205 GOSUB 6E4:A$(0)="00000000067E",A$(1)="0000060E3040",A$(2)="00060E102040"
206 A$(3)="060608102040",A$(4)="0C0C10202040",A$(5)="303020404040"
207 WAIT 0:BEEP 2:A$(6)="606040404040":CLS :CURSOR 1:PAUSE "*** LANCER DU POIDS ***":PAUSE 
208 PRINT "(4) pour";:GPRINT I$;:PRINT " et (8) pour";:WAIT :GPRINT F$:CLS :WAIT 0
210 CLS :GCURSOR 108:GPRINT "442A1B112E40"
212 G=0:FOR I=0TO 95STEP 5:GCURSOR I:GPRINT 127:NEXT I
215 TIME =0:BEEP 1:GCURSOR 100:GPRINT A$(0)
220 IF INKEY$ ="4"LET G=G+1:IF G>6LET G=6
230 IF INKEY$ ="8"LET G=G-1:IF G<0LET G=0
240 GCURSOR 100:GPRINT A$(G):IF TIME <>.0002GOTO 220
255 BEEP 1:G=2'G:IF G=1LET H=80
256 IF G=2LET H=40
257 IF G=4LET H=10
258 IF G=8LET H=20
259 IF G=16LET H=30
260 IF G=32LET H=40
261 IF G=64LET H=80
262 K=H-RND 10:FOR I=98TO KSTEP -1:GCURSOR I:IF POINT I=127LET J=I
263 GPRINT GOR POINT I;O+127*(POINT (I+1)>G)
265 NEXT I:CURSOR 20:BEEP 1:PAUSE STR$ ((100-K)/5)+"  ":PAUSE 
266 IF (100-K)/5>XLET X=(100-K)/5
267 E=E+1:IF E<>3GOTO 210
268 S=S+X:GOSUB 6E4:CLS :BEEP 2:PAUSE " *** SAUT EN LONGUEUR ***":PAUSE :CLS :X=0
269 WAIT :PRINT "(SPACE) pour prendre appui":PRINT "(ENTER) pour sauter...":CLS 
270 A$(0)="3012147F4404",A$(1)="1808691A040B0808",A$(2)="1868291A0C040B0808"
273 A$(3)="026E2838091E2828",A$(4)="6028386064782020"
279 FOR J=1TO 3:WAIT 0:CURSOR 5:PAUSE "PRET!":PAUSE :BEEP 1:CLS :FOR I=50TO 150STEP 5:GCURSOR I:GPRINT 64:NEXT I:GCURSOR 51:GPRINT 64
280 FOR I=0TO 43:GCURSOR I:GPRINT A$:IF INKEY$ =" "GOTO 300
285 NEXT I
290 GCURSOR 0:BEEP 1,20:PAUSE "SPLAT!":NEXT J:GOTO 350
300 WAIT 5:FOR R=0TO 4:GCURSOR I-1:GPRINT A$(R):IF INKEY$ <>CHR$ 13NEXT R:GOTO 290
302 WAIT 0:IF R<=2LET E=20*R+20:WAIT 4-R*2
304 IF R>2LET E=20*(4-R)+20:WAIT R
309 BEEP 1:GCURSOR I-3:GPRINT "602414684C1606":GCURSOR I:C$="000F0A0A1810":GPRINT C$
310 FOR L=ITO I+E:GCURSOR L:GPRINT C$
320 NEXT L:L=L+RND 5:BEEP 1,10:WAIT 10:GCURSOR L:GPRINT "3E2828204000":BEEP 1,10:GCURSOR L:GPRINT "785050406000"
340 GCURSOR L-6:PRINT " ":BEEP 1,30:CURSOR 0:PAUSE L/15;"  ":PAUSE :PAUSE 
345 IF X<L/7LET X=L/7
346 NEXT J
350 S=S+X:GOSUB 6E4:H=0,G=0,K=0,L=0
360 CLS :BEEP 2:PAUSE "    *** 400 METRES ***":PAUSE :WAIT 0
362 WAIT :PRINT "(0),(.),(=) pour avancer":WAIT 0:CLS 
365 CLS :GCURSOR 0:GPRINT A$
370 GCURSOR 35:GPRINT 64:GCURSOR 60:GPRINT 64:GPRINT 85:GPRINT 64
380 GCURSOR 110:GPRINT 127:CURSOR 19:PAUSE "PRET!":PAUSE :BEEP 1:TIME =0:CURSOR 19:PRINT "GO!  "
390 IF INKEY$ ="0"LET H=1
392 IF INKEY$ ="."AND HLET G=1,H=0
394 IF INKEY$ ="="AND GLET G=0,L=L+2:GCURSOR L:GPRINT A$:IF L>104GOTO 410
400 GOTO 390
410 BEEP 3,25:CURSOR 0:PAUSE "BRAVO!!!":PAUSE :S=S+(100-A*100)/4
417 BEEP 1:TIME =TIME *8,A=TIME *100:CURSOR 9:PAUSE "TEMPS";A;" mn":PAUSE :GOSUB 6E4
420 WAIT 0:CLS :BEEP 2:PAUSE " *** SAUT A LA PERCHE ***":PAUSE :B$(0)="0163251F1573410101010101"
421 WAIT :PRINT "(SPACE) pour abaisser la":PRINT "perche et (ENTER) pour":PRINT "sauter...":WAIT 0
425 CLS :W=85,B$(1)="78004040404040404040"
427 FOR J=1TO 3:CLS 
430 GPRINT B$(0):GCURSOR 100:GPRINT B$(1)
435 GCURSOR 90:GPRINT 64:BEEP 1
440 FOR I=1TO 80:GCURSOR I:GPRINT 0;B$(0):IF INKEY$ =" "GOTO 450
443 NEXT I
445 BEEP 3,45:CURSOR 0:PAUSE "SPLAT !!";J:PAUSE :NEXT J:GOTO 500
450 FOR L=ITO I+10:GCURSOR L:GPRINT "6020101F1C6B4A0C081020":IF INKEY$ =CHR$ 13GOTO 460
452 NEXT L:GOTO 445
460 IF L<WAND L<100GOTO 445
461 GCURSOR 83:GPRINT "0000000000000000000000000000000000"
462 WAIT 40:GCURSOR 92:GPRINT "271A1C181C2B44067C":GCURSOR 92:GPRINT "00000001071977017F050909"
463 GCURSOR 93:GPRINT "00000000007C027A3F6A5A524040404040"
464 GCURSOR 95:GPRINT "030C3040007C0050507C727050686C"
465 GCURSOR 93:GPRINT "020408102040"
466 GCURSOR 90:GPRINT "101010202020404040":GCURSOR 89:GPRINT "40404040404040404040"
467 WAIT 0:BEEP 1,18:CURSOR 0:PAUSE "BRAVO !!!":PAUSE :O=O+1:ON OGOTO 470,480,490,500
470 W=W+1:B$(1)="7C"+RIGHT$ (B$(1),LEN B$(1)-2):GOTO 427
480 W=W+1:B$(1)="7E"+RIGHT$ (B$(1),LEN B$(1)-2):GOTO 427
490 W=W+1:B$(1)="7F"+RIGHT$ (B$(1),LEN B$(1)-2):GOTO 427
500 CLS :S=S+O+5:GOSUB 6E4
510 A=0:CLS :BEEP 2:PAUSE " *** 110 METRES HAIES ***":PAUSE 
512 WAIT :PRINT "(ENTER) pour sauter":WAIT 0
515 CLS :CURSOR 5:INPUT "Vitesse (0-5)?";P:WAIT 5-P
520 CLS :FOR I=20TO 120STEP 20:GCURSOR I:GPRINT 112:NEXT I:GCURSOR 140:GPRINT 127
530 GCURSOR 0:GPRINT A$:GCURSOR 142:PAUSE "OK":PAUSE :BEEP 1:GCURSOR 142:PRINT "GO":TIME =0
540 FOR I=0TO 136STEP 2:GCURSOR I:GPRINT A$:IF INKEY$ =CHR$ 13THEN 570
550 NEXT I:BEEP 2,31:GOTO 590
570 IF POINT (I+9)=112OR POINT (I+8)=112GCURSOR I+2:I=I+6:GPRINT "18090917770A3B23":GOTO 550
580 A=A+2:GOTO 550
590 A=A+TIME *1E4:FOR I=20TO 120STEP 20:IF POINT I<112LET A=A+10
595 NEXT I:PAUSE "TEMPS";A;" sec":PAUSE :S=S+(100-A)/5:GOSUB 6E4
600 WAIT 0:CLS :BEEP 2:PAUSE " *** LANCER DU DISQUE ***":CLS 
610 WAIT :PRINT "(ENTER) pour lacher le":PRINT "disque...":WAIT 0:CLS 
620 A$(0)="030304080000",A$(1)="0000031F0000",A$(2)="000008040303"
622 A$(3)="000008080C0C",A$(4)="000004083030",A$(5)="000078600000"
624 A$(6)="303008040000",A$(7)="0C0C08080000"
625 FOR J=1TO 3:WAIT 0:INPUT "Vitesse(0-3)?";U:CLS :FOR L=15TO 115STEP 5:GCURSOR L:GPRINT 127:NEXT L
630 GCURSOR 6:GPRINT 127:I=-1:WAIT 3-U
640 FOR I=0TO 7:GCURSOR 8:GPRINT A$(I):IF INKEY$ =CHR$ 13BEEP 1:GOSUB 650
645 NEXT I:GOTO 640
647 GOTO 640
650 IF I<1OR I>4BEEP 2,32:CURSOR 20:PAUSE "SPLAT!":PAUSE :NEXT J:GOTO 670
652 IF I=1LET K=80
653 IF I=2LET K=40
654 IF I=3LET I=RND 2*4,K=20+(I=4)*10
655 IF I=4LET I=16,K=10
660 WAIT 2:K=K/((3-U)/2+1)+RND 5+20:FOR P=15TO K:GCURSOR P:GPRINT O+127*(POINT P>I);POINT (P+1)OR I:NEXT P
665 CURSOR 20:PAUSE K-10;"  ":PAUSE :NEXT J
670 IF K-10>XLET X=K-10
675 S=S+X/5:GOSUB 6E4:A$(0)="0163251F654509"
680 A$(1)="02066A2A1F694905",A$(2)="046C2C1F6A4A1101",A$(3)="086C241F6A4A1101"
685 A$(4)="201018146A5F3422"
690 CLS :BEEP 2:PAUSE "*** LANCER DU JAVELOT ***":PAUSE 
695 WAIT :PRINT "(SPACE) pour incliner le":PRINT "javelot et (ENTER) pour le"
697 P=0:PRINT "lacher...":WAIT 0:CLS 
700 FOR J=1TO 3:BEEP 1:R=0,Y=0,L=0:CLS :GCURSOR 100:GPRINT 64;64
710 FOR I=0TO 94STEP 2:IF INKEY$ =" "LET L=I,R=1
715 IF RAND INT ((I-L+1)/3)=(I-L+1)/3LET Y=Y+1:IF Y=5GOTO 735
717 GCURSOR I:GPRINT 0;A$(Y)
720 IF INKEY$ =CHR$ 13GOTO 750
730 NEXT I
735 BEEP 2,55:CURSOR 19:PRINT "SPLAT";J:PAUSE :NEXT J:GOTO 780
750 FOR K=100TO 155:GCURSOR K:GPRINT 0;2;2;2;2;2:NEXT K
752 IF Y=4LET P=I-85+RND 5
753 IF Y=0LET P=I-75+RND 5
754 IF Y=1LET P=I-55+RND 5
755 IF Y=3LET P=I-45+RND 5
756 IF Y=2LET P=I-40+RND 5
757 BEEP 2,22:CURSOR 0:PAUSE P;"  ":PAUSE 
760 IF P>XLET X=P
765 NEXT J
780 S=S+X/5:GOSUB 6E4
800 Q=0:WAIT 0:CLS :BEEP 2:PAUSE "    *** 1500 METRES ***":PAUSE 
801 PRINT "(8)=";:GPRINT F$;:PRINT " (6)=";:GPRINT G$;:PRINT " (2)=";:GPRINT H$;:PRINT " (4)=";:WAIT :GPRINT I$
805 WAIT 0
810 CLS :GCURSOR 0:GPRINT "7F4141":GCURSOR 98:GPRINT "41417F"
812 FOR I=3TO 97:GCURSOR I:GPRINT 73:NEXT I:GCURSOR 110:GPRINT 127:GCURSOR 50:GPRINT &79:GCURSOR 51:GPRINT 16OR POINT 51
815 CURSOR 19:PAUSE "PRET!":FOR I=1TO 150:IF INKEY$ =""NEXT I:GOTO 819
817 BEEP 2,35:CLS :PAUSE "Vous etes parti trop tot!":PAUSE :GOTO 810
819 BEEP 1:CURSOR 19:PRINT "GO!!!":TIME =0
820 I=51,K=16
830 IF INKEY$ ="8"LET K=K/2:IF K=1OR K=8LET K=K+K*(K=1OR I<98)
840 IF INKEY$ ="2"LET K=K+K:IF K=64OR K=8GOSUB 890
850 IF INKEY$ ="6"LET I=I+1:IF I=100LET I=I-1
860 IF INKEY$ ="4"LET I=I-1:IF I=0LET I=I+1
865 IF I=50GCURSOR 1:GPRINT "414149":Q=Q+1:GCURSOR 97:GPRINT "494141":CURSOR 19:PRINT Q*375;"  ":IF Q=4BEEP 1:GOTO 900
870 GCURSOR I:IF I<3OR I>95GPRINT KOR POINT I:GOTO 830
880 GPRINT 73;K+73;73:GOTO 830
890 IF K=8AND I<3RETURN 
895 K=K/2:RETURN 
900 A=TIME *1E2:CURSOR 19:PAUSE A;" mn":PAUSE :S=S+(1.4-A)*60:GOSUB 6E4
1000 CLS :PRINT "*** SCORE TOTAL="+STR$ INT (S*50)+" ***"
1010 WAIT :PRINT :END
60000 CLS :PAUSE "SCORE=";INT (S*50);" Points":PAUSE :D=D-25:CLS 
60002 IF PEEK &B002=77GLCURSOR (165,D):LPRINT STR$ INT (S*50):GLCURSOR (0,-330)
60005 RETURN 
61000 CLEAR :DIM A$(0)*26:A$(0)="*> DECATHLON OLYMPIQUE <*"
61010 WAIT 0:FOR I=1TO 25:FOR J=25TO ISTEP -1:CURSOR J:PRINT MID$ (A$(0),I,1):NEXT J:BEEP 1,25-I:NEXT I
61021 CLEAR :F$="000004027F0204",G$="00080808082A1C08"
61022 H$="000010207F2010",I$="00081C2A08080808"
61029 IF PEEK &B002<>77PAUSE :PAUSE :RETURN 
61030 TEXT :COLOR 1:CSIZE 3:LPRINT "***DECATHLONOLYMPIQUE***":LF 3:GRAPH :SORGN 
61040 LINE (0,0)-(215,-250),,2,B:LINE (160,0)-(160,-250)
61042 LINE (20,-250)-(20,0)
61045 FOR I=-25TO -225STEP -25:LINE (0,I)-(215,I):NEXT I
61050 BEEP 1:INPUT "PRENOM:";W$:GLCURSOR (185,85):ROTATE 1:COLOR 0:LPRINT LEFT$ (W$,8)
61060 ROTATE 0:FOR I=-25TO -225STEP -25:GLCURSOR (5,I+5):LPRINT STR$ (-I/25):NEXT I:GLCURSOR (0,-245):LPRINT "10":CSIZE 1
61070 GLCURSOR (25,-21):COLOR 3:LPRINT "100 Metres":GLCURSOR (25,-46):LPRINT "Saut en hauteur":GLCURSOR (25,-71)
61080 LPRINT "Lancer du poids":GLCURSOR (25,-96):LPRINT "Saut en longueur":GLCURSOR (25,-121)
61090 LPRINT "400 Metres":GLCURSOR (25,-146):LPRINT "Saut a la perche":GLCURSOR (25,-171)
61100 LPRINT "110 Metres haies":GLCURSOR (25,-196):LPRINT "Lancer du disque":GLCURSOR (25,-221)
61110 LPRINT "Lancer du javelot":GLCURSOR (25,-246):LPRINT "1500 Metres":CSIZE 2:COLOR 1:RETURN 
