Main sections
DIMDEL
DIMDEL feld#$[], index%
Löscht aus dem 'feld' den Eintrag mit dem Index 'index#$' heraus. Alle darunterliegenden Einträge werden nach oben geschoben. Es ist dabei egal wie viele Dimensionen das Feld hat.
Ist Index neativ, wird von hinten gezählt.
DIMDEL a[], -1
Zur Verdeutlichung. Dieses Feld:
DIM a[3][2]
a[0][0] = 0
a[0][1] = 1
a[1][0] = 10
a[1][1] = 11
a[2][0] = 20
a[2][1] = 21
DIMDEL a[], 1
sieht dannach so aus:
a[0][0] = 0
a[0][1] = 1
a[1][0] = 20
a[1][1] = 21
Ein Beispiel aus der Praxis. Hier werden per Knopfdruck Sterne erstellt und mit der rechten Maustaste gelöscht.
// StarMaker
// -----------------------
LOCAL mx, my, b1, b2, best
DIM star[0][2]
mousedown = FALSE
// Hauptschleife
WHILE TRUE
MOUSESTATE mx, my, b1, b2
// Mauspfeil
PRINT "<=", mx, my
// Klick und Loslassen
IF b1=FALSE AND b2=FALSE THEN mousedown=FALSE
IF mousedown
b1=FALSE
b2=FALSE
ENDIF
IF b1 OR b2 THEN mousedown=TRUE
// Liks = neu, Rechts= entfernen
IF b1 THEN AddStar(mx,my)
IF b2 THEN DelStar(mx,my)
// nächsten Stern suchen
best = Nearest(mx, my)
// Alle Sterne zeigen
FOR i=0 TO BOUNDS(star[],0)-1
// nächsten hervorheben
IF best = i
PRINT "*", star[i][0], star[i][1]
ELSE
PRINT "+", star[i][0], star[i][1]
ENDIF
NEXT
SHOWSCREEN
WEND
// -----------------------------------
// DELSTAR
// Stern entfernen
// -----------------------------------
FUNCTION DelStar: x,y
LOCAL i
i = Nearest(x,y)
// Magic!
IF i>=0 THEN DIMDEL star[], i
ENDFUNCTION
// -----------------------------------
// ADDSTAR
// Stern hinzufügen
// -----------------------------------
FUNCTION AddStar: x,y
LOCAL m
m = BOUNDS(star[], 0)
REDIM star[m+1][2]
star[m][0] = x
star[m][1] = y
ENDFUNCTION
// -----------------------------------
// NEAREST
// Findet den nachsten Stern zu x,y
// -----------------------------------
FUNCTION Nearest: x,y
LOCAL best, bestdist, dist, i, dx, dy
best = -1
FOR i=0 TO BOUNDS(star[],0)-1
dx = x-star[i][0]
dy = y-star[i][1]
dist = SQR(dx*dx + dy*dy)
IF i=0 OR dist<bestdist
bestdist = dist
best = i
ENDIF
NEXT
RETURN best
ENDFUNCTION