[ Atari / Punchs / Source : demo.lst ]

[ << ]

 Code source 

01e$=STRING$(32112,0)+"FD13RT90FD10RT90FD5RT90FD5MR10,-5TT0BK13RT90FD8LT90FD13MR5,13FD13RT150FD15TT0FD13MR12,0LT90FD7LT90FD13LT90FD7MR5,0TT0FD13BK6RT90FD8LT90FD6BK13MA"
02FOR a%=80 TO 199+0*XBIOS(7,0,0)*XBIOS(7,15,6)*XBIOS(7,7,&H70)*XBIOS(7,8,&H550)*XBIOS(7,9,&H440)*XBIOS(7,10,&H330)
03  calc$=calc$+MID$(MKI$(152+120*COS(a%/4))+CHR$(140+50*SIN(a%/6))+CHR$(90+50*SIN(a%/6)+20*COS(a%/3))+CHR$(100+50*COS(a%/5))+CHR$(10+10*COS(a%/5)),1-4*(a%>160),4)
04  DRAW "CO1TT0MA",31+a%/60,12+a%/60,MID$(e$,32113,144),RAND(320),16+RAND(20),"FD0TT90MA",VAL(MID$("64321100001123466321236",a%-79,1))-16*(a%>95)+32*(a%>102),a%-80+16*(a%>95),"FD",VAL("&"+MID$("379BDDFFFFDDB97339BDB93",a%-79,1))
05  FOR b=0 TO 319 STEP a%/4
06    DRAW "TT90CO",VAL(MID$("574632",(150*a%^0.1-ODD(b/a%*4)*3) MOD 6+1,1)),"MA",b,a%,"FD",a%/4,"TT0CO9MA",b/a%*4+(a%-80)*10,79,"FD",26-ABS(a%-90)+5*COS(a%+b/200),"LT25CO10FD9LT20CO11FD9"
07  NEXT b
08NEXT a%
09SGET f$
10FOR k%=FRE(0)*0*XBIOS(5,L:INT((V:e$+256)/256)*256,L:-1,W:-1) TO 9000
11  FOR a%=0*XBIOS(7,1,1911+546*(k% MOD 6>2))*XBIOS(7,2,1911+546*((k%+1) MOD 6>2))*XBIOS(7,3,1911+546*((k%+2) MOD 6>2))*XBIOS(7,4,1911+546*((k%+3) MOD 6>2))*XBIOS(7,5,1911+546*((k%+4) MOD 6>2))*XBIOS(7,6,1911+546*((k%+5) MOD 6>2)) TO 2
12    RC_COPY XBIOS(3),0,0,16,16 TO XBIOS(3),DPEEK(V:calc$+((k%+a%*2)*4) MOD 300),PEEK(V:calc$+((k%+a%*2)*4) MOD 300+3),7
13    RC_COPY XBIOS(3),16,0,16,7 TO XBIOS(3),DPEEK(V:calc$+((k%+a%*2)*4) MOD 300),PEEK(V:calc$+((k%+a%*2)*4) MOD 300+2),4
14    SOUND 1,15,SUB(ASC(MID$("EELHEELHEEMJEEMJEELHEELHEEOMLJLEEELEEELEEELEEELCCCJCCCJCCCJCCCJEOMLJKJHG",DIV(k%,2) MOD 72+1,1)),64),ADD(ADD(a%,3),ODD(k%))
15  NEXT a%
16  RC_COPY XBIOS(3),32,0,64,16 TO XBIOS(3),128,PEEK(V:calc$+324+2*k% MOD 62),7
17  ARECT 148-PEEK(V:calc$+325+2*k% MOD 62),180,172+PEEK(V:calc$+325+2*k% MOD 62),181,0,0,XBIOS(3),0
18  PRINT AT(1,3);CHR$(27);"d";CHR$(27);"bg";AT(1,1);MID$(SPACE$(40)+"Yeaah ! Another Punch demo by A.C... And it's already time to wrap !"+SPACE$(40),k% MOD 109+1,40);CHR$(MUL(MUL(0,XBIOS(5,L:XBIOS(2),L:XBIOS(3),W:-1)),XBIOS(37)))
19  SPUT f$
20NEXT k%


 Quelques explications 

[ Lignes 1 à 8 : phase d'initialisation ]
On dessine le terrain et les sprites.
On effectue également tous les pré-calculs : la courbe suivie par les boules, l'oscillation du logo "Punch" et celle de son ombre.

[ Lignes 10 à 20 : boucle principale ]
Lignes 11 à 15 : on décale la palette de couleurs pour simuler le glissement du damier, on affiche les boules et on fait du bruit :)
Ligne 16 : affichage du logo
Ligne 17 : affichage de l'ombre du logo
Ligne 18 : scrolling, permutation des écrans et synchro sur le balayage écran