Mehrere Einheiten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

@sunny

du sagtest, dass Arrays auch gehen würden.
jetzt ist aber noch ne frage aufgetaucht.
ich hab mir überlegt, dass das unlogisch ist, wenn man plötzlich 10'000
einheiten hat. :D
also, deshalb habe ich mich entschlossen, eine grenze von max. 500 einheiten.

jetzt zur frage:

hat das irgedn einen unterschied bei der geschwindigkeit?
sind Arrays schneller als LLs? oder langsamer?
gibt es sonst noch ausschlaggebende unterschiede?

danke schonmal :allright:
-.-"
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Green Snake hat geschrieben:@sunny

du sagtest, dass Arrays auch gehen würden.
jetzt ist aber noch ne frage aufgetaucht.
ich hab mir überlegt, dass das unlogisch ist, wenn man plötzlich 10'000
einheiten hat. :D
also, deshalb habe ich mich entschlossen, eine grenze von max. 500 einheiten.

jetzt zur frage:

hat das irgedn einen unterschied bei der geschwindigkeit?
sind Arrays schneller als LLs? oder langsamer?
gibt es sonst noch ausschlaggebende unterschiede?
Du wirst spätestens bei der ersten großen Präsentation einen Spieler haben der es, wie auch immer, schafft genau 501 Einheiten zu benötigen.
Murphy's law
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

:lol:
ich denke nur, dass es nich so ganz "real" ist, wenn ein gegner 20 soldaten hat, und ein anderer 500.
ich kann die grenze dann natürlich auch hochschraben, zb auf 1000
aber bis man nur so viele einheiten "produziert" hat. :lol:
aber es intressieren mich immer noch die unterschiede, zwischen Arrays und lls :allright:
-.-"
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Ein Array ist ein fester Block im Speicher, eine feste Größe. Mal angenommen du brauchst 20 long variablen, dann wären dass 20 * 4 = 80 byte im Speicher. Also hast du ein Array mit 20 Plätzen, insgesamt, 80 Byte, weil jeder Platz 4 byte belegt.
Eine LinkedList geht da anders vor. Der Speicher wird erst dann reserviert, wenn er benötigt wird. Das bedeutet, du erstellst die Liste, fügst ein Element hinzu, dann wird eine long variable im Speicher angelegt und der Pointer der Liste zugewiesen. Man spricht also mit der Liste nur immer eine Variable oder einen Speicherbereich an, wenn der Typ etwa eine Struktur ist und somit nicht nur eine Variable.
Beim Hinzufügen der nächsten Elemente wird wieder nur einmal Speicher für die Long reserviert, dann ein Pointer auf die Liste gelegt. Das vorherige Element bekommt auch noch einen pointer, das neuerstellte einen auf das vorherige. Es entsteht eine Kette von Speicherbereichen die auf das nächstfolgende und vorherige zeigen. Dadurch springt man wesentlich mehr im Speicher umher, wenn man nach einem gewissen Element sucht. Man kann nicht einfach "Speicherbereich + 5" sagen, wenn man das 5te Element haben möchte. Sondern man muss vom ersten ab losgehen und den Pointer zum nächsten verfolgen. Dann wieder den pointer zum nächsten, das so lange, bis man beim 5ten Element ist. Das braucht in der Regel mehr Zeit als wenn man die Speicherstelle direkt anspringen kann. Daher sind LinkedLists langsamer als Arrays. Dafür auch dynamischer, denn der Speicher wird erst reserviert, wenn er benötigt wird. Ebeneso kann man elemente leicht löschen oder verschieben, beim Array hat man eine feste Zahl an Elementen.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

:o das nenne ich eine genaue beschreibung, danke dir :allright:

ich werde wohl vorerst Arrays nehmen, da es mir einfacher scheint, als das ewige vor und zurück hopsen. /:-> :allright:
bis jetzt läuft zum glück (dank eurer hilfe) alles. :allright:

speziellen dank an dich sunny <)
-.-"
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Das vorundzurückhopsen ist ja gar nicht schwer. Schau ich mach dir ein Beispiel mit Arrays und LLs:

Code: Alles auswählen

Dim Array(1)
Array(0) = 25
Array(1) = 438

MessageRequester("Hello!","xD "+Str(Array(0))+Str(Array(1)),0)

NewList LinkedList.l()
AddElement(LinkedList())
LinkedList() = 342

MessageRequester("WOW","LinkedList "+Str(LinkedList()),0)
:allright:

EDIT: Außerdem kannst du ja auch in der Hilfe was rausquetschen <)

EDIT2: Dumpfbacke :oops: Ich progge schon eindeutig zu viel C++. Die ";" da müssen weg :oops: :freak:
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

is klar, du hast da auch nur 2 sachen.
ich dagegen werde duzende haben :lol:

und was is, wenn ich jetzt beim 2 element bin, und zum 50 muss?
dann hört das ja nicht mehr auf mit dem hopsen.
auch in einer for next schleife wirds mühsam :allright:
-.-"
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

SelectElement(LinkedList(), Position)
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

ok, das wusste ich jetzt noch nicht :lol:
jetzt hast du mich verirrt, was soll ich jetzt nehmen?
arrays oder lls? :lol:
ich werde warscheinlich trotzdem bei arrays bleiben :allright:

danke für deinen tip :allright:
-.-"
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

LLs sind dynamisch, wenn auch ein bisschen langsamer, aber du musst nicht wissen, wieviel Elemente reinmüssen. Ich bevorzuge immer LLs, weil Arrays mir viel zu begrenzt sind.
Antworten