Prüfung des Objekttypen?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

juse4pro

Betreff: Prüfung des Objekttypen?

BeitragSo, Mai 02, 2010 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Wie kann ich in BlitzMax solche Objekttests vollziehen:
PSEUDOCODE:
Code: [AUSKLAPPEN]

wenn variable=TWaffe
dann hauen
wenn variable=TSchild
dann blocken
wenn nicht
tue nix


noch eine anmerkung: Ich arbeite im SuperStrict... also wird der compiler denken, dass alle werte, die aus TWaffe kommen (welches eine Tochterklasse von TItem ist), nicht existieren, da Variable ja nur vom Typ TItem ist... Gibts da eine andere Lösung?

mfg: juse4pro
Portfolio |LinkedIn |XING
  • Zuletzt bearbeitet von juse4pro am So, Mai 02, 2010 21:49, insgesamt einmal bearbeitet

mpmxyz

BeitragSo, Mai 02, 2010 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax: [AUSKLAPPEN]
If TWaffe(Item)<>Null
Local Waffe:TWaffe=TWaffe(Item)
...

Stichwort: Umcasten
Bei einer Vererbung entsteht eine "ist ein"-Beziehung.
Das heißt, dass ein Waffenobjekt auch ein Item-Objekt ist und entsprechend genutzt werden kann.
Umgekehrt ist es aber nicht garantiert, dass ein Item-Objekt auch ein Waffen-Objekt ist, weil es auch ein Schildobjekt sein könnte.
Daher benötigt man explizit eine Umwandlung der Referenz.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

juse4pro

BeitragSo, Mai 02, 2010 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahhh! Jetzt wird mir einiges klar... Dankesehr Wink
Portfolio |LinkedIn |XING

FireballFlame

BeitragSo, Mai 02, 2010 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
mpmxyz hat Folgendes geschrieben:
BlitzMax: [AUSKLAPPEN]
If TWaffe(Item)<>Null

Die Null-Prüfung muss man übrigens gar nicht explizit angeben, BlitzMax: [AUSKLAPPEN]
If TWaffe(Item)
reicht auch schon.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Der Eisvogel

BeitragSo, Mai 02, 2010 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls du genaueres dazu wissen willst: http://zehr.de/downloads/BlitzMax-OOP.pdf
Das war mein erstes BM-Tut. Es ist sehr ausführlich, ich habe letzens erst wieder dort etwas nachgeguckt. Kann es nur empfehlen.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

juse4pro

BeitragMo, Mai 03, 2010 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Nene, schongut, ich weis ja, was Casten ist, aber ich bin nicht draufgekommen, dass ich das hier anwenden kann...

Danke Leute!
Portfolio |LinkedIn |XING

Alfadur

BeitragMi, Mai 05, 2010 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest auch z.B. deiner Item Klasse eine "Action" (oder so) Methode geben, in der Waffen und Schild Klasse überschreibst du diese Methode so das die Waffe haut und das Schild blockt.
Dann brauchst du bei deinen Items immer nur Item.Action() aufzurufen und der Rest geht von allein ... in etwa so:

Code: [AUSKLAPPEN]
SuperStrict


Type TItem

   Global list:TList=CreateList()

   Field name:String

   Method New()
      Self.list.addlast(Self)
   End Method

   Method Action()
      Print name+" macht die Standard Action"
   End Method

   Function CreateObject:TItem(name:String)
      Local i:TItem=New TItem
      i.name=name
      Return i
   End Function

   Function AllActions()
      For Local i:TItem=EachIn Self.list
         i.Action()
      Next
   End Function
   
End Type


Type TWaffe Extends TItem

   Method Action()
      Print "Waffe "+name+" haut!"
   End Method

   Function CreateObject:TWaffe(name:String)
      Local w:TWaffe=New TWaffe
      w.name=name
      Return w
   End Function
   
End Type

Type TSchild Extends TItem
   
   Method Action()
      Print "Schild "+name+" blockt!"
   End Method

   Function CreateObject:TSchild(name:String)
      Local s:TSchild=New TSchild
      s.name=name
      Return s
   End Function    

End Type


TSchild.CreateObject("vergammeltes Holzschild")
TSchild.CreateObject("Großer Belagerungsschild der Elfen")
TWaffe.CreateObject("Schattenmantelstecher Malak-Nir")
TItem.CreateObject("Heiltrank")


TItem.AllActions()
WaitKey()

A Cray is the only computer that runs an endless loop in less than four hours.

juse4pro

BeitragMi, Mai 05, 2010 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
nene, das würde mein Konzept sprengen Razz
Portfolio |LinkedIn |XING

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group