C 64
Sportspiele

Golf

Reines Basic und doch ein vollwertiges Sportspiel — »Golf« demonstriert, welche Möglichkeiten sich durch geschickte Sprite-Steuerung bieten.

Das Ergebnis zeigt, daß auch von Basic aus kompliziertere Bewegungsabläufe möglich sind. Allerdings wurden so ziemlich alle Möglichkeiten zur Programmbeschleunigung angewandt, was natürlich auf Kosten der Übersichtlichkeit geht. Interessierte werden sich aber wohl an den REM-Zeilen orientieren können, so daß auf eine detaillierte Beschreibung der Programmtechnik verzichtet werden kann.

Zum Spielablauf aber einige Bemerkungen:

Es wird in zwei Bildern gespielt, wahlweise mit einem oder mit zwei Spielern. Die Schlagrichtung wird durch einen Joystick an Port 2 oder über die Tasten CURSOR LEFT / RIGHT eingestellt, die Schlagstärke mit FIRE oder der SPACE-Taste. Solange FIRE oder SPACE betätigt werden, wächst die Schlagstärke, nach Loslassen beginnt die Ballbewegung.

Im ersten Bild wird der Ball weit geschlagen, als Flugbahn ergibt sich eine Parabel. Dieses Bild ist besonders durch die sich zufällig ändernde Landschaft interessant. Der Verlauf der Bodenkurve und die Positionen der Bäume und des Sees sind bei jedem Spiel anders, ohne daß sich aber der Schwierigkeitsgrad entscheidend ändert. Das erste Bild ist meist in fünf, äußerst selten in vier und maximal in sechs Schlägen bei optimalem Spiel zu schaffen.

Wird der See getroffen, muß wieder von vorn bei der Ausgangsposition begonnen werden.

Außer beim großen Baum sind die Stämme für den Ball ein undurchdringliches Hindernis, während beim Blattwerk die Flugbahn nicht sicher vorherzusehen ist.

Wird der gekennzeichnete Bereich um die Fahne erreicht, erscheint das zweite Bild, welches in etwa eine Vergrößerung dieses Bereiches darstellt. An entsprechender Stelle liegt auch der Ball.

Im zweiten Bild kann dieser nicht mehr hochgeschlagen, sondern nur noch gerollt werden, so daß die zufällig angeordneten Sandfelder, die die Bewegung stark abbremsen, möglichst umgangen werden sollten. Die Spielfläche ist hier meist in zwei Richtungen geneigt. Sie steigt immer vertikal nach oben (also in den Bildschirm hinein) an, während das horizontale Gefälle durch den rechten Bereich des ersten Bildes bestimmt wird.

Dadurch wird die Bahn des Balles etwas kompliziert, aber auch interessant. Es ist einige Übung erforderlich, bis man hier ein gutes Augenmaß entwickelt hat.

Das Programm hat insgesamt einen für ein Basic-Programm recht hohen Spielwert und kann durchaus als Anregung zur Programmierung eigener Basic-Spiele dienen.

