Was sind Arrays ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Was sind Arrays ?

Beitrag von Fusselohr »

Ich weis es klingt blöd, aber ich habe keine Ahnung was Arrays sind. Kann mir jm. helfen?

Mit freundlichen Grüßen,
Fusselohr
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

ich weiß nicht ob du schon mal in die lage gekommen bist, aber irgendwann wirst du merken, das du mit normalen Variablen nicht mehr weiterkommst.
Ein besipeil was mir jetzt grade nur einfällt ist zum beispiel bei Mehrspielermodi die Variablen für die ganzen Spieler.
Du kannst ja nich unendlich Viele Variablen erstellen, jede für einen Spieler.
Wäre ja total umständlich. In dem Fall nimmt man einfach eine LinkedList und kann beliebig elemente hinzufügen / auswählen / löschen, und zwar soviele bis der Speicher überläuft ;)
Arrays sind so etwas ähnliches wie LinkedLists.
SIe bieten auch die Möglichkeit meherer Werte unter einem "Ansprechpartner" zu speichern.
Kleines BSP:

Code: Alles auswählen

var1 = 1
var2 = 2
var3 = 3
; usw
dim var(3)
var(1) = 1
var(2) = 2
var(3) = 3
Anstatt drei variablen (var1 - var3) hast du nurnoch das Array var() wo du die Werte abspeichern kannst.
So kannst du das ganze auch zum beispiel Mit Forschleifen durchgehen.
Dann gibt es auch noch die 2d Arrays

Code: Alles auswählen

dim anderesarray(4,4)
Einmfach Bespiel: Schachbrett.
Da ich kein Schach spiel, weil ich nicht wie viele Felder ein brett hat, aber so kannst du einfach ein Array erstellen, wo die eigenschaften eines jeden Feldes abgespeichert werden können.
Beliebt ist auch die nutzung von Arrays in Verbindung mit Structuren.
Ändert nichts an der Benutzung
Zum Speicher:
Ein Array wird per Dim erstellt und damit wird direkt der ganz Speicher allociert, leere Arrays gibt es sozusagen nicht, um zu löschen musst du das selbe array mit (0) Feldern nochmal erstellen.
Der Benutzte Speicher befindet sich in einem Zusamenhängenden Blcok.
Wenn du ein Array mit Longwerten hast, liegt Feld 6 also auch genau 4 Byte hinter Feld 5
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Beitrag von Fusselohr »

Also wäre es nicht schlecht wenn ich Arrays für meine Tile Engine nehme oder ?
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Alles andere Wäre sinnlos;)

Code: Alles auswählen

structure tilemap
  Layer1.l
  Layer2.l
  Layer3.l
  action.l
  ;...
endstructure
dim tilemap.tilemap(999,999)
for x = 0 to 999
  for y = 0 to 999
    tilemap(x,y)\Layer1 = 0 ;SpriteID von Ebene 1 (Boden)
    tilemap(x,y)\Layer2 = 0 ;SpriteID von Ebene 2 (gegenstände)
    tilemap(x,y)\Layer3 = 0 ;SpriteID von Ebene 2 (Bäume oder was weiß ich)
  next
next
Hier im Forum gibt es einige Tilemap Beispiel, benutz mal die Sufu, du findest da bestimmt was

Edit: WICHTIG: Arrays müssen ab PB4 als Global gekennzeichnet werden, sonst sind sie nur Local, also:

Code: Alles auswählen

Global Dim array(0)
Zuletzt geändert von a14xerus am 20.06.2007 14:32, insgesamt 2-mal geändert.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Ja, kannste machen.

Zwei dimensionales Array:

Stell dir einfach ein karriertes Blatt vor, in jedes Kästchen kannst du eine Zahl schreiben.

Welches Kästchen du meinst, legst du dann mit dem Abstand in Kästchen zum Wunschkästchen vom Rand aus fest.

:allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Beitrag von Fusselohr »

Vielen Dank ^^. Probier ich gleich mal aus- aber erst noch Hausaufgaben :(
Antworten