Grösse Dynamischer Arrays verändern
Übersicht

![]() |
C64-FloBetreff: Grösse Dynamischer Arrays verändern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo nochmal...
Also da mir diese TYPES nicht so ganz geheuer sind (irgendwie kommt es mir spanisch vor, dass sie nicht anhand eines eindeutigen indizees identifiziert werden können (wie dim-arrays), daher hab ich mit folgendem Code das Problem umgangen (oder zumindest so dargestellt, dass es mir logischer erscheint ![]() Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() SEEDRND MILLISECS() type wpn field s field name$ end type global waffenanzahl=6 dim waffe.wpn(waffenanzahl) waffeninit() ;------------------------------------MAINLOOP------------------------------ while not keyhit(1) cls ;----durchzählen aktivewaffen=0 a=0 for a=1 to waffenanzahl if waffe(a)<>null then aktivewaffen=aktivewaffen+1 text 10,(20*a), a+" - "+waffe(a)\name$+" Schaden: "+waffe(a)\s end if next text 300,100,"Anzahl der Waffen: "+aktivewaffen if keyhit(78) then waffegenerieren() if keyhit(2)then waffe(1)=null if keyhit(3)then waffe(2)=null if keyhit(4)then waffe(3)=null flip wend ;----------------------------ENDE MAINLOOP----------------------------- ;___________________________________________________________ function waffeninit();************************************* for a=1 to waffenanzahl waffe(a)=new wpn select a case 1 ; NAME || SCHADEN waffe(a)\name$=("Dolch") waffe(a)\s=4 case 2 ; NAME || SCHADEN waffe(a)\name$=("Knüppel") waffe(a)\s=6 case 3 ; NAME || SCHADEN waffe(a)\name$=("Kurzschwert") waffe(a)\s=7 case 4 ; NAME || SCHADEN waffe(a)\name$=("Schwert") waffe(a)\s=8 case 5 ; NAME || SCHADEN waffe(a)\name$=("Langschwert") waffe(a)\s=9 case 6 ; NAME || SCHADEN waffe(a)\name$=("Bastardschwert") waffe(a)\s=10 end select next end function;*********************************************** ;------------------------------------------------------------ ;__________________________________________________ function waffegenerieren();************************ nr=0 for neu=1 to waffenanzahl if waffe(neu)=null then nr=neu;Lücke schliessen next if nr=0 then waffenaznahl=waffenanzahl+1 nr=waffenanzahl end if waffe(nr)=new wpn waffe(nr)\name$="Neuesding"+a waffe(nr)\s=rnd(1,10) end function;************************************** Jetzt fehlt nur noch eine Kleinigkeit - die ich in sämtlichen tutorials nicht finden konte - Wie ändere ich die Grösse des Arrays "waffe(a)" ? Bitte sagt mir nicht dass das in BB nicht geht - könnte ich mir kaum vorstellen ![]() |
||
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.) |
![]() |
C64-Flo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm...
Also wenn ich mein Array während der Laufzeit erneut dimensioniere - wird der gesamte Inhalt gelöscht! ![]() Jetzt mal abgesehen vpn der Möglichkeit immer alles zwischenzuspeichern bevor ich das array vergrössere und dann wieder alles hineinzukopieren (was umständlich ist) - gibt es nicht noch eine elegentere Möglichkeit meine Arrays mal eben zu vergrössern/verkleinern ? |
||
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.) |
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Wenn du im Hauptteil ein Array mit feld(0) deklarierst, kannst du es später in einer Funktion neu dimensionieren. Ich habe davon allerdings bisher nur gehört - selber gemacht habe ich es noch nie.
2. Du könntest statt Arrays Banks nehmen. Allerdings entfällt bei einer Verkleinerung der Bank auch hier ein Teil (der am Ende). Eine Möglichkeit wäre es dann, die Daten innerhalb des Feldes zu verschieben. Das Vergrößern einer Bank ist jedoch kein Problem, das geht mit ResizeBank. MfG garret Edit: Bei dynamischen Strukturen sind Types aber immer noch die beste Wahl! ![]() |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jop, verschließ dich nicht vor den Types - sie sind sehr sehr mächtig. Eine recht simple Methode sie gezielt anzusprechen ist dir ein Index-Field einzubauen, anhand dessen Du erkennen kannst ob Du den richtigen Type ansprichst.
Code: [AUSKLAPPEN] type bla
field text$ field ID end type .... for count.bla = each bla if count\ID = gesuchte id then machwasduwillst() endif next |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das geht auch direkt mit ql:Object . Dazu muß nach jedem neuem Typeeintrag einmal ql:Handle 'aufrufen'. Danach verändert dieser Eintrag sein Handle nicht mehr und kann immer durch diese ID direkt angesprochen werden.
In bestimmten Fällen ist denoch deine Methode besser. Muß man halt abwiegen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group