(Bernhard Tertelmann / ev)
|
0 rem     ** golf ('85) ***
1 rem     *  ----------   *
2 rem     * b.tertelmann  *
3 rem     * ostendorf 36  *
4 rem     * 4435 horstmar *                       *****************
5 print"{clr}{gry3}* golf *":v=53248:pokev+21,0:pokev+32,11:pokev+33,11:goto15
6 rem v+16 fuer baeume und ballbewegung
7 ifz>wthenz=zandw:pokev6,c
8 return
9 ifd-c>wthenpokev6,peek(v6)or16:c=w+1:return
10 ifd<cthenpokev6,peek(v6)andnot16:c=0
11 return
15 v6=v+16:v0=v+30:v1=v0+1:o=21.9:w=255:m=40:sx=.8:sy=.8:s=54272:j=56320:b=2040
16 dimp%(38),p(50):fori=0to38:readp%(i):next
17 fori=0to7:readr(i),g(i),b(i),h(i):next:n=20
18 fori=0to10:readp(i):p(n+i)=-p(i):p(n-i)=p(i):p(m-i)=-p(i):p(m+i)=p(i):next
20 fori=832to864:readq:pokei,q:next:fori=ito989:pokei,0:next
25 fori=itoi+33:readq:pokei,q:next:fori=12800toi+46:readq:pokei,q:next
30 fori=itoi+38:pokei,0:next:fori=itoi+297:readq:pokei,q:next
35 poke924,24:poke927,60:poke930,60:poke933,24:pokev+42,5:pokev+43,1:rem ball
40 deffnb(x)=o+(sin(x/2)+cos(x/4))/2:rem bodenkurve fuer 1.bild
42 deffnh(x)=k+sin(x/5)/2+(x-a)*l:rem    horizont fuer 2.bild
45 pokev+37,10:pokev+38,0:pokeb,200:pokeb+3,203:pokeb+4,14
50 pokes,0:pokes+6,0:pokes+7,0:pokes+9,0:pokes+10,8
55 pokes+13,0:pokes+14,0:pokes+19,9:pokes+20,0:pokes+24,15
60 print"{clr}{blu}{down}{down}{down}{down}":pokev+33,6:pokev+32,11
62 printtab(14)"U{SHIFT-*}IU{SHIFT-*}II  U{SHIFT-*}I"
65 printtab(14)"{SHIFT--}  {SHIFT--} {SHIFT--}{SHIFT--}  {SHIFT--}"
68 printtab(14)"{SHIFT--}{SHIFT-*}I{SHIFT--} {SHIFT--}{SHIFT--}  {CBM-Q}{SHIFT-*}"
70 printtab(14)"{SHIFT--} {SHIFT--}{SHIFT--} {SHIFT--}{SHIFT--}  {SHIFT--}"
72 printtab(14)"J{SHIFT-*}KJ{SHIFT-*}KJ{SHIFT-*}KK{down}"
75 printtab(14)"************{down}{down}{down}{down}{down}{down}{blk}"
80 printtab(8)"1 spieler.......taste 1{down}"
82 printtab(8)"2 spieler.......taste 2":i=10
85 geta$:ifa$="1"ora$="2"then90
86 a=55600:fork=0to38:pokea+p%(k),i^1:next
87 fork=0to11:poke55750+k,i^1:next:i=7-(i=7)*3:goto85
90 ss=val(a$):bs(1)=999:bs(2)=999:sm(1)=0:sm(2)=0:sp=0
95 s(1)=0:s(2)=0:sp=sp+1:forn=1toss:pokes+8,15:pokes+12,5:pokes+15,150
99 rem vorbereitung bild 1
100 pokev+33,9:print"{clr}":pokev+33,6:pokev+32,11:pokev+23,42:pokev+29,232
105 pokev+28,7:pokev+40,5:pokev+41,5:pokev+44,0:pokev+45,15:pokev+46,15
110 pokeb+1,201:pokeb+2,202:pokeb+5,204:pokeb+6,13:pokeb+7,15
115 q=rnd(ti):a=q*9999:a%=q*20:x=a+a%:h=fnb(x)
120 y=fnb(x+10):ify+1<hthen115
125 ify>hthenh=y
130 z=a%+55297+int(h)*m:fori=0to8:pokez+i,14:next
135 z=z+41:fori=0to6:pokez+i,14:next:l=a%+1024:r=l+10
140 k=0:forx=a+37toa+39:iffnb(x)>=22thenk=1
145 next:y=56173:fori=0to2:forx=0tok:pokey+i+x*m,8:next:next
150 pokev6,1:pokev,64:pokev+1,fnb(a+38)*8+35
155 k=1:ifa%>14thenk=3:goto165
160 ifa%>7thenk=2
165 x%(k-1)=a%+8:fori=kto3:x%(i)=rnd(1)*(11+i*6-x%(i-1))+x%(i-1)+6:next
170 onkgoto185,180
175 x%(1)=rnd(1)*(a%-12)+4:x%(2)=rnd(1)*(a%-8-x%(1))+x%(1)+6:goto185
180 x%(1)=rnd(1)*(a%-6)+4
185 x%=rnd(1)*3+1
190 y%=rnd(1)*3+1:ify%=x%then190
195 k=6-x%-y%:x=x%(x%):z=x*8+18:c=3:gosub7:pokev+2,z:pokev+3,fnb(x+a)*8+8
200 x=x%(y%):z=x*8+18:c=5:gosub7:pokev+4,z:pokev+5,fnb(x+a)*8+29
205 x=x%(k):z=x*8+8:c=41:gosub7:pokev+6,z:pokev+10,z
210 z=fnb(x+a)*8+8:pokev+7,z:pokev+11,z:pokev+8,0
215 pokev+12,132:pokev+13,73:pokev+14,180:pokev+15,63
220 x=a:fori=1024to1063:ifi>landi<rtheny=h:goto230
225 y=fnb(x)
230 y%=y:pokei+m*y%,b(8*(y-y%)):fory=y%+1to24:pokei+m*y,160:next:x=x+1:next
235 print"{blk}":onssgosub670,680:l=a%+2:r=l+10
240 printtab(5)"{red}{down}{down}{down}{down}{CBM-D}{rvon}{CBM-V}  {CBM-C}{rvof}{CBM-F}":printtab(5)"{rvon}{CBM-V}    {CBM-C}"
245 printtab(5)"{rvon}  {gry2}              ":printtab(3)"{rvon}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{rght}{CBM-@}{CBM-@}"
250 printtab(5)"{rvon}{red}{CBM-F}    {CBM-D}{blk}":pokev+21,w:z=931:p=0:u=5
254 rem spiel bild 1
255 c=0:x=a:x%=0:d=14
260 pokes+6,0:y=fnb(x):e=y*8+37:x=0
265 pokev+8,d-c:pokev+9,e:pokev+27,0:gosub650:ifx%>38then310
270 gosub550:f=2*sgn(t):k=f:g=g*t:g=g*g:t=p(p)/t:pokev+27,16
275 pokez,0:pokes+4,129:y=peek(v0)+peek(v1)
280 d=d+k:ifd<14ord>328thenpokes+5,9:pokes+4,0:pokes+4,17:k=-k:d=d+k+k
285 ifpeek(v0)and14thenpokes+18,0:pokes+18,129:k=-k:d=d+k+k
290 x=x+f:y=e+x*(x/g-t):ify>240then300
295 gosub9:pokev+8,d-c:pokev+9,y:ifnotpeek(v1)and16then280
300 x%=d/8+.5:ifx%>landx%<rthenpokev+9,h*8+40:goto500
305 pokes+11,0:pokes+11,17:x=x%-2+a:d=x%*8-2:gosub9:goto260
309 rem ende bild 1
310 print"{down}{down}{down}":fori=0to28:fork=0to4:print"{rght}";chr$(20):next:print"{up}{up}{up}{up}{up}{up}"
315 pokes+18,16:pokes+18,17:fort=0to50:next:next
319 rem vorbereitung bild 2
320 pokev+21,0:print"{clr}":pokev+33,9:pokev,207:pokev+1,120:pokev+28,1
325 pokeb+1,13:pokeb+2,15:pokeb+5,205:pokeb+6,205:pokeb+7,205
330 pokev+40,15:pokev+41,15:pokev+44,7:pokev+45,13:pokev+46,7
335 fori=v+10tov+13:pokei,rnd(1)*140+25:i=i+1:pokei,rnd(1)*85+120:next
340 pokev+14,rnd(1)*62:pokev+15,rnd(1)*85+120:pokev6,128
345 e=(y-19)*50+35:d=int((rnd(1)+x%-39)*104+15):c=0:gosub9
350 pokev+8,d-c:pokev+9,e:pokes+8,5:pokes+12,96
355 pokev+2,132:pokev+3,73:pokev+4,180:pokev+5,63
360 x%=(fnb(a+39)-fnb(a+37))*7:q=sgn(x%):l=q/9:k=6-q-q:q=q*sx:poke55720,0
365 x=a:fori=1024to1063:y=fnh(x):y%=y:fort=0toy%-1:pokei+t*m,160:next
370 pokei+m*y%,h(8*(y-y%)):x=x+1:next
375 pokes+15,15:onssgosub670,680:pokev+23,192:pokev+29,102:pokev+21,247
380 gosub650:gosub550:g=g/4+1:f=p(p):pokez,0:pokes+4,129
384 rem spiel bild 2
385 i=peek(v0)+peek(v1):fori=gto1step-.07:x0=d:y0=e:ifi<3thend=d+q:e=e+sy
390 d=d+t*i:ifd<14ord>330thenpokes+18,0:pokes+18,17:t=-p(p+10):d=x0
395 ifpeek(v1)and16thenife<109thene=fnh((d-14)/8+a)*8+m:i=i-.1:goto415
400 h=peek(v0):e=e-f*i:ife>237thenpokes+18,0:pokes+18,17:f=-p(p):e=y0
405 ifhand16thenifnothand1theni=i-.4:pokes+11,0:pokes+11,129
410 ife<126ande>120thenifd<211andd>205then435
415 d=int(d+.5):y%=e+.5:gosub9:pokev+8,d-c:pokev+9,y%:next
420 ifpeek(v1)and16thenife<109thenpokev+9,y%+3:e=e+3
425 ife<160thenifd<250andd>170thenpoke1448,87:pokev+21,246:goto380
430 poke1448,32:pokev+21,247:goto380
434 rem spielende und auswertung
435 pokev+8,208:pokev+9,123:gosub650:pokes+12,0:pokes+13,89:pokev+32,2
440 pokes+11,0:pokes+11,65:gosub490:pokev+33,8:gosub490:pokev+32,11
445 gosub490:pokev+33,9:gosub490:pokev+21,0:pokes+11,0:pokes+13,0:nextn
450 fori=1toss:sm(i)=sm(i)+s(i):ifs(i)<bs(i)thenbs(i)=s(i)
455 next:print"{clr}{down}{down}{down}{down}":pokev+33,8:onssgosub700,705
460 printtab(5)"{down}{down}{down}{down}{down}{down}von vorn..........taste v":printtab(5)"(punkte auf 0)"
465 printtab(5)"{down}weiter.........taste w oder fire"
470 geta$:ifpeek(j)and16thenifa$<>"v"anda$<>"w"then470
475 ifa$="v"then60
480 goto95
489 rem tonerzeugung bei spielende
490 fori=0to3:forf=20to50:pokes+8,f:next:next:return
499 rem ton und ramenfarbe, wenn see ge-troffen
500 pokes+5,9:pokes+6,58:pokev+32,8:pokes+4,0:pokes+4,129
505 fori=10tomstep.3:pokes+1,i:next:pokev+32,11
510 fori=25to70step.3:pokes+1,i:next:pokev+32,8:pokes+4,128
515 fori=0to300:next:pokes+5,5:pokev+32,11:goto255
549 rem eingabe winkel und schlagstaerke
550 pokes+1,w:pokes+5,2:pokes+4,32:pokez,r(u):pokes+4,33:pokes+1,30
555 f=notpeek(j):iffand16then595
560 iffand4thenp=p+(p=m)*p+1:goto635
565 iffand8then630
570 geta$:ifa$=""then555
575 ifa$="{left}"thenp=p+(p=m)*p+1:goto635
580 ifa$="{rght}"then630
585 ifa$<>" "then555
590 fori=0to180:next
595 i=853:t=0:g=2:s(n)=s(n)+1
600 ifg>13theng=g^1:goto620
605 g=g+.23:ift>7thent=0:i=i+1:ifi=856theni=1011
610 ifi=1013thenf=g(t)or1:pokei,f:pokei+3,f:pokei+6,f:goto620
615 pokei,g(t):pokei+3,g(t):pokei+6,g(t)
620 t=t+1:geta$:ifnotpeek(j)and16ora$=" "then600
625 t=p(p+10):onssgosub670,685:pokes+4,0:pokes+5,5:return
630 p=p-(p=0)*m-1
635 y%=11-9*p(p):x%=11.5+10*p(p+10):a%=x%/8:u=x%and7
640 pokez,0:z=896+a%+3*y%:pokez,r(u):goto555
649 rem geschwindigkeits-skala loeschen
650 poke1019,1:poke1016,1:poke1013,1:poke1018,0:poke1015,0:poke1012,0
655 poke1017,0:poke1014,0:poke1011,0:poke861,0:poke858,0:poke855,0
660 poke860,0:poke857,0:poke854,0:poke859,128:poke856,128:poke853,128:return
669 rem bildschirmkopf fuer 1 spieler
670 print"{home}"
675 printtab(9)"{rvon}spiel"sptab(24)"{rvof}schlaege:"s(1):return
679 rem bildschirmkopf fuer 2 spieler
680 poke1041+n*24,81:poke55313+n*24,15
685 print"{home}"
690 print"{rght}{rght}1.spieler"s(1)tab(18)"{rvon}"sp"{left} "tab(26)"{rvof}2.spieler"s(2):return
699 rem auswertung fuer 1 spieler
700 gosub675:printtab(13)"{down}{down}bestes spiel"bs(1):printtab(13)"{down}summe"sm(1):return
704 rem auswertung fuer 2 spieler
705 gosub690:print"{down}{down} bestes sp."bs(1)tab(25)"bestes sp."bs(2)
710 print"{down} summe"sm(1)tab(25)"summe"sm(2):return
755 data-88,-89,-90,-50,-10,30,70,71,72,32,-8,-9,-85,-86,-87,-47,-7,33,73,74
760 data75,35,-5,-45,-84,-44,-4,36,76,77,78,79,39,-1,,-41,-81,-80,-79
765 data192,128,160,99,96,192,227,119,48,224,247,120,24,240,248,226
770 data12,248,98,249,6,252,121,239,3,254,111,228,3,255,100,160
774 rem sin-tabelle
775 data.001,.156,.309,.454,.588,.707,.809,.891,.951,.986,.999
779 rem sprite 'skala links'
780 data226,57,200,166,8,74,162,57,206,162,32,66,226,57,194
785 data8,66,16,255,255,255,128,,,128,,,128,,,255,255,255
789 rem sprite 'skala rechts'
790 data115,156,231,66,4,165,115,136,231,18,136,161,115,136,231
795 data132,33,8,255,255,255,,,1,,,1,,,1,255,255,255,
799 rem sprite 'fahne'
800 data,12,,,13,,,13,64,,13,64,,13,16,,13,84,,13,80,,13,,
805 data12,,,12,,,12,,,12,,,12,,,12,,,12,,,63
809 rem sprite 'tanne'
810 data8,,,8,,,42,,,34,,,168,128,,170,128,2,170,128,2,170
815 data160,10,46,160,10,190,168,10,62,40,,60,,,60,,,60,,
819 rem sprite 'kleiner baum'
820 data,170,,2,170,128,10,170,168,10,42,168,42,168,168,34,130,170,42,42
825 data170,40,170,42,168,138,170,162,40,162,40,170,170,170,170,168,138,186
830 data160,170,186,,40,60,,,60,,,60,,,60,,,60,,,60,,,60,,
834 rem sprite 'grosser baum - laub'
835 data31,240,,59,254,,59,255,,125,207,128,124,191,224,126,127,224,223,127
840 data112,227,63,176,125,63,176,62,30,112,1,153,176,,3,224,,1,224,
845 data,,24,,,118,,,205,,,240,,,,,,,,,,,,
849 rem sprite 'grosser baum - stamm'
850 data,,,4,,,4,,,2,48,,3,64,,1,128,,32,128
855 data128,28,192,64,2,192,64,1,225,128,0,102,64,,124,,,120,,
860 data112,,6,112,,9,240,,48,240,,,112,0,,112,,,112,,,112,,
864 rem sprite 'sandfelder'
865 data,2,170,,,,,85,85,,,,10,170,170,,,,5,85
870 data85,,,,42,170,170,,,,85,85,85,,,,42,170,168,
875 data,,85,85,80,,,,170,170,128,,,,85,85,64,,,,170,170,,
885 rem mit den variablen sx und sy kann in zeile 15 fuer bild 2 das gefaelle
886 rem  in x- und y-richtung getrennt   eingestellt werden.
890 rem fuer s/w-geraet oder -monitor    bitte folgende zeilen aendern
891 rem 100 pokev+33,8...
892 rem 145 ...pokey+i+x*m,12...
893 rem 320 ...pokev+33,8...
894 rem 435 ...pokev+32,0
895 rem 440 ...pokev+33,12...
896 rem 445 ...pokev+33,8...
897 rem 500 ...pokev+32,12...
898 rem 510 ...pokev+32,12...
900 rem-zeilen brauchen nicht mit einge- geben zu werden!
  0 REM     ** GOLF ('85) *** 
  1 REM     *  ----------   * 
  2 REM     * B.TERTELMANN  * 
  3 REM     * OSTENDORF 36  * 
  4 REM     * 4435 HORSTMAR *                       ***************** 
  5 PRINT"{CLR,GREY3}* GOLF *":V=53248:POKE V+21,0:POKE V+32,11:POKE V+33,11:GOTO 15 
  6 REM V+16 FUER BAEUME UND BALLBEWEGUNG 
  7 IF Z>W THENZ=ZAND W:POKE V6,C 
  8 RETURN 
  9 IF D-C>W THENPOKE V6,PEEK (V6)OR 16:C=W+1:RETURN 
 10 IF D<C THENPOKE V6,PEEK (V6)AND NOT 16:C=0 
 11 RETURN 
 15 V6=V+16:V0=V+30:V1=V0+1:O=21.9:W=255:M=40:SX=.8:SY=.8:S=54272:J=56320:B=2040 
 16 DIM P%(38),P(50):FOR I=0 TO38:READ P%(I):NEXT 
 17 FOR I=0 TO7:READ R(I),G(I),B(I),H(I):NEXT :N=20 
 18 FOR I=0 TO10:READ P(I):P(N+I)=-P(I):P(N-I)=P(I):P(M-I)=-P(I):P(M+I)=P(I):NEXT 
 20 FOR I=832 TO864:READ Q:POKE I,Q:NEXT :FOR I=I TO989:POKE I,0:NEXT 
 25 FOR I=I TOI+33:READ Q:POKE I,Q:NEXT :FOR I=12800 TOI+46:READ Q:POKE I,Q:NEXT 
 30 FOR I=I TOI+38:POKE I,0:NEXT :FOR I=I TOI+297:READ Q:POKE I,Q:NEXT 
 35 POKE 924,24:POKE 927,60:POKE 930,60:POKE 933,24:POKE V+42,5:POKE V+43,1:REM BALL 
 40 DEF FN B(X)=O+(SIN (X/2)+COS (X/4))/2:REM BODENKURVE FUER 1.BILD 
 42 DEF FN H(X)=K+SIN (X/5)/2+(X-A)*L:REM    HORIZONT FUER 2.BILD 
 45 POKE V+37,10:POKE V+38,0:POKE B,200:POKE B+3,203:POKE B+4,14 
 50 POKE S,0:POKE S+6,0:POKE S+7,0:POKE S+9,0:POKE S+10,8 
 55 POKE S+13,0:POKE S+14,0:POKE S+19,9:POKE S+20,0:POKE S+24,15 
 60 PRINT"{CLR,BLUE,4DOWN}":POKE V+33,6:POKE V+32,11 
 62 PRINTTAB( 14)"U*IU*II{2SPACE}U*I" 
 65 PRINTTAB( 14)"-{2SPACE}- --{2SPACE}-" 
 68 PRINTTAB( 14)"-*I- --{2SPACE}Q*" 
 70 PRINTTAB( 14)"- -- --{2SPACE}-" 
 72 PRINTTAB( 14)"J*KJ*KJ*KK{DOWN}" 
 75 PRINTTAB( 14)"************{6DOWN,BLACK}" 
 80 PRINTTAB( 8)"1 SPIELER.......TASTE 1{DOWN}" 
 82 PRINTTAB( 8)"2 SPIELER.......TASTE 2":I=10 
 85 GET A$:IF A$="1"OR A$="2" THEN90 
 86 A=55600:FOR K=0 TO38:POKE A+P%(K),I^1:NEXT 
 87 FOR K=0 TO11:POKE 55750+K,I^1:NEXT :I=7-(I=7)*3:GOTO 85 
 90 SS=VAL (A$):BS(1)=999:BS(2)=999:SM(1)=0:SM(2)=0:SP=0 
 95 S(1)=0:S(2)=0:SP=SP+1:FOR N=1 TOSS:POKE S+8,15:POKE S+12,5:POKE S+15,150 
 99 REM VORBEREITUNG BILD 1 
 100 POKE V+33,9:PRINT"{CLR}":POKE V+33,6:POKE V+32,11:POKE V+23,42:POKE V+29,232 
 105 POKE V+28,7:POKE V+40,5:POKE V+41,5:POKE V+44,0:POKE V+45,15:POKE V+46,15 
 110 POKE B+1,201:POKE B+2,202:POKE B+5,204:POKE B+6,13:POKE B+7,15 
 115 Q=RND (TI):A=Q*9999:A%=Q*20:X=A+A%:H=FN B(X) 
 120 Y=FN B(X+10):IF Y+1<H THEN115 
 125 IF Y>H THENH=Y 
 130 Z=A%+55297+INT (H)*M:FOR I=0 TO8:POKE Z+I,14:NEXT 
 135 Z=Z+41:FOR I=0 TO6:POKE Z+I,14:NEXT :L=A%+1024:R=L+10 
 140 K=0:FOR X=A+37 TOA+39:IF FN B(X)>=22 THENK=1 
 145 NEXT :Y=56173:FOR I=0 TO2:FOR X=0 TOK:POKE Y+I+X*M,8:NEXT :NEXT 
 150 POKE V6,1:POKE V,64:POKE V+1,FN B(A+38)*8+35 
 155 K=1:IF A%>14 THENK=3:GOTO 165 
 160 IF A%>7 THENK=2 
 165 X%(K-1)=A%+8:FOR I=K TO3:X%(I)=RND (1)*(11+I*6-X%(I-1))+X%(I-1)+6:NEXT 
 170 ON KGOTO 185,180 
 175 X%(1)=RND (1)*(A%-12)+4:X%(2)=RND (1)*(A%-8-X%(1))+X%(1)+6:GOTO 185 
 180 X%(1)=RND (1)*(A%-6)+4 
 185 X%=RND (1)*3+1 
 190 Y%=RND (1)*3+1:IF Y%=X% THEN190 
 195 K=6-X%-Y%:X=X%(X%):Z=X*8+18:C=3:GOSUB 7:POKE V+2,Z:POKE V+3,FN B(X+A)*8+8 
 200 X=X%(Y%):Z=X*8+18:C=5:GOSUB 7:POKE V+4,Z:POKE V+5,FN B(X+A)*8+29 
 205 X=X%(K):Z=X*8+8:C=41:GOSUB 7:POKE V+6,Z:POKE V+10,Z 
 210 Z=FN B(X+A)*8+8:POKE V+7,Z:POKE V+11,Z:POKE V+8,0 
 215 POKE V+12,132:POKE V+13,73:POKE V+14,180:POKE V+15,63 
 220 X=A:FOR I=1024 TO1063:IF I>LAND I<R THENY=H:GOTO 230 
 225 Y=FN B(X) 
 230 Y%=Y:POKE I+M*Y%,B(8*(Y-Y%)):FOR Y=Y%+1 TO24:POKE I+M*Y,160:NEXT :X=X+1:NEXT 
 235 PRINT"{BLACK}":ON SSGOSUB 670,680:L=A%+2:R=L+10 
 240 PRINTTAB( 5)"{RED,4DOWN}D{RVSON}V{SPACE,SPACE}C{RVOFF}F":PRINTTAB( 5)"{RVSON}V{SPACE,3SPACE}C" 
 245 PRINTTAB( 5)"{RVSON,2SPACE,GREY2,14SPACE}":PRINTTAB( 3)"{RVSON}@@@@@@@@@@@@@@@@@@@@@@{RIGHT}@@" 
 250 PRINTTAB( 5)"{RVSON,RED}F{4SPACE}D{BLACK}":POKE V+21,W:Z=931:P=0:U=5 
 254 REM SPIEL BILD 1 
 255 C=0:X=A:X%=0:D=14 
 260 POKE S+6,0:Y=FN B(X):E=Y*8+37:X=0 
 265 POKE V+8,D-C:POKE V+9,E:POKE V+27,0:GOSUB 650:IF X%>38 THEN310 
 270 GOSUB 550:F=2*SGN (T):K=F:G=G*T:G=G*G:T=P(P)/T:POKE V+27,16 
 275 POKE Z,0:POKE S+4,129:Y=PEEK (V0)+PEEK (V1) 
 280 D=D+K:IF D<14OR D>328 THENPOKE S+5,9:POKE S+4,0:POKE S+4,17:K=-K:D=D+K+K 
 285 IF PEEK (V0)AND 14 THENPOKE S+18,0:POKE S+18,129:K=-K:D=D+K+K 
 290 X=X+F:Y=E+X*(X/G-T):IF Y>240 THEN300 
 295 GOSUB 9:POKE V+8,D-C:POKE V+9,Y:IF NOT PEEK (V1)AND 16 THEN280 
 300 X%=D/8+.5:IF X%>LAND X%<R THENPOKE V+9,H*8+40:GOTO 500 
 305 POKE S+11,0:POKE S+11,17:X=X%-2+A:D=X%*8-2:GOSUB 9:GOTO 260 
 309 REM ENDE BILD 1 
 310 PRINT"{3DOWN}":FOR I=0 TO28:FOR K=0 TO4:PRINT"{RIGHT}";CHR$ (20):NEXT :PRINT"{UP,5UP}" 
 315 POKE S+18,16:POKE S+18,17:FOR T=0 TO50:NEXT :NEXT 
 319 REM VORBEREITUNG BILD 2 
 320 POKE V+21,0:PRINT"{CLR}":POKE V+33,9:POKE V,207:POKE V+1,120:POKE V+28,1 
 325 POKE B+1,13:POKE B+2,15:POKE B+5,205:POKE B+6,205:POKE B+7,205 
 330 POKE V+40,15:POKE V+41,15:POKE V+44,7:POKE V+45,13:POKE V+46,7 
 335 FOR I=V+10 TOV+13:POKE I,RND (1)*140+25:I=I+1:POKE I,RND (1)*85+120:NEXT 
 340 POKE V+14,RND (1)*62:POKE V+15,RND (1)*85+120:POKE V6,128 
 345 E=(Y-19)*50+35:D=INT ((RND (1)+X%-39)*104+15):C=0:GOSUB 9 
 350 POKE V+8,D-C:POKE V+9,E:POKE S+8,5:POKE S+12,96 
 355 POKE V+2,132:POKE V+3,73:POKE V+4,180:POKE V+5,63 
 360 X%=(FN B(A+39)-FN B(A+37))*7:Q=SGN (X%):L=Q/9:K=6-Q-Q:Q=Q*SX:POKE 55720,0 
 365 X=A:FOR I=1024 TO1063:Y=FN H(X):Y%=Y:FOR T=0 TOY%-1:POKE I+T*M,160:NEXT 
 370 POKE I+M*Y%,H(8*(Y-Y%)):X=X+1:NEXT 
 375 POKE S+15,15:ON SSGOSUB 670,680:POKE V+23,192:POKE V+29,102:POKE V+21,247 
 380 GOSUB 650:GOSUB 550:G=G/4+1:F=P(P):POKE Z,0:POKE S+4,129 
 384 REM SPIEL BILD 2 
 385 I=PEEK (V0)+PEEK (V1):FOR I=G TO1STEP -.07:X0=D:Y0=E:IF I<3 THEND=D+Q:E=E+SY 
 390 D=D+T*I:IF D<14OR D>330 THENPOKE S+18,0:POKE S+18,17:T=-P(P+10):D=X0 
 395 IF PEEK (V1)AND 16 THENIF E<109 THENE=FN H((D-14)/8+A)*8+M:I=I-.1:GOTO 415 
 400 H=PEEK (V0):E=E-F*I:IF E>237 THENPOKE S+18,0:POKE S+18,17:F=-P(P):E=Y0 
 405 IF HAND 16 THENIF NOT HAND 1 THENI=I-.4:POKE S+11,0:POKE S+11,129 
 410 IF E<126AND E>120 THENIF D<211AND D>205 THEN435 
 415 D=INT (D+.5):Y%=E+.5:GOSUB 9:POKE V+8,D-C:POKE V+9,Y%:NEXT 
 420 IF PEEK (V1)AND 16 THENIF E<109 THENPOKE V+9,Y%+3:E=E+3 
 425 IF E<160 THENIF D<250AND D>170 THENPOKE 1448,87:POKE V+21,246:GOTO 380 
 430 POKE 1448,32:POKE V+21,247:GOTO 380 
 434 REM SPIELENDE UND AUSWERTUNG 
 435 POKE V+8,208:POKE V+9,123:GOSUB 650:POKE S+12,0:POKE S+13,89:POKE V+32,2 
 440 POKE S+11,0:POKE S+11,65:GOSUB 490:POKE V+33,8:GOSUB 490:POKE V+32,11 
 445 GOSUB 490:POKE V+33,9:GOSUB 490:POKE V+21,0:POKE S+11,0:POKE S+13,0:NEXT N 
 450 FOR I=1 TOSS:SM(I)=SM(I)+S(I):IF S(I)<BS(I) THENBS(I)=S(I) 
 455 NEXT :PRINT"{CLR,4DOWN}":POKE V+33,8:ON SSGOSUB 700,705 
 460 PRINTTAB( 5)"{6DOWN}VON VORN..........TASTE V":PRINTTAB( 5)"(PUNKTE AUF 0)" 
 465 PRINTTAB( 5)"{DOWN}WEITER.........TASTE W ODER FIRE" 
 470 GET A$:IF PEEK (J)AND 16 THENIF A$<>"V"AND A$<>"W" THEN470 
 475 IF A$="V" THEN60 
 480 GOTO 95 
 489 REM TONERZEUGUNG BEI SPIELENDE 
 490 FOR I=0 TO3:FOR F=20 TO50:POKE S+8,F:NEXT :NEXT :RETURN 
 499 REM TON UND RAMENFARBE, WENN SEE GE-TROFFEN 
 500 POKE S+5,9:POKE S+6,58:POKE V+32,8:POKE S+4,0:POKE S+4,129 
 505 FOR I=10 TOMSTEP .3:POKE S+1,I:NEXT :POKE V+32,11 
 510 FOR I=25 TO70STEP .3:POKE S+1,I:NEXT :POKE V+32,8:POKE S+4,128 
 515 FOR I=0 TO300:NEXT :POKE S+5,5:POKE V+32,11:GOTO 255 
 549 REM EINGABE WINKEL UND SCHLAGSTAERKE 
 550 POKE S+1,W:POKE S+5,2:POKE S+4,32:POKE Z,R(U):POKE S+4,33:POKE S+1,30 
 555 F=NOT PEEK (J):IF FAND 16 THEN595 
 560 IF FAND 4 THENP=P+(P=M)*P+1:GOTO 635 
 565 IF FAND 8 THEN630 
 570 GET A$:IF A$="" THEN555 
 575 IF A$="{LEFT}" THENP=P+(P=M)*P+1:GOTO 635 
 580 IF A$="{RIGHT}" THEN630 
 585 IF A$<>" " THEN555 
 590 FOR I=0 TO180:NEXT 
 595 I=853:T=0:G=2:S(N)=S(N)+1 
 600 IF G>13 THENG=G^1:GOTO 620 
 605 G=G+.23:IF T>7 THENT=0:I=I+1:IF I=856 THENI=1011 
 610 IF I=1013 THENF=G(T)OR 1:POKE I,F:POKE I+3,F:POKE I+6,F:GOTO 620 
 615 POKE I,G(T):POKE I+3,G(T):POKE I+6,G(T) 
 620 T=T+1:GET A$:IF NOT PEEK (J)AND 16OR A$=" " THEN600 
 625 T=P(P+10):ON SSGOSUB 670,685:POKE S+4,0:POKE S+5,5:RETURN 
 630 P=P-(P=0)*M-1 
 635 Y%=11-9*P(P):X%=11.5+10*P(P+10):A%=X%/8:U=X%AND 7 
 640 POKE Z,0:Z=896+A%+3*Y%:POKE Z,R(U):GOTO 555 
 649 REM GESCHWINDIGKEITS-SKALA LOESCHEN 
 650 POKE 1019,1:POKE 1016,1:POKE 1013,1:POKE 1018,0:POKE 1015,0:POKE 1012,0 
 655 POKE 1017,0:POKE 1014,0:POKE 1011,0:POKE 861,0:POKE 858,0:POKE 855,0 
 660 POKE 860,0:POKE 857,0:POKE 854,0:POKE 859,128:POKE 856,128:POKE 853,128:RETURN 
 669 REM BILDSCHIRMKOPF FUER 1 SPIELER 
 670 PRINT"{HOME}" 
 675 PRINTTAB( 9)"{RVSON}SPIEL"SPTAB( 24)"{RVOFF}SCHLAEGE:"S(1):RETURN 
 679 REM BILDSCHIRMKOPF FUER 2 SPIELER 
 680 POKE 1041+N*24,81:POKE 55313+N*24,15 
 685 PRINT"{HOME}" 
 690 PRINT"{2RIGHT}1.SPIELER"S(1)TAB( 18)"{RVSON}"SP"{LEFT,SPACE}"TAB( 26)"{RVOFF}2.SPIELER"S(2):RETURN 
 699 REM AUSWERTUNG FUER 1 SPIELER 
 700 GOSUB 675:PRINTTAB( 13)"{2DOWN}BESTES SPIEL"BS(1):PRINTTAB( 13)"{DOWN}SUMME"SM(1):RETURN 
 704 REM AUSWERTUNG FUER 2 SPIELER 
 705 GOSUB 690:PRINT"{2DOWN,SPACE}BESTES SP."BS(1)TAB( 25)"BESTES SP."BS(2) 
 710 PRINT"{DOWN,SPACE}SUMME"SM(1)TAB( 25)"SUMME"SM(2):RETURN 
 755 DATA -88,-89,-90,-50,-10,30,70,71,72,32,-8,-9,-85,-86,-87,-47,-7,33,73,74 
 760 DATA 75,35,-5,-45,-84,-44,-4,36,76,77,78,79,39,-1,,-41,-81,-80,-79 
 765 DATA 192,128,160,99,96,192,227,119,48,224,247,120,24,240,248,226 
 770 DATA 12,248,98,249,6,252,121,239,3,254,111,228,3,255,100,160 
 774 REM SIN-TABELLE 
 775 DATA .001,.156,.309,.454,.588,.707,.809,.891,.951,.986,.999 
 779 REM SPRITE 'SKALA LINKS' 
 780 DATA 226,57,200,166,8,74,162,57,206,162,32,66,226,57,194 
 785 DATA 8,66,16,255,255,255,128,,,128,,,128,,,255,255,255 
 789 REM SPRITE 'SKALA RECHTS' 
 790 DATA 115,156,231,66,4,165,115,136,231,18,136,161,115,136,231 
 795 DATA 132,33,8,255,255,255,,,1,,,1,,,1,255,255,255, 
 799 REM SPRITE 'FAHNE' 
 800 DATA ,12,,,13,,,13,64,,13,64,,13,16,,13,84,,13,80,,13,, 
 805 DATA 12,,,12,,,12,,,12,,,12,,,12,,,12,,,63 
 809 REM SPRITE 'TANNE' 
 810 DATA 8,,,8,,,42,,,34,,,168,128,,170,128,2,170,128,2,170 
 815 DATA 160,10,46,160,10,190,168,10,62,40,,60,,,60,,,60,, 
 819 REM SPRITE 'KLEINER BAUM' 
 820 DATA ,170,,2,170,128,10,170,168,10,42,168,42,168,168,34,130,170,42,42 
 825 DATA 170,40,170,42,168,138,170,162,40,162,40,170,170,170,170,168,138,186 
 830 DATA 160,170,186,,40,60,,,60,,,60,,,60,,,60,,,60,,,60,, 
 834 REM SPRITE 'GROSSER BAUM - LAUB' 
 835 DATA 31,240,,59,254,,59,255,,125,207,128,124,191,224,126,127,224,223,127 
 840 DATA 112,227,63,176,125,63,176,62,30,112,1,153,176,,3,224,,1,224, 
 845 DATA ,,24,,,118,,,205,,,240,,,,,,,,,,,, 
 849 REM SPRITE 'GROSSER BAUM - STAMM' 
 850 DATA ,,,4,,,4,,,2,48,,3,64,,1,128,,32,128 
 855 DATA 128,28,192,64,2,192,64,1,225,128,0,102,64,,124,,,120,, 
 860 DATA 112,,6,112,,9,240,,48,240,,,112,0,,112,,,112,,,112,, 
 864 REM SPRITE 'SANDFELDER' 
 865 DATA ,2,170,,,,,85,85,,,,10,170,170,,,,5,85 
 870 DATA 85,,,,42,170,170,,,,85,85,85,,,,42,170,168, 
 875 DATA ,,85,85,80,,,,170,170,128,,,,85,85,64,,,,170,170,, 
 885 REM MIT DEN VARIABLEN SX UND SY KANN IN ZEILE 15 FUER BILD 2 DAS GEFAELLE 
 886 REM  IN X- UND Y-RICHTUNG GETRENNT   EINGESTELLT WERDEN. 
 890 REM FUER S/W-GERAET ODER -MONITOR    BITTE FOLGENDE ZEILEN AENDERN 
 891 REM 100 POKEV+33,8... 
 892 REM 145 ...POKEY+I+X*M,12... 
 893 REM 320 ...POKEV+33,8... 
 894 REM 435 ...POKEV+32,0 
 895 REM 440 ...POKEV+33,12... 
 896 REM 445 ...POKEV+33,8... 
 897 REM 500 ...POKEV+32,12... 
 898 REM 510 ...POKEV+32,12... 
 900 REM -ZEILEN BRAUCHEN NICHT MIT EINGE- GEBEN ZU WERDEN! 
Listing zu »Golf«.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →