Types abfrage

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Raiden93

Betreff: Types abfrage

BeitragSo, Okt 03, 2010 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich würde gerne wissen wie ich Types abfragen kann ob eine Gruppe von Gegner noch Lebt oder ob alle schon ToT sind.

Sagen wir mal ich habe 5 Zombies und nach den 5 Zombies sollen 10 kommen da muss ich doch erstmal eine abfrage machen ob die 5 Zombies noch Leben oder ob sie alle schon ToT sind.
Währe echt cool wenn mir jemand ein Beispiel Posten könnte.

MFG:
Raiden93

Xeres

Moderator

BeitragSo, Okt 03, 2010 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon mal selbst darüber Nachgedacht und dir Befehle angeschaut, die man verwenden könnte?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragSo, Okt 03, 2010 23:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weis nicht wo die Types befehle sind unter Hilfe kann ich sie nicht finden :/

Xeres

Moderator

BeitragSo, Okt 03, 2010 23:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne dir zu nahe treten zu wollen: Dann such dir jemanden der für dich programmiert.

Man kann die Englische Standardhilfe mit der OH hier aus dem Portal austauschen und mit einem Druck auf F1 alle Befehle in der IDE nachschlagen - hübsch mit Verwandten Schlüsselworten.
Wenn du so was simples wie Suchen in einem bereits exzellenten Nachschlagewerk (in Verbindung mit dem Internet Exclamation ) nicht hin bekommst, ist Hopfen und Malz verloren.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragSo, Okt 03, 2010 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
passiert

Pummelie

BeitragMo, Okt 04, 2010 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Beschäftige dich erstmal ein weilchen mit der Funktion und Verwendung von Types, und verstehe diesen Code hier:

BlitzBasic: [AUSKLAPPEN]
Type Zombie
Field life%
Field x%,y%,z%
Field mesh%
Field texture%
End Type

Function CheckZombies()
Local typ.Zombie=First Zombie
For typ.Zombie=Each Zombie
If typ\life<1 Then
DebugLog("Zombie at: "+typ\x+" "+typ\y+" "+typ\z+" = death!")
Delete typ.Zombie
Exit
EndIf
Next
End Function
It's done when it's done.

Raiden93

BeitragMo, Okt 04, 2010 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein kleinen Versuch gemacht aber kläglich dran gescheitert er Löscht zwar die Punkte aber auch nach dem Letzten sagt er mir nicht das alle ToT sind.Was hab ich Falsch gemacht?


Code: [AUSKLAPPEN]
;In diesem Versuch,versuche ich Spieler zu Spawnen und sie abfragen ob sie noch Leben


Type SpielerTyp
   Field X#, Y#, Speed# ;Bewegung
End Type

Global Spieler.SpielerTyp

AppTitle "Type Abfrage"
Graphics 800,600,32,2
SetBuffer BackBuffer()


For i=1 To 10
   Spieler.SpielerTyp = New SpielerTyp
   Spieler\X# = Rand(1,800)
   Spieler\Y# = Rand(1,600)
   Spieler\Speed# = Rnd(0.1,0.2)
Next





Repeat
   Cls
   
   Spieler_zeichnen()
   
   Flip 0
Until KeyHit(1)

Function Alles_ToT()
   Text 400,300,"ALLES TOOOOOOOOOOOOOOT"
End Function

Function Spieler_zeichnen()
   For Spieler.SpielerTyp = Each SpielerTyp
      If Spieler=Null
         Alles_ToT
      End If
      
      Rect Spieler\X#,Spieler\Y#,3,3
      
      If MouseHit(1)
         Delete Spieler
      End If
   Next
End Function

Pummelie

BeitragMo, Okt 04, 2010 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Function Spieler_zeichnen()
Spieler.SpielerTyp=First SpielerTyp
If Spieler.SpielerTyp=Null
Alles_ToT
End If
For Spieler.SpielerTyp = Each SpielerTyp


Rect Spieler\X#,Spieler\Y#,3,3

If MouseHit(1)
Delete Spieler
End If
Next
End Function


Wenn ein Type leer ist, wird die For Next Schleife übersprungen.
It's done when it's done.

Xeres

Moderator

BeitragMo, Okt 04, 2010 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Die For...Each Schleife wird überhaupt nicht durchlaufen, wenn keine Instanz existiert.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragMo, Okt 04, 2010 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh ok gut zu wissen.

Raiden93

BeitragMo, Okt 04, 2010 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm es klappt soweit alles.Wie sollte ich am besten die Realisierung der verschiedenen Gegnern machen?

Damit meine ich jeden einzelne verschiedene Gegner in eine andere Funktion packen und sie dann einzeln aufrufen?

Oder doch ehr anders?

Dice of Darkness

