Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

OOP Frage

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
FB_Freak



Anmeldungsdatum: 11.11.2011
Beiträge: 1

BeitragVerfasst am: 11.11.2011, 10:35    Titel: OOP Frage Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 11.11.2011, 13:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.11.2011, 01:19    Titel: Antworten mit Zitat

Wait wait wait, für laufzeitveränderliche Arrays nehmen wir doch bitte (double-) linked lists. Das macht die Sache gleich viel einfacher...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 12.11.2011, 01:25    Titel: Antworten mit Zitat

linked lists benutzt du bitte trotzdem nur solang du kein random access szenario hast. Zunge rausstrecken 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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.11.2011, 01:32    Titel: Antworten mit Zitat

Hier ist ja wohl eindeutig von rüberiterieren die Rede Zunge rausstrecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 12.11.2011, 09:08    Titel: Antworten mit Zitat

Eine linked list würde ich hier vermutlich selbst auch hernehmen, aber je nach Wissensstand kann ein einfaches Array besser sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sannaj



Anmeldungsdatum: 19.12.2010
Beiträge: 35

BeitragVerfasst am: 12.11.2011, 13:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 12.11.2011, 15:00    Titel: Antworten mit Zitat

Code:
For i As Integer = LBound(array) To UBound(array)
    array(i) = ...
Next


Wir wollen schon die richtige Syntax.happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz