GLBasic Benutzerhandbuch

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
löscht also den letzen Wert.

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

See also...