BeitragDi, Okt 05, 2010 2:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab in meinem ersten Spiel die Gegner in verschiedene Types gepackt, aber hinterher festgestellt, dass das ziemlicher Unsinn war. Nimm am besten einen Type "Enemy" (oder wie auch immer du den nennst) und erstelle darin ein Field "Kind" (also Sorte). So mache ich das immer, wenn ich die Gegner unterscheiden will. Also wenn an Stelle x z.B. ein grünes Monster sein soll, erzeuge ein Objekt mit enemy\kind = green, soll es ein rotes sein, nimmst du enemy\kind = red usw. Das musst du natürlich deinen Wünschen und Vorstellungen anpassen Wink.

Falls die Monster sich grundlegend unterschiedlich verhalten, dann nimm am besten verschiedene Funktionen, um ihr Verhalten zu steuern. Also nimmst du einen Select-Case-Block und guckst, was für ein Viech das ist. Hier ein ungefährer Beispielcode:

Code: [AUSKLAPPEN]
Type Enemy
   Field kind
End Type

(...)

Function EnemyBehaviour()   ; hier wird entschieden, wie das Monster sich verhalten soll
   For enemy.enemy = Each enemy
      Select enemy\kind
         Case "red" : RedEnemy()   ; wenn das Monster rot ist, rufe die Funktion für dessen Verhalten auf
         Case "green" : GreenEnemy()
         (...)
      End Select
End Function


Function RedEnemy()
   ;hier wird festgelegt, was die roten Monster machen sollen
End Function


Function GreenEnemy()
   ;siehe oben...
End Function

(...)
Gratis Spiele, Musik, Tools
 

PacMani

BeitragDi, Okt 05, 2010 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit "alle Monster in ein Type packen" überlege ich mir auch gerade. Ich wollte sonst einzelne Types erstellen. Was sagen denn die Experten dazu?^^

Xeres

Moderator

BeitragDi, Okt 05, 2010 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kommt darauf an.
Variationen können gut mit einem Type verwaltet werden. Bei Unterschiedliche Verhaltensweisen/Reaktionen auf die Spielwelt macht sich eine Aufteilung vielleicht schon besser.
Je mehr Objekte in einer Type-Kollektion verwaltet werden, desto mehr wird bei For...each durch gezählt und je mehr Bedingungen braucht man für alle Spezialfälle - ist auch eine Sache der Übersichtlichkeit.
Am besten wäre es immer, vorher (vor dem coden) eine Aufstellung zu haben, was gebraucht wird, um das intelligent zusammen zu fassen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragMi, Okt 06, 2010 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist das soweit Richtig weil ich langsam das Gefühl bekomme wenn ich es so mache das ich irgendwo hängen bleibe.Deswegen frag ich lieber mal nach.
Code: [AUSKLAPPEN]
;In diesem Versuch,versuche ich Spieler zu Spawnen und sie abfragen ob sie noch Leben
Type TankGegnerTyp
   Field X#, Y#, Speed# ;Bewegung
End Type

Type SpeedGegnerTyp
   Field X#, Y#, Speed#
End Type


Global TankGegner.TankGegnerTyp
Global SpeedGegner.SpeedGegnerTyp


AppTitle "Type Abfrage"
Graphics 800,600,32,2
SetBuffer BackBuffer()


Global Level = 1



For i=1 To 5
   Tank_Gegner_Erstellen()
Next

For i=1 To 5
   Speed_Gegner_Erstellen()
Next



Repeat
   Cls
   Level_System()
   Gegner_Kollision()
   
   Flip 0
Until KeyHit(1)

Function Level_System()
   Select Level
      Case 1
         For TankGegner.TankGegnerTyp = Each TankGegnerTyp
            Color 255,0,0
            Oval TankGegner\X#,TankGegner\Y#,3,3
            TankGegner\X# = TankGegner\X# +TankGegner\Speed#
         Next
         TankGegner.TankGegnerTyp=First TankGegnerTyp
         If TankGegner.TankGegnerTyp=Null
            For i=1 To 5
               Tank_Gegner_Erstellen()
            Next
         End If
         
         For SpeedGegner.SpeedGegnerTyp = Each SpeedGegnerTyp
            Color 0,0,255
            Oval SpeedGegner\X#,SpeedGegner\Y#,3,3
            SpeedGegner\X# = SpeedGegner\X# +SpeedGegner\Speed#
         Next
   End Select
End Function

Function Tank_Gegner_Erstellen()
   TankGegner.TankGegnerTyp = New TankGegnerTyp
   TankGegner\X# = 0
   TankGegner\Y# = Rnd(1,600)
   TankGegner\Speed# = Rnd(0.01,0.03)
End Function

Function Speed_Gegner_Erstellen()
   SpeedGegner.SpeedGegnerTyp = New SpeedGegnerTyp
    SpeedGegner\X# = 0
   SpeedGegner\Y# = Rnd(1,600)
   SpeedGegner\Speed# = Rnd(0.04,0.06)
End Function

Function Gegner_Kollision()
   For TankGegner.TankGegnerTyp = Each TankGegnerTyp
      If TankGegner\X# => 600
         Delete TankGegner
      End If
   Next
   For SpeedGegner.SpeedGegnerTyp = Each SpeedGegnerTyp   
      If SpeedGegner\X# => 600
         Delete SpeedGegner
      End If
   Next
End Function

Xeres

Moderator

BeitragMi, Okt 06, 2010 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man so machen. Allein wegen dem Geschwindigkeitsunterschied ein anderen Type zu verwenden ist vielleicht etwas übertrieben - da kann man mit Parametern beim Erstellen eigentlich genug regeln um aussehen/Geschwindigkeit zu varieeren (und ggf. um mehrere Gegner gleichzeitig zu erstellen), aber prinzipiell kann man es auch so machen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragMi, Okt 06, 2010 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Es schein soweit alles zu Funktionieren,nur habe ich das Problem,das z.b der Tank nur 3 die schleife durchlaufen soll.Wie ist sowas eigentlich möglich?

Edit:
Ich hab es mal so versucht aber es will nicht 3 mal die Schleife durchlaufen :/ habe ich was übersehen die schleife läuft nur 1 mal durch.
Code: [AUSKLAPPEN]
;In diesem Versuch,versuche ich Spieler zu Spawnen und sie abfragen ob sie noch Leben
Type TankGegnerTyp
   Field X#, Y#, Speed# ;Bewegung
End Type

Type SpeedGegnerTyp
   Field X#, Y#, Speed#
End Type


Global TankGegner.TankGegnerTyp
Global SpeedGegner.SpeedGegnerTyp


AppTitle "Type Abfrage"
Graphics 800,600,32,2
SetBuffer BackBuffer()


Global Level = 1



For i=1 To 5
   Tank_Gegner_Erstellen()
Next

For i=1 To 5
   Speed_Gegner_Erstellen()
Next



Repeat
   Cls
   Level_System()
   Gegner_Kollision()
   
   Flip 0
Until KeyHit(1)

Function Level_System()
   Select Level
      Case 1
         ;TankGegner Spawnen
         For TankGegner.TankGegnerTyp = Each TankGegnerTyp
            Color 255,0,0
            Oval TankGegner\X#,TankGegner\Y#,3,3
            TankGegner\X# = TankGegner\X# +TankGegner\Speed#
         Next
         
         ;TankGegner nur 3 mal Durchlaufen <------ Hier taucht der Fehler auf
         Local Durchlauf
         If Durchlauf > 3
            Durchlauf = Durchlauf +1
            TankGegner.TankGegnerTyp=First TankGegnerTyp
            If TankGegner.TankGegnerTyp=Null
               For i=1 To 5
                  Tank_Gegner_Erstellen()
               Next
            End If
         End If
         
         ;SpeedGegner Spawnen
         For SpeedGegner.SpeedGegnerTyp = Each SpeedGegnerTyp
            Color 0,0,255
            Oval SpeedGegner\X#,SpeedGegner\Y#,3,3
            SpeedGegner\X# = SpeedGegner\X# +SpeedGegner\Speed#
         Next
         SpeedGegner.SpeedGegnerTyp = First SpeedGegnerTyp
         If SpeedGegner.SpeedGegnerTyp=Null
            For i=1 To 5
               Speed_Gegner_Erstellen()
            Next
         End If
   End Select
End Function

Function Tank_Gegner_Erstellen()
   TankGegner.TankGegnerTyp = New TankGegnerTyp
   TankGegner\X# = 0
   TankGegner\Y# = Rnd(1,600)
   TankGegner\Speed# = Rnd(0.08,0.1)
End Function

Function Speed_Gegner_Erstellen()
   SpeedGegner.SpeedGegnerTyp = New SpeedGegnerTyp
    SpeedGegner\X# = 0
   SpeedGegner\Y# = Rnd(1,600)
   SpeedGegner\Speed# = Rnd(0.04,0.06)
End Function

Function Gegner_Kollision()
   For TankGegner.TankGegnerTyp = Each TankGegnerTyp
      If TankGegner\X# => 600
         Delete TankGegner
      End If
   Next
   For SpeedGegner.SpeedGegnerTyp = Each SpeedGegnerTyp   
      If SpeedGegner\X# => 600
         Delete SpeedGegner
      End If
   Next
End Function

Raiden93

BeitragDo, Okt 07, 2010 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe nochmal alles in einem anderen Code ohne Types gemacht da Funktioniert es aber warum bei meinem Code nicht :/ ?

Xeres

Moderator

BeitragDo, Okt 07, 2010 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe nicht, was du erreichen möchtest.
Code: [AUSKLAPPEN]
Local Durchlauf
         If Durchlauf > 3
Die Variable wird mit 0 Initialisiert, weshalb die Bedingung nie Wahr werden kann - so, was ist der Plan?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragDo, Okt 07, 2010 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich wollte eigentlich eine Schleife machen die aber nur 3 mal durchläuft anstatt => hätte ich wohl mal <= machen sollen aber selbst das Funktioniert nicht.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group