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.

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.
- Darstellung der Angriffssysteme 5:1, 4:2, 3:3 und 2:4
- Darstellung der Abwehrsysteme 5:1, 4:2, 6:0 und 3:2:1
- 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:
- Spielfeldplan für Programmzeile 4 000-4 120 in Bild 1,
- Grundaufstellungsplan für Programmzeile 36 000-36 084 in Bild 2.


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 |
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