dynamisch mit Types

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

shark95

Betreff: dynamisch mit Types

BeitragSo, Jan 28, 2007 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Programmierer!

Ich bin gerade dabei ein kleines Panzerspiel zu programmieren. Zurzeit hab eich 3 Types: einmal der Panzer selbst (also nur das Fahrzeug), dann das Schussgerät, und der Schuss selber.

Was ich jetzt nicht verstehe, wie ich die 3 Sachen möglichst dynamisch verbinden kann. Zurzeit habe ich z.B. im Schussgerat-Type einfach die x- und y-Werte des Panzertypes übergeben indem ich zuerst ein Objekt von Panzer erstellt haben und dann direkt im Code Panzer1.x übergeben habe. Also extrem umständlich.

So ich hoffe ihr könnt mir da irgendwie helfen.

Danke
 

Dreamora

BeitragSo, Jan 28, 2007 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Das einfachste ist im Panzer ein Field vom Type Schussgeraet.

Den Schuss brauchst du ja nicht zu verbinden, der wird nur abgeschossen und dann automatisch aktualisiert ohne irgend einen zusammenhang zum Panzer / Schussgeraet.

Ich nehme an du hast im Schuss also in der Klasse eine Liste die alle Objekte von diesem Typ speichert die existieren oder? Für den Update in der Mainloop mein ich. (wenn nicht gibt es einige Tutorials die zeigen wie man das am geschicktesten macht, denn BM hat keine Objektlisten mehr wie das in Blitz3D / BlitzPlus der Fall war, die musst du selbst einbauen wenn du sie brauchst)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

shark95

BeitragSo, Jan 28, 2007 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnelle Antwort.

Ist es also möglich Types in Types zu erstellen? Wenn ja wie greife ich dann auch die Variablen des Übergeordneten type zu?!

Danke
 

Dreamora

BeitragSo, Jan 28, 2007 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Möglich weiss ich net, ging mal bin mir aber net sicher das es noch geht.

Aber es ist auch garnicht nötig, sowas zu machen.

Als einfaches beispiel

Code: [AUSKLAPPEN]

superstrict
Type Waffe
  field schaden:int
End Type

Type Panzer
  field name:string
  field waffe:Waffe
  field health:int

  method fire(target:Panzer)
    target.damage(self.waffe.schaden)
  end method

  method damage(schaden:int)
    self.health :- schaden
    if self.health < 0
      print self.name + " wurde zerstört"
  end method
end type
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

shark95

BeitragFr, Feb 02, 2007 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, jedoch funktioniert der Code bei mir nicht. Hat jemand nen ausführbaren Code, der diese Beispiel verdeutlicht (irgendwie versteh ich das noch nicht ganz).

Danke
 

E. Urbach

ehemals "Basicprogger"

BeitragFr, Feb 02, 2007 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Musst doch nur den Code von Dreamora etwas verändern.

Ein typischer (vereinfachter) OGame-Kampf:
Code: [AUSKLAPPEN]
SuperStrict
Type Waffe
  Field schaden:Int
 
  Method SetDamage(newDmg:Int)
    schaden = newDmg
  End Method
End Type

Type Panzer
  Field name:String
  Field waffe:Waffe
  Field health:Int = 100

  Method fire(target:Panzer)
    target.damage(self.waffe.schaden)
  End Method

  Method damage(schaden:Int)
    self.health :- schaden
    If self.health < 0
      Print self.name + " wurde zerstört"
   EndIf
  End Method

  Method GetHealth:Int()
    Return health
  End Method

  Method SetWeapon(weap:Waffe)
    Self.waffe = weap
  End Method
End Type

Global SuperWaffe:Waffe = New Waffe
Global SchwacheWaffe:Waffe = New Waffe

SuperWaffe.SetDamage(30)
SchwacheWaffe.SetDamage(10)

Global instanz1:Panzer = New Panzer
Global instanz2:Panzer = New Panzer

instanz1.name = "Panzer 1"
instanz2.name = "Panzer 2"
instanz1.SetWeapon(SuperWaffe)
instanz2.SetWeapon(SchwacheWaffe)

Print "Panzer 1: " + instanz1.GetHealth() + "LP"
Print "Panzer 2: " + instanz2.GetHealth() + "LP"

While instanz1.GetHealth() > 0 And instanz2.GetHealth() > 0
   
   Print ""
   Print "Kampf beginnt"
   
   instanz1.Fire(instanz2)
   instanz2.Fire(instanz1)
   
   Print "Panzer 1: " + instanz1.GetHealth() + "LP"
   Print "Panzer 2: " + instanz2.GetHealth() + "LP"
   
Wend
End
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
 

shark95

BeitragDo, Feb 08, 2007 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen DAnk!

Aber kann man das nicht so machen, dass ich vom untergeordneten Objekt auf das Übergeordnete zugreifen kann.

Mal folgendes Beispiel: Ich hab nen Type Panzer, der besitzt x und y Koordinate. Dann gibts noch den Type Waffe, der auch x und y Koordinaten hat, diese muss aber ständig mit den Koordinaten des jeweiligen Panzers abgeglichen werden.
 

Dreamora

BeitragDo, Feb 08, 2007 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wo ist das problem? self.waffe.x = self.x; self.waffe.y = self.y wenn waffe ein field in type panzer ist und du auf einem panzer objekt bist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

shark95

BeitragDo, Feb 08, 2007 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ah ok jetzt hab ichs gecheckt Very Happy .

Danke

Markus2

BeitragFr, Feb 09, 2007 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
@shark95
du kannst ja wenn das Projektil erstellt wird ,
dieser Struktur den Panzer übergeben .
Wenn das Projektil aufprallt kannste dann direkt dem Panzer
der es abgeschossen hat Punkte geben oder so .
Ich denke darum ging es dir .

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group