100 REM Ðòïçòáí äåíïîóôòáôåó›110 REM Áîéíáôéïî âù ÐÅÅËéîç›120 REM áîä ÐÏËÅéîç›130 DIM CHR(15),DX(15),DY(15)›140 REM Direction offsets for each joystick position›150 DX(14)=0:DX(13)=0:DX(9)=-1:DX(10)=-1:DX(11)=-1:DX(5)=1:DX(6)=1:DX(7)=1›160 DY(11)=0:DY(7)=0:DY(6)=-1:DY(10)=-1:DY(14)=-1:DY(5)=1:DY(9)=1:DY(13)=1›170 REM The character for each joystick Position›180 CHR(14)=92:CHR(13)=93:CHR(11)=94:CHR(7)=95:CHR(10)=81:CHR(6)=69:CHR(9)=90:CHR(5)=67›190 GRAPHICS 1+16:REM No text window›200 POKE 756,226:REM Use lower half of character set›210 SETCOLOR 0,0,0:REM Make hearts vanish›220 REM Calculate screen memory address:›230 SCREEN=PEEK(88)+256*PEEK(89)›240 BALL=20+128:STAR=73+128:REM CTRL-T AND CTRL-I›250 REM Draw a border:›260 BARHORIZ=82+128:REM Horizontal bar (CTRL-R)›270 FOR I=1 TO 18›280 POKE SCREEN+I,BARHORIZ›290 POKE SCREEN+460+I,BARHORIZ›300 NEXT I›310 BARVERT=124+128:REM Vertical bar (SHIFT-EQUALS)›320 FOR I=1 TO 22›330 POKE SCREEN+I*20,BARVERT›340 POKE SCREEN+19+I*20,BARVERT›350 NEXT I›360 REM Do corners CTRL-Q,CTRL-E,CTRL-Z,CTRL-C›370 POKE SCREEN,81+128:POKE SCREEN+19,69+128:POKE SCREEN+460,90+128:POKE SCREEN+479,67+128›380 REM Put in random "stars"›390 FOR I=1 TO 20:R=SCREEN+INT(480*RND(0)):IF PEEK(R)=0 THEN POKE R,STAR:REM Don't overwrite border›400 NEXT I›410 PX=10:PY=11:POKE SCREEN+PX+20*PY,CHR(14):REM Plaver X, Player Y. Put "up-arrow" character on screen›420 BX=INT(18*RND(1)+1):BY=INT(22*RND(1)+1):REM Ball X, Ball Y Selected randomly›430 DX=1:DY=1:REM Direction offsets for ball›440 REM Main loop›450 REM Check for player's move:›460 ST=STICK(0)›470 IF ST=15 THEN 640:REM Let ball bounce›480 REM Temporary variables hold updated PX and PY›490 TX=PX+DX(ST):REM X offset 1,0,-1›500 TY=PY+DY(ST):REM Same with Y. Table lookup is fast!›510 PPOS=SCREEN+TX+20*TY:REM Calculate current position›520 IF PEEK(PPOS)=BALL THEN 1000:REM Hit ball›530 IF PEEK(PPOS)=STAR THEN 2000:REM Hit star›540 IF PEEK(PPOS)<>0 THEN 640:REM If wall hit, don't let player advance›550 REM Update player›560 REM Table lookup also replaces IF /THEN, and is ultimately more memory efficient:›570 CHR=CHR(ST)›580 POKE SCREEN+PX+20*PY,0:REM Erase previous character›590 POKE PPOS,CHR:REM Place new one›600 PX=TX:PY=TY:REM Update variables›610 REM ›620 REM Let ball have its turn›630 REM ›640 TEMPBX=BX+DX:TEMPBY=BY+DY:REM DX and DY are direction offsets›650 BPOS=SCREEN+TEMPBX+20*TEMPBY:REM Ball absolute position›660 IF PEEK(BPOS)>64 AND PEEK(BPOS)<96 THEN 1000:REM Ball hit player›670 IF PEEK(BPOS)=0 THEN 730›680 REM Any other collision is a bounce›690 REM Change direction of either X, Y, or both X and Y:›700 IF RND(1)>0.5 THEN DX=-DX:GOTO 460›710 IF RND(1)>0.5 THEN DY=-DY:GOTO 460›720 DX=-DX:DY=-DY:GOTO 460›730 REM Update ball›740 POKE SCREEN+BX+20*BY,0:REM Erase old ball›750 POKE BPOS,BALL:REM Draw new ball›760 BX=TEMPBX:BY=TEMPBY:REM Update ball variables›770 GOTO 460›1000 REM Hit ball, win!›1010 BALLPOS=SCREEN+BX+20*BY:FLIP=128:REM BALL POSITION, "FLIPPING" VARIABLE›1020 REM FLIP is used to alternate two characters in one spot›1030 REM 257-FLIP switches FLIP from 128 to 129, and vice-versa›1040 FOR I=1 TO 5:FOR J=1 TO 6:POKE BALLPOS,19+FLIP:POKE 710,PEEK(53770)›1050 FOR W=5 TO 0 STEP -5:SOUND 0,J*2,10,W:NEXT W:FLIP=257-FLIP:NEXT J:NEXT I›1060 REM STRANGE SOUND, FLASH BALL AGAIN›1070 FOR I=255 TO 0 STEP -5:SOUND 0,I,12,8:SOUND 1,I,10,8:POKE 710,I:NEXT I›1080 RUN ›2000 REM UH-OH! Hit a star!›2010 FOR I=100 TO 200 STEP 10›2020 XPLODE=XPLODE+0.5:REM Advance character every other "I", from 1-5›2030 POKE SCREEN+PX+20*PY,65+INT(XPLODE):REM Place a graphics character›2040 POKE 709,PEEK(53770):REM More "cheap thrill" color›2050 SOUND 0,I,0,15-INT((I-100)/6.66):REM Explosion sound›2060 NEXT I›2070 POKE SCREEN+PX+20*PY,0:REM Erase character›2080 REM Flash screen›2090 FOR I=1 TO 100:POKE 711,PEEK(53770):NEXT I›2100 RUN ›