REM TENNIS BY CCLX33 V1.0 GAMEPAD 1 RANDOMIZE TIMER rem 1 computer 2 player first SERVER=1 GRAVITY=0.02 REM HIT REGION HITDX=18 HITDY=18 MIDLINE=57 BOTTOMLINE=120 TOPLINE=12 LEFTBORDER=40 RIGHTBORDER=112 MANSCORE=0 COMPSCORE=0 COMPGAME=0 MANGAME=0 COMPY=8 COMPSPEED=0.4 MANSPEED=0.6 MANX=60 SPEED=0.9 SPRITE.A 2,(2,) SPRITE.A 1,(1,) REM SERVE AT LEFT(-1) OR RIGHT(1) SIDE SERVESIDE=1 GOSUB DRAW_NET DO SERVESIDE=-SERVESIDE REM FOR HEAD & RACKET DIRECTION COMPflp=1 SWING=0 SWINGA=0 COMPSWING=0 COMPSWINGA=0 BALLH=12 COMPX=75+(5+RND*15)*SERVESIDE MANX=150-COMPX REM BALL UP BALLV=-0.54-RND*0.1 REM DRAW COMPUTER PLAYER CALL DRAWMAN(COMPX,COMPY,COMPSWING,COMPflp,1) MANY=107 IF SERVER=1 THEN ' COMPUTER SERVE BALLX=COMPX BALLY=10 BALLXA=-(0.1+RND*0.1+ABS(COMPX-75)/90)*SERVESIDE BALLYA=SPEED IF RND>0.1 THEN BALLYA=SPEED*(1.25+0.05*RND) BALLH=28 BALLV=0.2*RND-0.1 END IF ELSE ' MAN SERVE MANflp=1 BALLYA=-SPEED ' MAN FIX FOR OVER NET BALLV=BALLV+0.1 REPEAT GOSUB KEY1 IF MANXRIGHTBORDER THEN MANX=RIGHTBORDER IF MANY<107 THEN MANY=107 IF SERVESIDE=1 AND MANX>=70 THEN MANX=70 IF SERVESIDE=-1 AND MANX<=80 THEN MANX=80 BALLX=MANX BALLY=MANY-8 SPRITE 1,BALLX-8,BALLY-BALLH/2+3,1 SPRITE 2,BALLX-8,BALLY,2 CALL DRAWMAN(MANX,MANY,SWING,MANflp,2) IF BUTTON(0,1) and BUTTON(0,1) THEN BALLYA=-SPEED*0.9 ' BALLV=0.2*RND-0.1 END IF IF BUTTON(0,1) THEN BALLYA=-SPEED*(1.25+0.05*RND) BALLH=28.25 BALLV=0.2*RND-0.1 END IF WAIT 1 UNTIL BUTTON(0,0) OR BALLH>12 BALLXA=(0.1+RND*0.1+ABS(MANX-75)/90)*SERVESIDE ' BALLXA=(0.1+RND*0.1+ABS(MANX-75)/90-(BALLH>12)*0.3)*SERVESIDE IF BALLH>12 THEN BALLV=0.2 END IF PLAY 1,39,3 DROP=0 OUT=0 NET=0 REPEAT REM BALL AND SHADOW if bally5.5 THEN SWINGA=0 IF SWING>5.5 THEN SWING=0 IF SWING>4.5 THEN GOSUB CHECKHIT COMPSWING=COMPSWING+COMPSWINGA IF COMPSWING>5.5 THEN COMPSWINGA=0 IF COMPSWING>5.5 THEN COMPSWING=0 IF COMPSWING>4.5 THEN GOSUB COMPCHECKHIT CALL DRAWMAN(COMPX,COMPY,COMPSWING,COMPflp,1) REM MAN SERVER IF BALLX+BALLXA*10=BOTTOMLINE+10 OR BALLY<0 OR NET=1 OR OUT=1 IF NET=0 AND OUT=0 THEN IF BALLY>=BOTTOMLINE AND DROP=1 THEN GOSUB SCORELOSS IF BALLY>=BOTTOMLINE AND DROP=0 THEN GOSUB SCOREUP IF BALLY<0 AND DROP=0 THEN GOSUB SCORELOSS IF BALLY<0 AND DROP=1 THEN GOSUB SCOREUP END IF WAIT 80 LOOP KEY1: IF UP(0) AND MANY>64 THEN MANY=MANY-MANSPEED IF DOWN(0) AND MANY<120 THEN MANY=MANY+MANSPEED IF RIGHT(0) AND MANX<145 THEN MANX=MANX+MANSPEED IF LEFT(0) AND MANX>0 THEN MANX=MANX-MANSPEED IF BUTTON(0,0) AND SWINGA=0 THEN SWINGA=0.3 VAD=0 END IF IF BUTTON(0,1) AND SWINGA=0 THEN SWINGA=0.3 VAD=-0.1 END IF RETURN COMPMOVE: COMPBALLDX=BALLX+BALLXA*(BALLY-COMPY)-COMPX IF COMPBALLDX>3 THEN COMPX=COMPX+COMPSPEED IF COMPBALLDX<-3 THEN COMPX=COMPX-COMPSPEED RETURN COMPHIT: IF BALLX+BALLXA*5>COMPX THEN COMPflp=1 ELSE COMPflp=-1 IF DROP=1 THEN COMPSWINGA=0.3 RETURN CHECKNET: IF NET=1 THEN RETURN 'TEXT 8,8," " IF BALLH<6 THEN NET=1 ' TEXT 8,8,"NET" IF BALLYA>0 THEN GOSUB SCOREUP ELSE GOSUB SCORELOSS END IF RETURN CHECKHIT: RDX=MANX-BALLX DX=INT(ABS(RDX)) DY=INT(MANY+7-BALLY) ' MISS IF DX>HITDX OR DY>HITDY OR DY<0 THEN RETURN HITBACK: BALLYA=-ABS(BALLYA) IF BALLH>15 THEN BALLYA=BALLYA-0.1 IF (MANY-MIDLINE)<15 THEN BALLV=0.2 BALLXA=RDX/20 BALLV=BALLV+VAD PLAY 1,39,3 DROP=0 OUT=0 RETURN COMPCHECKHIT: RDX=COMPX-BALLX DX=INT(ABS(RDX)) DY=INT(COMPY+7-BALLY) ' MISS IF DX>HITDX-2 OR DY>HITDY-2 OR DY<0 THEN RETURN COMPHITBACK: BALLYA=ABS(BALLYA) IF BALLH>15 THEN BALLYA=BALLYA+0.1 BALLXA=RDX/20 PLAY 1,39,3 DROP=0 OUT=0 RETURN CHECKDROP: IF DROP=1 THEN RETURN DROPX=BALLX DROPY=BALLY PLAY 1,20,2 TEXT 0,0," " DROP=1 LEFTBORDER1=LEFTBORDER-(BALLY-MIDLINE)\8 RIGHTBORDER1=RIGHTBORDER+(BALLY-MIDLINE)\8 IF BALLYA>0 THEN 'COMPUTER IF BALLYBOTTOMLINE-11 OR BALLXRIGHTBORDER1 THEN OUT=1 TEXT 0,0,"OUT" GOSUB SCOREUP END IF ELSE 'MAN IF BALLY>MIDLINE OR BALLYRIGHTBORDER1 THEN OUT=1 TEXT 0,0,"OUT" GOSUB SCORELOSS END IF END IF RETURN SCORELOSS: COMPSCORE=COMPSCORE+1 PLAY 1,65,5 WAIT 5 PLAY 1,63,5 GOTO SHOWSCORE SCOREUP: MANSCORE=MANSCORE+1 PLAY 1,77,5 WAIT 5 PLAY 1,79,3 SHOWSCORE: IF MANSCORE<=3 AND COMPSCORE<=3 THEN MANSCOREW=MIN(MANSCORE*15,40) COMPSCOREW=MIN(COMPSCORE*15,40) TEXT 4,15," "+STR$(MANSCOREW)+"/"+STR$(COMPSCOREW)+" " ELSE DSCORE=MANSCORE-COMPSCORE IF DSCORE=0 THEN TEXT 4,15, " DEUSE " IF DSCORE=1 THEN TEXT 4,15, " PLAYER ADV " IF DSCORE=-1 THEN TEXT 4,15,"COMPUTER ADV" IF DSCORE>=2 THEN TEXT 4,15," PLAYER WIN " MANGAME=MANGAME+1 END IF IF DSCORE<=-2 THEN TEXT 4,15,"COMPUTER WIN" COMPGAME=COMPGAME+1 END IF TEXT 0,1,STR$(MANGAME)+"/"+STR$(COMPGAME) IF ABS(DSCORE)>=2 THEN ' GAME OVER MANSCORE=0 COMPSCORE=0 SERVER=3-SERVER END IF END IF RETURN DRAW_NET: FOR I=5 TO 13 'NET attr (,,,1) IF I<14 THEN CELL I,7,16 'TOPLINE IF I<12 THEN CELL I+1,2,10 ' BOTTOM LINE CELL I,14,10 'INNER LINE IF I<14 THEN CELL I,10,17 IF I<12 THEN CELL I+1,4,17 NEXT I ' FIX TOP LINE & BOTTOM LINE LEAK SPRITE 40,34,112,10 SPRITE 41,109,112,10 SPRITE 42,45,16,10 SPRITE 43,98,16,10 'BORDER FOR I=5 TO 16 'LEFT SPRITE I+8,50-I,I*8-24,11 'RIGHT SPRITE I+20,100+I,I*8-24,11 ' MIDDLE VERTICAL LINE IF I<11 THEN SPRITE I+40,75,I*8-2,11 NEXT I RETURN SUB DRAWMAN(X,Y,SWING,flp,PLAYER) ' flp +1,-1 SWING 0~5 IF flp=1 THEN flp0=0 ELSE flp0=1 ' flp0=(1-flp)\2 IF flp=-1 THEN flpPIC=5 ELSE flpPIC=0 IF PLAYER=2 THEN 'MAN 'SHADOW SPRITE 9, X-6, Y+2, 14 SPRITE 10, X+2, Y+2, 15 'HEAD (PICNO=4 OR 9) SPRITE.A 4,(,flp0) SPRITE 4, X-4+flp0, Y-8, 4+flpPIC 'FOOT SPRITE 5, X-4, Y, 13 'RACKET (PICNO=5,6,7) SPRITE.A 3,(3,flp0) SPRITE 3, X-4+(9-SWING)*flp, Y-8, 5+SWING\2 ELSE 'COMP 'SHADOW SPRITE 11, X-6, Y+2, 14 SPRITE 12, X+2, Y+2, 15 'HEAD (PICNO=3 OR 5) SPRITE 6, X-4, Y-8, 3+flpPIC 'FOOT SPRITE 7, X-4, Y, 12 'RACKET (PICNO=5,6,7) SPRITE.A 8,(3,flp0) SPRITE 8, X-4+(9-SWING)*flp, Y-8, 5+SWING\2 END IF ' ATTR (1,0,) END SUB #1:MAIN PALETTES 053F3C3400383400003C0C00003F3D15 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 000834044C38000000384C7C7C380000 00000000387C380000000000387C3800 30787E7E3E1C41413E7F4155413E7FFF 30787878303E7F7F3E7F7F7F7F1C41C1 304884848448300048A4502850A4C8C0 1824444448E0000024122A12A410C000 18181818181800000000000000000000 30787878303E7F7F3E7F1F4F4F0C70F0 30787F7D3F1C60703E7F7878703E7FFF FF000000000000000000000000000000 80808080808080800000000000000000 4100003E7F63E363FF7F7F7F00808063 7F7F7F7F7F63E363C100003E00808063 00001F7FFFFF7F1F00001F7FFFFF7F1F 000080E0F0F0E080000080E0F0F0E080 FF000000000000000055FF55FF55FF55 0000000000FF00000000000000000000