Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
FB_Freak
Anmeldungsdatum: 11.11.2011 Beiträge: 1
|
Verfasst am: 11.11.2011, 10:35 Titel: OOP Frage |
|
|
Hi,
Ich hätte da mal ein paar Fragen zum OOP coding.
Ich habe mir dieses beispiel jetzt geschrieben:
Code: |
ScreenRes 320,240,32
Cls
Type kreis
Declare Sub zeichne()
Declare Constructor(ByVal x_i As Integer,ByVal y_i As Integer)
x As Integer
y As Integer
End Type
Constructor kreis(ByVal x_i As Integer,ByVal y_i As Integer)
x = x_i
y = y_i
End Constructor
Sub kreis.zeichne()
Circle (x,y),10
End Sub
Dim k1 As kreis Ptr = New kreis(10,10)
Dim k2 As kreis Ptr = New kreis(40,60)
Do
Cls
k1->zeichne
k2->zeichne
Sleep 10
Loop Until InKey="q"
|
Meine Frage ist jetzt wie würde man diesen in einem Game umsetzen?
mit einer foreach schleife würde man es ja in C++ und so machen um alle objekte zu erfassen. (Müssen natürlich vorher per array ne index id bekommen)
Wie sieht es jetzt aus wenn ich ein neuen Objekt per Tastendruck erstellen würde? Ich müsste ja eigentlich nur ein neues Objekt als instanz erzeugen oder?
Und wie sieht es mit dem Löschen eines Objektes aus?
Wird dann die komplette instanz gelöscht? und wie müsste ich in meinem
beispiel mit der zeichnen sub vorgehen? weil ein zerstörtes objekt sollte ja nicht mehr angezeigt werden.
Da wie ich gelesen habe FB ja nur indirekt OOP unterstützt muss man ja bestimmt anders vorgehen als bei c++ oder c#.
Gruss FB_Freak |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 11.11.2011, 13:37 Titel: |
|
|
Wie etwas umgesetzt wird, ist immer eine Frage davon, wie man es denn gern hätte. Foreach gibt es in FB nicht, zumindest nicht ohne Macros, allerdings ist das hier doch unnötig.
Die Objekte würden einfach als Array angelegt werden und könnten annhand des Index ganz normal iteriert werden. Möchte man benutzerdefinierte neue Objekte erzeugen, könnte man zB das Array mit ReDim Preserve vergrößern, oder man nimmt dafür einfach ein weiteres Array.
Beim Löschen müsste man den aktuellen Kreis überzeichnen. Wenn sich die Kreise nicht überlagern, kann man einfach schwarz drübermalen, ansonsten muss man halt sehen, wie man das richtig lösen kann, da gibt es auch verschiedene Möglichkeiten. Das einfache Überzeichnen könnte man im Destructor des Objekts bewerkstelligen. Wenn man dann Delete auf das Objekt anwendet, wird der ja automatisch aufgerufen.
FB unterstützt schon OOP, nur halt nicht alle Bestandteile davon, mit den aktuellen Mitteln lässt sich aber schon sehr viel umsetzen.
Ich sehe das Problem hier nicht in der Objektorientierung, sondern eben darin, einen Kreis verschwinden zu lassen, der keinen einheitlichen Hintergrund hat. Das ist aber eine Algorithmusfrage, wenn man es mit FB-Mitteln umsetzt. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 12.11.2011, 01:19 Titel: |
|
|
Wait wait wait, für laufzeitveränderliche Arrays nehmen wir doch bitte (double-) linked lists. Das macht die Sache gleich viel einfacher... |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.11.2011, 01:25 Titel: |
|
|
linked lists benutzt du bitte trotzdem nur solang du kein random access szenario hast. im zweifelsfall bäume. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 12.11.2011, 01:32 Titel: |
|
|
Hier ist ja wohl eindeutig von rüberiterieren die Rede  |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 12.11.2011, 09:08 Titel: |
|
|
Eine linked list würde ich hier vermutlich selbst auch hernehmen, aber je nach Wissensstand kann ein einfaches Array besser sein. |
|
Nach oben |
|
 |
Sannaj
Anmeldungsdatum: 19.12.2010 Beiträge: 35
|
Verfasst am: 12.11.2011, 13:07 Titel: |
|
|
FreeBASIC's OOP Unterstürzung endet bei mit Methoden, Konstruktoren/Destructoren und Schutzrechten versehbaren UDT's. Damit kann man zwar schon viel machen, aber die OOP selbst wurde gerade mal angekratzt.
Aber zu deiner Frage:
foreach gibt es zwar nicht. Aber es lässt sich auch problemlos ersetzten.
Statt:
foreach element from array
element = blablabla
end foreach
Schreibst du einfach:
for i = lbound(array) to ubount(array)
array[i] = blablabla
end for
Wenn der Array ohne Basis inizialisiert wurde kannst du statt lbound(array) auch 0 schreiben. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 12.11.2011, 15:00 Titel: |
|
|
Code: | For i As Integer = LBound(array) To UBound(array)
array(i) = ...
Next |
Wir wollen schon die richtige Syntax. |
|
Nach oben |
|
 |
|