C 64
Anwendung des Monats

Der C64 als Handballtrainer

Für eine erfolgreiche Trainingsarbeit ist es unabdingbar, bereits in der Jugendarbeit neben den praktischen Übungen mit und ohne Ball den Spielern taktische Kenntnisse zu vermitteln.

Darstellung eines Angriffszuges

Das Standardgerät hierfür ist die berühmte Kreidetafel, auf der mit mehr oder weniger Geschick des Trainers die Bewegungen des Balles und der Spieler dargestellt werden. Da das Handballspiel nun einmal ein dynamisches und komplexes Spiel ist, sieht so eine Darstellung sehr oft wie ein Schnittmusterbogen aus. An diesem Punkt setzte die Überlegung ein, ob es nicht möglich wäre, hierfür die grafischen Fähigkeiten des C 64 zu nutzen. Zu diesem Zweck wurden einige grundlegende taktische Regeln des Handballspiels ausgewählt.

  1. Darstellung der Angriffssysteme 5:1, 4:2, 3:3 und 2:4
  2. Darstellung der Abwehrsysteme 5:1, 4:2, 6:0 und 3:2:1
  3. Taktische Spielarten wie Passen, Stoßen, Laufspiel (Achterlauf) und Abwehren

Da die Anzahl der darzustellenden beweglichen Objekte beim C 64 auf acht begrenzt ist, aber im realistischen Fall 13 bewegte Objekte erforderlich sind (sechs Angriffsspieler, sechs Abwehrspieler und ein Ball) wurde ein Kompromiß geschlossen. Bei den taktischen Spielweisen Passen, Stoßen und Laufspiel wurden die Angriffsspieler als bewegliche Objekte dargestellt, beim Abwehren jedoch die Abwehrspieler.

Das Programm wurde erstmalig bei der Schulung von A-Jugendlichen eingesetzt. Darüber hinaus wird mit diesem Programm dem interessierten Laien das Handballspiel durchschaubarer und damit wesentlich interessanter gemacht.

(Manfred Luttkus/rg)

Das Handball-Demonstrationsprogramm ist in Basic geschrieben, modular aufgebaut und nutzt vornehmlich die grafischen Fähigkeiten des C 64.

Das Programm ist im wesentlichen in drei Blöcke unterteilt. Im ersten Block sind die DATA-Zeilen abgelegt. Danach folgt der Programmabschnitt mit der Menüauswahl und der Sprite-Aktivierung. Abgeschlossen wird das Programm mit den Unterprogrammen für die einzelnen Programm-Module.

Programmablauf

Nach dem Start des Programmes mit RUN erscheint das Titelbild während des Einlesens der DATA-Zeilen. Anschließend wird das halbe Spielfeld mit dem normalen Zeichensatz dargestellt und auf der rechten Seite des Bildschirmes das Menü angeboten. Aus den drei Hauptgruppen Angriffssystem (Auswahlelemente A—D), Abwehrsystem (Auswahlelemente E—H) und Taktik (Auswahlelemente I—M)

wird jeweils ein Element ausgewählt. Nach dieser Programmauswahl werden die beweglichen Spieler (beim Passen, Stoßen und Laufspiel sind es die Angriffsspieler), der Ball und die statischen Spieler (beim Abwehren sind es die Angriffsspieler) auf dem Bildschirm dargestellt. Entsprechend der gewählten Taktik wird dann die Spielart Passen, Stoßen, Achter oder Abwehren demonstriert. Das Programm wird durch das Drücken einer beliebigen Taste unterbrochen und zum Menü zurückgeführt. Anhand der Darstellungen können die Vorzüge der einzelnen Abwehr- und Angriffssysteme begreifbar gemacht, sowie die Aufgaben der einzelnen Spieler auf den verschiedensten Positionen klar beschrieben werden.

Programmlisting

Aus speichertechnischen Gründen (die Sprites sind im Bereich 15872 — 16834 abgelegt) mußte im Programmlisting auf kommentierende Zeilen verzichtet werden. Entsprechende Erläuterungen sind im nachfolgenden Abschnitt angegeben. Zum besseren Verständnis:

