Hey,
Problem:
Ich habe 3 Elemente, die dargestellt werden. Die 3 Elemente überlappen quasi. Wenn ich das "unterste" Element (im Array das 0te) aktiviere, dann soll es an die oberste Stelle wandern. Soweit kein Problem (dachte ich), also "reproduziere" ich es (mit DIMPUSH), setze es damit also an die allerletzte Stelle und lösche einfach das Original. Leider ergibt sich dadurch ein Bug in meinem Programmchen.
Also bekam ich den Tip SORTARRAY zu nutzen und damit das erste Objekt an die letzte Position wandern zu lassen. Mein Problem dabei ist, daß ich mir nicht sicher bin, ob "sortieren" einen Sinn macht, da ich immer nur ein unteres Element haben möchte, das ans Ende wandert und nicht die ganze Reihe. Es kann auch nur sein, daß das 3. von 5 Elementen den Platz von Nr. 5 übernehmen müßte und Nr. 5 zu 4 und 4 zu 3 wird.
Gibt es evtl. einen Weg einfach die Zeiger zu tauschen oder macht es da eher Sinn selbst eine Verkettete Liste zu schreiben?
lg
W.
ok, ich glaube ich weiß, wie du meinst.
Ich mache mal einen Versuch und schaue, wie man sowas sauber baut. =D
Danke für den Tip! :good:
hey,
ich habe mich mal an einen ganz kleinen Versuch gewagt und es mit einem rekursiven "sink" geschrieben.
Meintest du es ca. so in der Art? Übrigens: sorry für den nicht allzu schön geschriebenen Code, ich habe ihn mal "nebenbei" zusammen geschustert...
// --------------------------------- //
// Project: Circular Buffer
// Start: Friday, September 06, 2013
// IDE Version: 11.322
// SETCURRENTDIR("Media") // go to media files
TYPE twin
id
ENDTYPE
TYPE tpointer
id
ENDTYPE
GLOBAL win[] AS twin, pointer[] AS tpointer
main()
FUNCTION main:
add(1)
add(2)
add(3)
sink(0)
WHILE TRUE
draw()
SHOWSCREEN
WEND
ENDFUNCTION
FUNCTION add: id
LOCAL m AS tpointer
LOCAL n AS twin
m.id = LEN(win[])
DIMPUSH pointer[], m
n.id = id
DIMPUSH win[], n
ENDFUNCTION
FUNCTION draw:
LOCAL wert
FOREACH m IN pointer[]
INC wert, 1
PRINT win[m.id].id, 0, wert * 20
NEXT
ENDFUNCTION
FUNCTION sink: id
LOCAL tmp_id, max_length
max_length = LEN(pointer[]) - 1
tmp_id = pointer[id].id
pointer[id].id = pointer[id + 1].id
pointer[id + 1].id = tmp_id
IF (id + 1) < max_length THEN sink(id + 1)
ENDFUNCTION