Fragen zu Arrays?
Übersicht

bruce85Betreff: Fragen zu Arrays? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
wie könnte ich in BlitzBax am einfachsten solche Felder erzeugen?http://www.bhv.de/pressedownlo...300dpi.jpg Ich habe schon gegoogelt, aber nix gefunden was mein Problem lösen könnte. Danke euch schonmal. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo.
Mit Code: [AUSKLAPPEN] array:wunschtype[10,12]
? Mfg |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke Dir.
Ich meinte die Dreieckige Felder indem die Zahlen drin stehen. So wie bei dem Spiel Kakuro. Wie könnte ich das ambesten machen? MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
skey-zBetreff: Re: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Suco-X hat Folgendes geschrieben: | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Achso, ein 3 Dimensionales Array.
Ich dachte es gäbe noch einen anderen Weg. Ich werde es dann mal versuchen und vielen Dank. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
es gibt bestimmt noch andere Wege, aber das war der einfachste der mir einfiehl, so kannst du wenn nötig ein Feld in 2 Bereiche aufteilen oder auch nur in eines. | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke.
Kann mir vieleicht jemand Tips geben, wie man bestimmte Felder aufteilen kann? Ich habe mich mit sowas noch nicht so beschäftigt. Es gibt bestimmt befehle in BlitzMax die das bereitstellen oder so, wenn ich micht nicht irre. Danke euch schonmal. Edit: Oder ich könnte die Sumenierung mit Types erstellen, welche geteilt sind und ein Array Feld indem man dann die Zahlen einträgt. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde ein Zweidimensionales Array bevorzugen, dass in jeder Zelle einen Feld-Type enthält. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke Dir.
Ich habs hinbekommen, is ja nicht so schwer wie ich mir das vorgestellt habe. Code: [AUSKLAPPEN] Type TSpielFeld Field Wert:Int Field SumeX:Int Field SumeY:Int Function NewStein:TSpielFeld(fwert:Int) Local S:TSpielFeld = New TSpielFeld S.Wert = fwert Return S End Function End Type Global FeldX:Int, FeldY:Int, p:Int ReadData FeldX, FeldY Global SpielFeld:TSpielFeld[FeldX, FeldY] For Local x:Int=0 Until FeldX For Local y:Int=0 Until FeldY ReadData(p) SpielFeld[x, y] = TSpielFeld.NewStein(p) Next Next Den Rest schaffe ich ohne Probleme und vielen Dank für die antworten. MfG |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo nochmal,
das Spiel ist schon fertig bis auf ein paar kleinigkeiten und zwar, erstelle ich meine Felder so: Code: [AUSKLAPPEN] Type TSpielFeld
Field Wert:Int=0 Field Feld:String="N" Field SumeX:Int=0 Field SumeY:Int=0 Field SumeXOK:Int=0 Field SumeYOK:Int=0 Function NewStein:TSpielFeld(fwert:Int) Local S:TSpielFeld = New TSpielFeld S.Wert = fwert Return S End Function End Type Global FeldX:Int, FeldY:Int, p:Int ReadData FeldX, FeldY Global SpielFeld:TSpielFeld[FeldX, FeldY] For Local x:Int=0 Until FeldX For Local y:Int=0 Until FeldY ReadData(p) SpielFeld[x, y] = TSpielFeld.NewStein(p) Next Next Jetzt habe ich in meinem Spiel eine Funktion eingebaut, diese ermöglicht das man Verschiedene Spielfeld Grösse wählen kann, nur kann ich irgendwie die Felder nicht ändern. Ich hab das mal so versucht: Code: [AUSKLAPPEN] RestoreData Feld2
ReadData FeldX, FeldY For Local x:Int=0 Until FeldX For Local y:Int=0 Until FeldY ReadData(p) SpielFeld[x, y] = TSpielFeld.NewStein(p) Next Next So kann das ja nicht funktionieren. Muss ich vieleicht vorher erst das Feld wieder löschen bevor ich ein neues erstelle? Ich hab schon viel versucht, vieleicht kann mir da jemand helfen. Danke euch schonmal. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du gehst die aktuelle Kartengröße durch, setzt alle SpielFeld[x, y] = Null und das sollte es gewesen sein. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke Dir.
Das wird mir aber nicht viel bringen, da ich eine grössere Karte einlesen möchte, wärend mein Spiel läuft. Hier mal die 2 Karten: Code: [AUSKLAPPEN] #Karte1
DefData 6,8 DefData 0,0,0,0,0,0 DefData 0,0,0,0,0,0 DefData 0,0,0,0,0,0 DefData 0,0,0,0,0,0 DefData 0,0,0,0,0,0 DefData 0,0,0,0,0,0 DefData 0,0,0,0,0,0 DefData 0,0,0,0,0,0 #Karte2 DefData 12,12 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 DefData 0,0,0,0,0,0,0,0,0,0,0,0 Bei Spielstart wird die erste Karte eingelesen und ich möchte bei neues Spiel die 2te Karte einlesen, nur funktioniert das nicht so wie du es beschrieben hast, da ich dann eine Fehlermeldung erhalte, das ich die Größe von Arrays überschreite. Wie könnte ich das jetzt ambesten machen? MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich berichtige mich: Die bestehenden TSpielFeld werden gelöscht, sobald auf sie nicht mehr zugegriffen werden kann. Es sollte Prinzipiell reichen, das Array neu zu Dimensionieren und die Felder zu überschreiben.
Code: [AUSKLAPPEN] SuperStrict
Local array:Int[5, 5] Print("alte größe: " + array.length) array = New Int[10, 10] Print("neue größe: " + array.length) End |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke.
Ich hab das nochmal so versucht: Code: [AUSKLAPPEN] RestoreData Karte2
ReadData FeldX, FeldY For Local x:Int=0 Until FeldX For Local y:Int=0 Until FeldY ReadData(p) SpielFeld[x, y] = TSpielFeld.NewStein(p) Next Next komischerweise funktioniert das jetzt, wahrscheinlich habe ich vorhin etwas übersehen oder so. Edit: Das funktioniert doch nicht, ich erzeuge ja so ein neues Spielfeld vom Type TSpielfeld: Code: [AUSKLAPPEN] Global SpielFeld:TSpielFeld[FeldX, FeldY]
Da ist ja bereits die größe Definiert, wie könnte ich die größe im Spiel ändern? Danke schonmal. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es muss doch eine Möglichkeit geben das erstellte SpielFeld vom Typ TSpielFeld zu vergrößern:
Code: [AUSKLAPPEN] Global SpielFeld:TSpielFeld[FeldX, FeldY]
Wenn man es nicht im Spiel direkt vergößern kann, dann müsste man doch wenigstens das erstellte SpielFeld wieder löschen können. Ich hab versucht die größe so zu ändern: Code: [AUSKLAPPEN] SpielFeld = New TSpielFeld[6,8]
leider klappt das nicht so. Hat vieleicht jemand eine Idee wie ich das jetzt machen kann? MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Benutz slicing. Das geht allerdings nur bei eindimensionalen Arrays.
Also Code: [AUSKLAPPEN] Spielfeld:Tspielfeld[x*y]
später: Code: [AUSKLAPPEN] spielfeld = spielfeld[..x*y]
Ansprechen tust Du die einzelnen Indizes per [x+y*max_X]. |
||
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 |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke Dir.
Ich bekomme zwar hin das Spielfeld zu vergrößern, aber dann bekomme ich eine Fehlermeldung, wenn ich dann die größere Karte lade: Code: [AUSKLAPPEN] RestoreData Karte2
ReadData FeldX, FeldY SpielFeld = New TSpielFeld[FeldX, FeldY] SpielfeldLoad() Code: [AUSKLAPPEN] Unhandled Exception:Attempt to acces field or method of Null object
Wie könnte ich das problem beheben? MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst die einzelnen Felder der Karte mit new initialisieren:
Code: [AUSKLAPPEN] for local s:Tspielfeld = eachin spielfeld
s = new Tspielfeld 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 |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das funktioniert auch nicht.
Wenn ich die gleiche größe von Spielfeld lade, dann geht es, aber wenn ich eine grössere Karte lade, dann bekomme ich die gleiche Fehlermeldung. Sry, aber ich bin kein Profi in BlitzMax, in BlitzBasic ist ja alles noch einfach. Hier mal mein versuch: Code: [AUSKLAPPEN] RestoreData Karte2
ReadData FeldX, FeldY SpielfeldLoad() Code: [AUSKLAPPEN] Function SpielfeldLoad()
Local Datei:TStream = ReadFile("Karte2.dat") For Local s:TspielFeld = EachIn SpielFeld s = New TspielFeld Next If Not Datei = 0 Then For Local xx:Int=0 Until FeldX For Local yy:Int=0 Until FeldY SpielFeld[xx,yy].Feld = ReadByte(Datei) Next Next CloseFile(Datei) Else EndIf End Function klappt auch nicht... Gibt es vieleicht noch andere wege das Problem zu lösen? MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst nachdem du die neue Feldgrösse festgelegt hast mit new initialisieren.
Code: [AUSKLAPPEN] spielfeld = spielfeld[..neux*neuy]
for local s:tspielfeld = eachin .... |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group