(Manfred Luttkus/rg)
Bild 1. Spielfeldplan
Bild 2. Grundaufstellung, Abwehrspieler (5 : 1)
1000-1010 Daten für Spielbewegung »Achter«
3000-3020 Daten für Spielbewegung »Abwehren«
4000-4120 Daten für Spielfeld
20010-20174 Daten für Abwehr- und Angriffs-Sprites
30002-30005 Bildschirmfarben und Titelbild
30008-30020 Daten einlesen für Spielbewegung »Achter« und »Abwehren«
30030-30060 Daten einlesen für Spielfeld-Darstellung
30065-30066 Daten einlesen für Abwehr- und Angriffs-Sprites
30068-30135 Menü und Menüauswahl
30140-30197 Grundstellung für Abwehr- und Angriffs-Sprites
30200-31000 Verzweigung zu den Programmodulen
36000-36084 Standardkoordinaten der Angriffs- und Abwehr- Sprites
38000-38300 Programm-Modul »Abwehren«
40000-40080 Sprites-Daten auswählen und Sprites »einschalten«
42000-43990 Programm-Modul »Stoßen«
44000-44250 Programm-Modul »Passen«
50000-50160 Programm-Modul »Achter«
55000 Auswahlroutine
60000-60150 Unterprogramm für die Grundstellung der Angriffs- und Abwehr-Sprites
60200-60450 Unterprogramm für die Sprite-Position
63000 Programmende
Aufbau des Programms Handballtrainer
|
10 rem " handball20 vom 04.8.84 "
20 dimzesp%(1,7),ds%(1010),po%(5,9)
1000 data1,2,2,4,4,5,5,4,4,3,3,1,1,0,0,1
1010 data0,1,1,2,2,0,1,2,2,0,0,1,2,0,0,1,1,2,3,5,5,4,4,3,4,3,3,5,5,4,5,4,4,3,3,5
3000 data1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,1,1,1,1,2,3
3010 data-1,-1,-1,-1,1,1,2,2,2,2,-2,-2,-1,-1,-1,-1,-1,-1,1,1
3020 data-3,-2,-2,-2,-2,-1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
4000 data1,1,108,1,22,123,22,22,126,22,1,124
4010 data98,97,226,225
4020 data10,0,220,11,0,220,12,0,220,13,0,220
4030 data10,1,226,11,1, 72,12,1, 72,13,1,98                   
4040 data5,2,120,5,3,120,5,4, 81,5,5,123,6,5,124              
4050 data6,6,123,7,6,124,7,7,123,8,7,81,9,7,225              
4060 data10,7,225,11,7,225,12,7,225,13,7,225,14,7,225
4070 data15,7, 81,16,7,126,16,6,108,17,6,126,17,5,108         
4080 data18,5,126,18,4, 81,18,3,121,18,2,121                  
4090 data2,4,124,2,6,123,3,7,108,5,9,126,6,10,123
4100 data8,10,124,9,10,108,11,10,124,12,10,108
4110 data14,10,124,15,10,108,17,10,126,18,9,123
4120 data20,7,124,21,6,126,21,4,108
20010 data0,504,63,567,126,630,189,693,252,756,315,819,378,882,441,945
20020 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
20022 data0,60,0,0,126,0,0,255,0,0,255,0,0,255,0,0,255,0,0,126,0,0,60,0
20024 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
20030 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0
20032 data8,24,0,24,56,0,8,124,0,8,102,0,8,67,0,8,64,0,28,96,0
20034 data0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0
20040 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0
20042 data28,24,0,34,56,0,2,124,0,4,102,0,8,99,0,16,96,0,62,96,0
20044 data0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0
20050 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0
20052 data62,24,0,4,56,0,8,124,0,28,102,0,2,67,0,2,64,0,60,96,0
20054 data0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0
20060 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0
20062 data4,24,0,12,56,0,20,124,0,36,102,0,62,67,0,4,64,0,4,96,0
20064 data0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0
20070 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0
20072 data62,24,0,32,56,0,60,124,0,2,102,0,2,67,0,34,64,0,28,96,0
20074 data0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0
20080 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0
20082 data12,24,0,16,56,0,32,124,0,60,102,0,34,67,0,34,64,0,28,96,0
20084 data0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0
20090 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0
20092 data62,24,0,2,56,0,4,124,0,8,102,0,8,67,0,8,64,0,8,96,0
20094 data0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0
20100 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
20102 data0,60,0,0,126,0,0,255,0,0,255,0,0,255,0,0,255,0,0,126,0,0,60,0
20104 data0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
20110 data0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0
20112 data0,28,16,0,52,48,0,246,16,3,6,16,0,6,16,0,60,16,0,60,56
20114 data0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0
20120 data0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0
20122 data0,28,56,0,52,68,0,246,4,0,6,8,0,6,16,0,60,32,0,60,124
20124 data0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0
20130 data0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0
20132 data0,28,124,0,52,8,0,246,16,0,6,56,0,6,4,0,60,4,0,60,120
20134 data0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0
20140 data0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0
20142 data0,28,8,0,52,24,0,246,40,0,6,72,0,6,124,0,60,8,0,60,8
20144 data0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0
20150 data0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0
20152 data0,28,124,0,52,64,0,246,120,0,6,4,0,6,4,0,60,68,0,60,56
20154 data0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0
20160 data0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0
20162 data0,28,24,0,52,32,0,246,64,0,6,120,0,6,68,0,60,68,0,60,56
20164 data0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0
20170 data0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0
20172 data0,28,124,0,52,4,0,246,8,0,6,16,0,6,16,0,60,16,0,60,16
20174 data0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0
30002 poke53281,11:poke53280,13:printchr$(147)
30005 forih=0to9:printchr$(17);:nextih:printtab(8)"h a n d b a l l d e m o"
30008 fori=1to8:forj=0to1:readzb%(i,j):nextj:nexti
30009 fori=0to5:forj=0to5:readzs%(i,j):nextj:nexti
30020 fori=0to5:forj=0to9:readpo%(i,j):next:next
30030 printchr$(147):ii=40:forxg=1to4
30035 ready,x,ch:poke1024+y*ii+x,ch:poke55296+y*ii+x,13:nextxg:readch
30040 forxg=2to21:poke1064+xg,ch:poke55336+xg,13:nextxg:readch
30045 forxg=2to21:poke1046+xg*ii,ch:poke55318+xg*ii,13:nextxg:readch
30050 forxg=2to21:poke1904+xg,ch:poke56176+xg,13:nextxg:readch
30055 forxg=2to21:poke1025+xg*ii,ch:poke55297+xg*ii,13:nextxg
30060 forxg=1to48:ready,x,ch:poke1024+y*ii+x,ch:poke55296+y*ii+x,13:nextxg
30065 fori=0to7:forj=0to1:readzesp%(j,i):nextj:nexti
30066 fori=0to1007:readds%(i):nexti
30068 forih=0to21:printchr$(17);:nextih
30069 forih=0to21:printchr$(145);:nextih
30070 printtab(23)"angriffssystem":printtab(27)"a 5:1":printtab(27)"b 4:2"
30076 printtab(27)"c 3:3":printtab(27)"d 2:4":gosub55000:x$=q$:print
30080 printtab(23)"abwehrsystem":printtab(27)"e 3:2:1":printtab(27)"f 4:2"
30086 printtab(27)"g 5:1":printtab(27)"h 6:0":gosub55000:y$=q$:print
30090 printtab(23)"taktik":printtab(27)"i passen":printtab(27)"k stossen"
30120 printtab(27)"l achter":printtab(27)"m abwehren":printtab(27)"z ende"
30135 gosub55000:z$=q$:print
30140 ifz$<>"m"thengosub60000:sit=1:a=-8
30150 ifz$="m"thengosub60100:sit=0:a=8
30160 v=53248:n=0:forih=0to6:n=n+2^ih:nextih:pokev+21,n
30165 forih=0to5:nrsp=2+ih:gosub40000:nextih
30170 nrsp=0:ih=6:sx(ih)=sx(4)+a:sy(ih)=sy(4):gosub40000
30175 ifz$="m"thengosub60000
30185 ifz$<>"m"thengosub60100
30186 forih=0to5:pokesc(ih),96:nextih
30190 forih=0to5
30192 ifsy(ih)=134 then sy(ih)=138
30194 sc(ih)=sx(ih)/8+5*sy(ih)+812:sz(ih)=sc(ih)+54272
30195 ifsit=0thenpokesc(ih),0:pokesz(ih),0
30196 ifsit=1thenpokesc(ih),0:pokesz(ih),1
30197 nextih
30200 ifz$="i"thengosub44000
30210 ifz$="k"thengosub42000
30220 ifz$="l"thengosub50000
30230 ifz$="m"thengosub38000
30240 ifz$="z"thengosub63000
31000 goto30069
36000 sx(0)=88:sx(1)=120:sx(2)=136:sx(3)=88:sx(4)=120:sx(5)=88
36004 sy(0)=74:sy(1)=90:sy(2)=134:sy(3)=134:sy(4)=178:sy(5)=194:return
36010 sx(0)=88:sx(1)=128:sx(2)=88:sx(3)=88:sx(4)=128:sx(5)=88
36014 sy(0)=74:sy(1)=106:sy(2)=114:sy(3)=154:sy(4)=162:sy(5)=194:return
36020 sx(0)=56:sx(1)=112:sx(2)=136:sx(3)=88:sx(4)=112:sx(5)=56
36024 sy(0)=66:sy(1)=82:sy(2)=134:sy(3)=134:sy(4)=186:sy(5)=202:return
36030 sx(0)=56:sx(1)=120:sx(2)=88:sx(3)=88:sx(4)=120:sx(5)=56
36034 sy(0)=66:sy(1)=90:sy(2)=114:sy(3)=154:sy(4)=178:sy(5)=202:return
36050 sx(0)=72:sx(1)=88:sx(2)=80:sx(3)=104:sx(4)=88:sx(5)=72
36054 sy(0)=178:sy(1)=162:sy(2)=134:sy(3)=134:sy(4)=106:sy(5)=90:return
36060 sx(0)=72:sx(1)=88:sx(2)=80:sx(3)=80:sx(4)=88:sx(5)=72
36064 sy(0)=178:sy(1)=162:sy(2)=146:sy(3)=122:sy(4)=106:sy(5)=90:return
36070 sx(0)=64:sx(1)=80:sx(2)=80:sx(3)=104:sx(4)=80:sx(5)=64
36074 sy(0)=186:sy(1)=162:sy(2)=134:sy(3)=134:sy(4)=106:sy(5)=82:return
36080 sx(0)=64:sx(1)=80:sx(2)=80:sx(3)=80:sx(4)=80:sx(5)=64
36084 sy(0)=186:sy(1)=170:sy(2)=146:sy(3)=122:sy(4)=98:sy(5)=82:return
38000 ig=1:xz=xb(ig)-16:yz=yb(ig)-16
38020 zy=int(rnd(1)*10):n=po%(ig,zy)
38040 x1=xb(ig):x2=xb(ig+n):y1=yb(ig):y2=yb(ig+n)
38050 gosub60400:gosub60450:qb=q:ub=u:nb=nt
38070 x1=vx(5-ig-n):x2=xb(ig+n):y1=vy(5-ig-n):y2=yb(ig+n)
38080 gosub60400:gosub60450:qa=q:ua=u
38100 x1=xz:x2=vx(5-ig):y1=yz:y2=vy(5-ig)
38110 gosub60400:gosub60450:qz=q:uz=u
38140 vs=4:nb=20:forin=0tonbstepvs
38150 xp=xb(ig)+int(qb*in/nb)-8
38160 yp=yb(ig)+int(ub*in/nb):gosub60200
38180 xp=vx(5-ig-n)+int(qa*in*0.5/nb):x1=xp
38190 yp=vy(5-ig-n)+int(ua*in*0.5/nb):y1=yp
38200 x=2*(5-ig-n):y=x+1:gosub60250
38210 xp=xz+int(qz*in/nb):yp=yz+int(uz*in/nb)
38230 x=2*(5-ig):y=x+1:gosub60250
38250 nextin
38280 xz=x1:yz=y1:ig=ig+n
38290 geta$:ifa$=""goto38020
38300 return
40000 poke2040+ih,248+ih:pokev+39+ih,1:ifsit=1thenpokev+39+ih,0
40040 j=zesp%(sit,nrsp):s1=15872+ih*64:s2=s1+62
40060 forkh=s1tos2:pokekh,ds%(j):j=j+1:nextkh
40080 x=2*ih:y=2*ih+1:xp=sx(ih):yp=sy(ih):gosub60250:return
42000 zz=0
42020 if(x$="d"orx$="b")thengosub43900
42030 if(x$="c"orx$="a")thengosub43950
42040 forxg=xatoxe:x1=xt(xg):x2=xt(xg+1):y1=yt(xg):y2=yt(xg+1):gosub60400
42060 forin=0tontstepvs:gosub60450:xp=xp-8:gosub60200:nextin:nextxg
42130 zz=30:gosub60000
42150 forxg=5to0step-1:x=2*xg:y=x+1
42160 ifxg=3goto42190
42170 if(xg=2andx$="b")or(xg=2andx$="d")goto42190
42180 forjj=0to5:zq=zz*jj/5:xp=sx(xg)+zq:yp=sy(xg):gosub60250
42185 xp=xb(5)+zq-8:yp=yb(5):gosub60200:nextjj
42190 nextxg
42210 n=1:zs=zz
42220 forxg=5to1step-1
42230 ifxg=3goto42380
42240 if(xg=2andx$="b")or(xg=2andx$="d")goto42380
42244 ifxg=4thenn=2
42248 if(xg=4andx$="b")or(xg=4andx$="d")thenn=3
42250 x=2*xg:y=x+1:xn=2*(xg-n):yn=xn+1
42260 fori=0tozzstepvs
42270 xp=sx(xg)+zs-i:yp=sy(xg):gosub60250:xx=sx(xg)+zs-8
42280 xp=xx-i:gosub60200:nexti
42300 qb=sx(xg-n)-sx(xg)+zz-zs:ub=sy(xg-n)-sy(xg)
42310 fori=0tozzstepvs
42330 x=xn:xp=sx(xg-n)-i+zz:y=yn:yp=sy(xg-n):gosub60250
42350 xp=xx+int(qb*i/zz)-zz:yp=yb(xg)+int(ub*i/zz):gosub60200:nexti:n=1:zs=0
42380 nextxg
42382 forih=0to5:nrsp=2+ih:gosub40080
42384 forjh=0to20:nextjh:nextih
42390 geta$:ifa$=""goto42000
43000 return
43900 xa=0:xe=2:vs=4
43920 xt(0)=xb(0)+zz:yt(0)=yb(0):xt(1)=xb(1)+zz:yt(1)=yb(1)
43921 xt(1)=xb(1)+zz:yt(1)=yb(1)
43930 xt(2)=xb(4)+zz:yt(2)=yb(4):xt(3)=xb(5)+zz:yt(3)=yb(5):return
43950 xa=0:xe=3:vs=4
43970 xt(0)=xb(0)+zz:yt(0)=yb(0):xt(1)=xb(1)+zz:yt(1)=yb(1)
43980 xt(2)=xb(2)+zz:yt(2)=yb(2):xt(3)=xb(4)+zz:yt(3)=yb(4)
43990 xt(4)=xb(5)+zz:yt(4)=yb(5):return
44000 xa=0:xe=4:vs=5
44020 forxg=xatoxe
44025 x2=xb(xg+1):x1=xb(xg):y2=yb(xg+1):y1=yb(xg):gosub60400
44060 forin=0tontstepvs:gosub60450:xp=xp-8:gosub60200:nextin:nextxg
44110 xa=5:xe=1:vs=5  
44120 forxg=xatoxestep-1
44125 x2=xb(xg-1):x1=xb(xg):y2=yb(xg-1):y1=yb(xg):gosub60400
44160 forin=0tontstepvs:gosub60450:xp=xp-8:gosub60200:nextin:nextxg
44205 geta$:ifa$=""goto44000
44250 return
50000 gosub36030:sx(1)=sx(1)+16:sx(4)=sx(4)+16
50010 forig=0to5:x=2*ig:y=x+1:xp=sx(ig):yp=sy(ig):gosub60250:nextig
50050 xp=sx(1)-8:yp=sy(1):gosub60200
50100 forjj=0to2:fortt=1to8
50110 x1=sx(zb%(tt,0))-8:x2=sx(zb%(tt,1))-8:y1=sy(zb%(tt,0)):y2=sy(zb%(tt,1))
50115 gosub60400
50120 if(tt=1)or(tt=5)thengosub50500
50130 forl=0to8:xp=x1+q*l/8:yp=y1+u*l/8:gosub60200
50140 if(tt=1)or(tt=5)thengosub50600
50150 nextl
50160 nexttt:nextjj
50200 geta$:ifa$=""goto50100
50300 return
50500 js=0:iftt=5thenjs=3
50510 fork=0to2:x=js+k:y=2*jj:z=y+1:s1=zs%(x,y):s2=zs%(x,z)
50515 xx(k)=sx(s1):yy(k)=sy(s1)
50520 qq(k)=sx(s2)-sx(s1):uu(k)=sy(s2)-sy(s1):nextk:return
50600 fork=0to2:x=(js+k)*2:y=x+1
50610 xp=xx(k)+qq(k)*l/8:yp=yy(k)+uu(k)*l/8:gosub60250:nextk:return
55000 printtab(23);chr$(18);:input"waehlen : ";q$:return
60000 ifx$="a"thengosub36000
60010 ifx$="b"thengosub36010
60020 ifx$="c"thengosub36020
60030 ifx$="d"thengosub36030
60040 forib=0to5:xb(ib)=sx(ib):yb(ib)=sy(ib):ax(ib)=sx(ib):ay(ib)=sy(ib):nextib
60050 return
60100 ify$="e"thengosub36050
60110 ify$="f"thengosub36060
60120 ify$="g"thengosub36070
60130 ify$="h"thengosub36080
60140 forii=0to5:vx(ii)=sx(ii):vy(ii)=sy(ii):nextii
60150 return
60200 pokev+12,xp:pokev+13,yp:return
60250 pokev+x,xp:pokev+y,yp:return
60400 q=x2-x1:u=y2-y1:nt=int(sqr(q*q+u*u)):return
60450 xp=x1+int(q*in/nt):yp=y1+int(u*in/nt):return
63000 end
 10 REM " HANDBALL20 VOM 04.8.84 " 
 20 DIM ZESP%(1,7),DS%(1010),PO%(5,9) 
 1000 DATA 1,2,2,4,4,5,5,4,4,3,3,1,1,0,0,1 
 1010 DATA 0,1,1,2,2,0,1,2,2,0,0,1,2,0,0,1,1,2,3,5,5,4,4,3,4,3,3,5,5,4,5,4,4,3,3,5 
 3000 DATA 1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,1,1,1,1,2,3 
 3010 DATA -1,-1,-1,-1,1,1,2,2,2,2,-2,-2,-1,-1,-1,-1,-1,-1,1,1 
 3020 DATA -3,-2,-2,-2,-2,-1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 
 4000 DATA 1,1,108,1,22,123,22,22,126,22,1,124 
 4010 DATA 98,97,226,225 
 4020 DATA 10,0,220,11,0,220,12,0,220,13,0,220 
 4030 DATA 10,1,226,11,1, 72,12,1, 72,13,1,98 
 4040 DATA 5,2,120,5,3,120,5,4, 81,5,5,123,6,5,124 
 4050 DATA 6,6,123,7,6,124,7,7,123,8,7,81,9,7,225 
 4060 DATA 10,7,225,11,7,225,12,7,225,13,7,225,14,7,225 
 4070 DATA 15,7, 81,16,7,126,16,6,108,17,6,126,17,5,108 
 4080 DATA 18,5,126,18,4, 81,18,3,121,18,2,121 
 4090 DATA 2,4,124,2,6,123,3,7,108,5,9,126,6,10,123 
 4100 DATA 8,10,124,9,10,108,11,10,124,12,10,108 
 4110 DATA 14,10,124,15,10,108,17,10,126,18,9,123 
 4120 DATA 20,7,124,21,6,126,21,4,108 
 20010 DATA 0,504,63,567,126,630,189,693,252,756,315,819,378,882,441,945 
 20020 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
 20022 DATA 0,60,0,0,126,0,0,255,0,0,255,0,0,255,0,0,255,0,0,126,0,0,60,0 
 20024 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
 20030 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0 
 20032 DATA 8,24,0,24,56,0,8,124,0,8,102,0,8,67,0,8,64,0,28,96,0 
 20034 DATA 0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0 
 20040 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0 
 20042 DATA 28,24,0,34,56,0,2,124,0,4,102,0,8,99,0,16,96,0,62,96,0 
 20044 DATA 0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0 
 20050 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0 
 20052 DATA 62,24,0,4,56,0,8,124,0,28,102,0,2,67,0,2,64,0,60,96,0 
 20054 DATA 0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0 
 20060 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0 
 20062 DATA 4,24,0,12,56,0,20,124,0,36,102,0,62,67,0,4,64,0,4,96,0 
 20064 DATA 0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0 
 20070 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0 
 20072 DATA 62,24,0,32,56,0,60,124,0,2,102,0,2,67,0,34,64,0,28,96,0 
 20074 DATA 0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0 
 20080 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0 
 20082 DATA 12,24,0,16,56,0,32,124,0,60,102,0,34,67,0,34,64,0,28,96,0 
 20084 DATA 0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0 
 20090 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,28,0,0,24,0 
 20092 DATA 62,24,0,2,56,0,4,124,0,8,102,0,8,67,0,8,64,0,8,96,0 
 20094 DATA 0,56,0,0,28,0,0,30,0,0,24,0,0,12,0,0,0,0 
 20100 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
 20102 DATA 0,60,0,0,126,0,0,255,0,0,255,0,0,255,0,0,255,0,0,126,0,0,60,0 
 20104 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
 20110 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0 
 20112 DATA 0,28,16,0,52,48,0,246,16,3,6,16,0,6,16,0,60,16,0,60,56 
 20114 DATA 0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0 
 20120 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0 
 20122 DATA 0,28,56,0,52,68,0,246,4,0,6,8,0,6,16,0,60,32,0,60,124 
 20124 DATA 0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0 
 20130 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0 
 20132 DATA 0,28,124,0,52,8,0,246,16,0,6,56,0,6,4,0,60,4,0,60,120 
 20134 DATA 0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0 
 20140 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0 
 20142 DATA 0,28,8,0,52,24,0,246,40,0,6,72,0,6,124,0,60,8,0,60,8 
 20144 DATA 0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0 
 20150 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0 
 20152 DATA 0,28,124,0,52,64,0,246,120,0,6,4,0,6,4,0,60,68,0,60,56 
 20154 DATA 0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0 
 20160 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0 
 20162 DATA 0,28,24,0,52,32,0,246,64,0,6,120,0,6,68,0,60,68,0,60,56 
 20164 DATA 0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0 
 20170 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,56,0,0,56,0,0,24,0 
 20172 DATA 0,28,124,0,52,4,0,246,8,0,6,16,0,6,16,0,60,16,0,60,16 
 20174 DATA 0,54,0,0,102,0,0,99,0,0,193,128,0,128,128,0,0,0 
 30002 POKE 53281,11:POKE 53280,13:PRINTCHR$ (147) 
 30005 FOR IH=0 TO9:PRINTCHR$ (17);:NEXT IH:PRINTTAB( 8)"H A N D B A L L D E M O" 
 30008 FOR I=1 TO8:FOR J=0 TO1:READ ZB%(I,J):NEXT J:NEXT I 
 30009 FOR I=0 TO5:FOR J=0 TO5:READ ZS%(I,J):NEXT J:NEXT I 
 30020 FOR I=0 TO5:FOR J=0 TO9:READ PO%(I,J):NEXT :NEXT 
 30030 PRINTCHR$ (147):II=40:FOR XG=1 TO4 
 30035 READ Y,X,CH:POKE 1024+Y*II+X,CH:POKE 55296+Y*II+X,13:NEXT XG:READ CH 
 30040 FOR XG=2 TO21:POKE 1064+XG,CH:POKE 55336+XG,13:NEXT XG:READ CH 
 30045 FOR XG=2 TO21:POKE 1046+XG*II,CH:POKE 55318+XG*II,13:NEXT XG:READ CH 
 30050 FOR XG=2 TO21:POKE 1904+XG,CH:POKE 56176+XG,13:NEXT XG:READ CH 
 30055 FOR XG=2 TO21:POKE 1025+XG*II,CH:POKE 55297+XG*II,13:NEXT XG 
 30060 FOR XG=1 TO48:READ Y,X,CH:POKE 1024+Y*II+X,CH:POKE 55296+Y*II+X,13:NEXT XG 
 30065 FOR I=0 TO7:FOR J=0 TO1:READ ZESP%(J,I):NEXT J:NEXT I 
 30066 FOR I=0 TO1007:READ DS%(I):NEXT I 
 30068 FOR IH=0 TO21:PRINTCHR$ (17);:NEXT IH 
 30069 FOR IH=0 TO21:PRINTCHR$ (145);:NEXT IH 
 30070 PRINTTAB( 23)"ANGRIFFSSYSTEM":PRINTTAB( 27)"A 5:1":PRINTTAB( 27)"B 4:2" 
 30076 PRINTTAB( 27)"C 3:3":PRINTTAB( 27)"D 2:4":GOSUB 55000:X$=Q$:PRINT 
 30080 PRINTTAB( 23)"ABWEHRSYSTEM":PRINTTAB( 27)"E 3:2:1":PRINTTAB( 27)"F 4:2" 
 30086 PRINTTAB( 27)"G 5:1":PRINTTAB( 27)"H 6:0":GOSUB 55000:Y$=Q$:PRINT 
 30090 PRINTTAB( 23)"TAKTIK":PRINTTAB( 27)"I PASSEN":PRINTTAB( 27)"K STOSSEN" 
 30120 PRINTTAB( 27)"L ACHTER":PRINTTAB( 27)"M ABWEHREN":PRINTTAB( 27)"Z ENDE" 
 30135 GOSUB 55000:Z$=Q$:PRINT 
 30140 IF Z$<>"M" THENGOSUB 60000:SIT=1:A=-8 
 30150 IF Z$="M" THENGOSUB 60100:SIT=0:A=8 
 30160 V=53248:N=0:FOR IH=0 TO6:N=N+2^IH:NEXT IH:POKE V+21,N 
 30165 FOR IH=0 TO5:NRSP=2+IH:GOSUB 40000:NEXT IH 
 30170 NRSP=0:IH=6:SX(IH)=SX(4)+A:SY(IH)=SY(4):GOSUB 40000 
 30175 IF Z$="M" THENGOSUB 60000 
 30185 IF Z$<>"M" THENGOSUB 60100 
 30186 FOR IH=0 TO5:POKE SC(IH),96:NEXT IH 
 30190 FOR IH=0 TO5 
 30192 IF SY(IH)=134  THEN SY(IH)=138 
 30194 SC(IH)=SX(IH)/8+5*SY(IH)+812:SZ(IH)=SC(IH)+54272 
 30195 IF SIT=0 THENPOKE SC(IH),0:POKE SZ(IH),0 
 30196 IF SIT=1 THENPOKE SC(IH),0:POKE SZ(IH),1 
 30197 NEXT IH 
 30200 IF Z$="I" THENGOSUB 44000 
 30210 IF Z$="K" THENGOSUB 42000 
 30220 IF Z$="L" THENGOSUB 50000 
 30230 IF Z$="M" THENGOSUB 38000 
 30240 IF Z$="Z" THENGOSUB 63000 
 31000 GOTO 30069 
 36000 SX(0)=88:SX(1)=120:SX(2)=136:SX(3)=88:SX(4)=120:SX(5)=88 
 36004 SY(0)=74:SY(1)=90:SY(2)=134:SY(3)=134:SY(4)=178:SY(5)=194:RETURN 
 36010 SX(0)=88:SX(1)=128:SX(2)=88:SX(3)=88:SX(4)=128:SX(5)=88 
 36014 SY(0)=74:SY(1)=106:SY(2)=114:SY(3)=154:SY(4)=162:SY(5)=194:RETURN 
 36020 SX(0)=56:SX(1)=112:SX(2)=136:SX(3)=88:SX(4)=112:SX(5)=56 
 36024 SY(0)=66:SY(1)=82:SY(2)=134:SY(3)=134:SY(4)=186:SY(5)=202:RETURN 
 36030 SX(0)=56:SX(1)=120:SX(2)=88:SX(3)=88:SX(4)=120:SX(5)=56 
 36034 SY(0)=66:SY(1)=90:SY(2)=114:SY(3)=154:SY(4)=178:SY(5)=202:RETURN 
 36050 SX(0)=72:SX(1)=88:SX(2)=80:SX(3)=104:SX(4)=88:SX(5)=72 
 36054 SY(0)=178:SY(1)=162:SY(2)=134:SY(3)=134:SY(4)=106:SY(5)=90:RETURN 
 36060 SX(0)=72:SX(1)=88:SX(2)=80:SX(3)=80:SX(4)=88:SX(5)=72 
 36064 SY(0)=178:SY(1)=162:SY(2)=146:SY(3)=122:SY(4)=106:SY(5)=90:RETURN 
 36070 SX(0)=64:SX(1)=80:SX(2)=80:SX(3)=104:SX(4)=80:SX(5)=64 
 36074 SY(0)=186:SY(1)=162:SY(2)=134:SY(3)=134:SY(4)=106:SY(5)=82:RETURN 
 36080 SX(0)=64:SX(1)=80:SX(2)=80:SX(3)=80:SX(4)=80:SX(5)=64 
 36084 SY(0)=186:SY(1)=170:SY(2)=146:SY(3)=122:SY(4)=98:SY(5)=82:RETURN 
 38000 IG=1:XZ=XB(IG)-16:YZ=YB(IG)-16 
 38020 ZY=INT (RND (1)*10):N=PO%(IG,ZY) 
 38040 X1=XB(IG):X2=XB(IG+N):Y1=YB(IG):Y2=YB(IG+N) 
 38050 GOSUB 60400:GOSUB 60450:QB=Q:UB=U:NB=NT 
 38070 X1=VX(5-IG-N):X2=XB(IG+N):Y1=VY(5-IG-N):Y2=YB(IG+N) 
 38080 GOSUB 60400:GOSUB 60450:QA=Q:UA=U 
 38100 X1=XZ:X2=VX(5-IG):Y1=YZ:Y2=VY(5-IG) 
 38110 GOSUB 60400:GOSUB 60450:QZ=Q:UZ=U 
 38140 VS=4:NB=20:FOR IN=0 TONBSTEP VS 
 38150 XP=XB(IG)+INT (QB*IN/NB)-8 
 38160 YP=YB(IG)+INT (UB*IN/NB):GOSUB 60200 
 38180 XP=VX(5-IG-N)+INT (QA*IN*0.5/NB):X1=XP 
 38190 YP=VY(5-IG-N)+INT (UA*IN*0.5/NB):Y1=YP 
 38200 X=2*(5-IG-N):Y=X+1:GOSUB 60250 
 38210 XP=XZ+INT (QZ*IN/NB):YP=YZ+INT (UZ*IN/NB) 
 38230 X=2*(5-IG):Y=X+1:GOSUB 60250 
 38250 NEXT IN 
 38280 XZ=X1:YZ=Y1:IG=IG+N 
 38290 GET A$:IF A$=""GOTO 38020 
 38300 RETURN 
 40000 POKE 2040+IH,248+IH:POKE V+39+IH,1:IF SIT=1 THENPOKE V+39+IH,0 
 40040 J=ZESP%(SIT,NRSP):S1=15872+IH*64:S2=S1+62 
 40060 FOR KH=S1 TOS2:POKE KH,DS%(J):J=J+1:NEXT KH 
 40080 X=2*IH:Y=2*IH+1:XP=SX(IH):YP=SY(IH):GOSUB 60250:RETURN 
 42000 ZZ=0 
 42020 IF (X$="D"OR X$="B") THENGOSUB 43900 
 42030 IF (X$="C"OR X$="A") THENGOSUB 43950 
 42040 FOR XG=XA TOXE:X1=XT(XG):X2=XT(XG+1):Y1=YT(XG):Y2=YT(XG+1):GOSUB 60400 
 42060 FOR IN=0 TONTSTEP VS:GOSUB 60450:XP=XP-8:GOSUB 60200:NEXT IN:NEXT XG 
 42130 ZZ=30:GOSUB 60000 
 42150 FOR XG=5 TO0STEP -1:X=2*XG:Y=X+1 
 42160 IF XG=3GOTO 42190 
 42170 IF (XG=2AND X$="B")OR (XG=2AND X$="D")GOTO 42190 
 42180 FOR JJ=0 TO5:ZQ=ZZ*JJ/5:XP=SX(XG)+ZQ:YP=SY(XG):GOSUB 60250 
 42185 XP=XB(5)+ZQ-8:YP=YB(5):GOSUB 60200:NEXT JJ 
 42190 NEXT XG 
 42210 N=1:ZS=ZZ 
 42220 FOR XG=5 TO1STEP -1 
 42230 IF XG=3GOTO 42380 
 42240 IF (XG=2AND X$="B")OR (XG=2AND X$="D")GOTO 42380 
 42244 IF XG=4 THENN=2 
 42248 IF (XG=4AND X$="B")OR (XG=4AND X$="D") THENN=3 
 42250 X=2*XG:Y=X+1:XN=2*(XG-N):YN=XN+1 
 42260 FOR I=0 TOZZSTEP VS 
 42270 XP=SX(XG)+ZS-I:YP=SY(XG):GOSUB 60250:XX=SX(XG)+ZS-8 
 42280 XP=XX-I:GOSUB 60200:NEXT I 
 42300 QB=SX(XG-N)-SX(XG)+ZZ-ZS:UB=SY(XG-N)-SY(XG) 
 42310 FOR I=0 TOZZSTEP VS 
 42330 X=XN:XP=SX(XG-N)-I+ZZ:Y=YN:YP=SY(XG-N):GOSUB 60250 
 42350 XP=XX+INT (QB*I/ZZ)-ZZ:YP=YB(XG)+INT (UB*I/ZZ):GOSUB 60200:NEXT I:N=1:ZS=0 
 42380 NEXT XG 
 42382 FOR IH=0 TO5:NRSP=2+IH:GOSUB 40080 
 42384 FOR JH=0 TO20:NEXT JH:NEXT IH 
 42390 GET A$:IF A$=""GOTO 42000 
 43000 RETURN 
 43900 XA=0:XE=2:VS=4 
 43920 XT(0)=XB(0)+ZZ:YT(0)=YB(0):XT(1)=XB(1)+ZZ:YT(1)=YB(1) 
 43921 XT(1)=XB(1)+ZZ:YT(1)=YB(1) 
 43930 XT(2)=XB(4)+ZZ:YT(2)=YB(4):XT(3)=XB(5)+ZZ:YT(3)=YB(5):RETURN 
 43950 XA=0:XE=3:VS=4 
 43970 XT(0)=XB(0)+ZZ:YT(0)=YB(0):XT(1)=XB(1)+ZZ:YT(1)=YB(1) 
 43980 XT(2)=XB(2)+ZZ:YT(2)=YB(2):XT(3)=XB(4)+ZZ:YT(3)=YB(4) 
 43990 XT(4)=XB(5)+ZZ:YT(4)=YB(5):RETURN 
 44000 XA=0:XE=4:VS=5 
 44020 FOR XG=XA TOXE 
 44025 X2=XB(XG+1):X1=XB(XG):Y2=YB(XG+1):Y1=YB(XG):GOSUB 60400 
 44060 FOR IN=0 TONTSTEP VS:GOSUB 60450:XP=XP-8:GOSUB 60200:NEXT IN:NEXT XG 
 44110 XA=5:XE=1:VS=5 
 44120 FOR XG=XA TOXESTEP -1 
 44125 X2=XB(XG-1):X1=XB(XG):Y2=YB(XG-1):Y1=YB(XG):GOSUB 60400 
 44160 FOR IN=0 TONTSTEP VS:GOSUB 60450:XP=XP-8:GOSUB 60200:NEXT IN:NEXT XG 
 44205 GET A$:IF A$=""GOTO 44000 
 44250 RETURN 
 50000 GOSUB 36030:SX(1)=SX(1)+16:SX(4)=SX(4)+16 
 50010 FOR IG=0 TO5:X=2*IG:Y=X+1:XP=SX(IG):YP=SY(IG):GOSUB 60250:NEXT IG 
 50050 XP=SX(1)-8:YP=SY(1):GOSUB 60200 
 50100 FOR JJ=0 TO2:FOR TT=1 TO8 
 50110 X1=SX(ZB%(TT,0))-8:X2=SX(ZB%(TT,1))-8:Y1=SY(ZB%(TT,0)):Y2=SY(ZB%(TT,1)) 
 50115 GOSUB 60400 
 50120 IF (TT=1)OR (TT=5) THENGOSUB 50500 
 50130 FOR L=0 TO8:XP=X1+Q*L/8:YP=Y1+U*L/8:GOSUB 60200 
 50140 IF (TT=1)OR (TT=5) THENGOSUB 50600 
 50150 NEXT L 
 50160 NEXT TT:NEXT JJ 
 50200 GET A$:IF A$=""GOTO 50100 
 50300 RETURN 
 50500 JS=0:IF TT=5 THENJS=3 
 50510 FOR K=0 TO2:X=JS+K:Y=2*JJ:Z=Y+1:S1=ZS%(X,Y):S2=ZS%(X,Z) 
 50515 XX(K)=SX(S1):YY(K)=SY(S1) 
 50520 QQ(K)=SX(S2)-SX(S1):UU(K)=SY(S2)-SY(S1):NEXT K:RETURN 
 50600 FOR K=0 TO2:X=(JS+K)*2:Y=X+1 
 50610 XP=XX(K)+QQ(K)*L/8:YP=YY(K)+UU(K)*L/8:GOSUB 60250:NEXT K:RETURN 
 55000 PRINTTAB( 23);CHR$ (18);:INPUT"WAEHLEN : ";Q$:RETURN 
 60000 IF X$="A" THENGOSUB 36000 
 60010 IF X$="B" THENGOSUB 36010 
 60020 IF X$="C" THENGOSUB 36020 
 60030 IF X$="D" THENGOSUB 36030 
 60040 FOR IB=0 TO5:XB(IB)=SX(IB):YB(IB)=SY(IB):AX(IB)=SX(IB):AY(IB)=SY(IB):NEXT IB 
 60050 RETURN 
 60100 IF Y$="E" THENGOSUB 36050 
 60110 IF Y$="F" THENGOSUB 36060 
 60120 IF Y$="G" THENGOSUB 36070 
 60130 IF Y$="H" THENGOSUB 36080 
 60140 FOR II=0 TO5:VX(II)=SX(II):VY(II)=SY(II):NEXT II 
 60150 RETURN 
 60200 POKE V+12,XP:POKE V+13,YP:RETURN 
 60250 POKE V+X,XP:POKE V+Y,YP:RETURN 
 60400 Q=X2-X1:U=Y2-Y1:NT=INT (SQR (Q*Q+U*U)):RETURN 
 60450 XP=X1+INT (Q*IN/NT):YP=Y1+INT (U*IN/NT):RETURN 
 63000 END 
Listing: »Handballtrainer«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →