Arrays lokal abändern -> Auswahl

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Arrays lokal abändern -> Auswahl

BeitragMo, Dez 28, 2009 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute.

Ich hab grade versucht ne Abfrage für die Auswahl meiner Gegner zu schreiben.
Undzwar soll das ganze so ablaufen:
Die Gegner sollen dem momentanen Level angepasst sein.
Also, sagen wir in Level 1 kommen NUR Gegner mit der ID 1.
In Level 2 kommen Gegner mit der ID 1 UND 2
In Level 5 kommen Gegner mit der ID 1, 2, 3, 4 und 5. Aber es muss nicht zwangsläufig jede ID dann vertreten sein, weil immer nur höchstens 3 Gegner erstellt werden (rand(1,3)).

Jetzt wollte ich keine select case oder if Abfragen einbauen. Das ist unschön und unpraktisch.

Meine Lösung sieht so aus:

Code: [AUSKLAPPEN]
Function SetEnemy(LevelNow)
   
   Local Versuche
   Local Anzahl = Rand(1,3)
   Local ZuNah = 0
   Local Enemys%[LevelNow]
   Local AusWahl%[Anzahl]
   
   For i = 1 To LevelNow
      Enemys[i] = LevelNow - (LevelNow-i)
   Next
   
   
   For i = 1 To Anzahl

;Grundlegendes wie Koordinaten etc

AusWahl[i] = Rand(1,Enemy[LevelNow])
         For VorlageGegner.TVorlageGegner = Each TVorlageGegner
            
            If VorlageGegner\ID = AusWahl[i] Then

Gegner\Image = VorlageGegner\Image
               Gegner\Level = VorlageGegner\Level + (Rand(0, 2))
               Gegner\Erfahrung = VorlageGegner\Erfahrung + (Gegner\Level*10)
               Gegner\Energie# = VorlageGegner\Energie# + Gegner\Level*10
               Gegner\Speed# = VorlageGegner\Speed#
               Gegner\SchussTimer = VorlageGegner\SchussTimer + Rand(100,400)
               Gegner\ID = VorlageGegner\ID
            EndIf


Aber der Compiler beschwert sich, dass das BlitzArray statisch zu sein hat.
Und ein normales Array darf ich ja in ner Funktion nicht erstellen.

Kann mir vielleicht jemand aus dem Dillema raushelfen?

Wäre echt nett.

Lg, m0rgenstern

Midimaster

BeitragMo, Dez 28, 2009 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine VorlageGegner sind schon außerhalb der Funktion als TYPES definiert. Ich denke mal, dort hat jeder schon seine ID erhalten. Was spricht dann dagegen in der Auswahlfunktion es einfach so zu machen:

BlitzBasic: [AUSKLAPPEN]

Function SetEnemy(LevelNow%)
Local Nr%
For VorlageGegner.TVorlageGegner = Each TVorlageGegner
If VorlageGegner\ID <=LevelNow Then
Gegner.TVorlageGegner = New TSpielGegner
Gegner\Image = VorlageGegner\Image
....
Nr=Nr+1
EndIf
If Nr=3 Then Exit
Next
End Function


Ich lass übrigens immer eine laufende Nummer als eines der FIELDs in einem Type bei der Erstellung (=NEW) von Elementen mitlaufen. Das ist praktisch, weil Du dann konkret ein Element ansprechen kannst:

BlitzBasic: [AUSKLAPPEN]
Type TVorlageGegner
Field Nr%
....
End Type

A.TVorlageGegner= New TVorlageGegner
A\Nr=Wert
Wert=Wert+1


Das wäre jetzt hierbei der Zufallsauseahl ganz praktisch:


BlitzBasic: [AUSKLAPPEN]


Dim ZufallsListe%(999)

Function SetEnemy(LevelNow%)
Local i%, Zufall%, Anzahl%
For VorlageGegner.TVorlageGegner = Each TVorlageGegner
If VorlageGegner\ID <=LevelNow Then
Anzahl=Anzahl+1
Zufallsliste(Anzahl)=VorlageGegner\Nr
EndIf
Next
For I=1 To 3
Zufall=Rand(1,Anzahl)
For VorlageGegner.TVorlageGegner = Each TVorlageGegner
If VorlageGegner\Nr =ZufallsListe(Zufall) Then
Gegner.TVorlageGegner = New TSpielGegner
Gegner\Image = VorlageGegner\Image
....
Exit
EndIf
Next
Next
End Function
  • Zuletzt bearbeitet von Midimaster am Mo, Dez 28, 2009 13:51, insgesamt einmal bearbeitet

M0rgenstern

BeitragMo, Dez 28, 2009 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Folgendes spricht dagegen:
Angenommen ich bin in Level 5 und lasse 3 Gegner erstellen.
Dann werden folgende Gegnertypen erstellt:

Gegner1 mit der ID 1
Gegner2 mit der ID 2
Gegner3 mit der ID 3

weil er die Gegnertypen ja von oben nach unten durchgeht.
Dann kommt immer der mit der ID1 zuerst etc.

oder hab ich nen Denkfehler drin?
Ansonsten wärs echt total einfach.

Lg, M0rgenstern

Midimaster

BeitragMo, Dez 28, 2009 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
hab das obere grad noch mal editiert

M0rgenstern

BeitragMo, Dez 28, 2009 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist genial.
Vielen Dank.
Warum bin ich nicht auf die Lösung gekommen Crying or Very sad Embarassed

Das NummernFeld ist schnell ingefügt und verarbeitet.
Vielen Dank, ich editier das ganze nochmal wenns funktioniert (würde mich wundern wenn nicht), hab jetzt leider keine Zeit mehr.

Lg, M0rgenstern

TimBo

BeitragMo, Dez 28, 2009 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
die Zufallsliste kann man doch als Type darstellen.

Mir ist dieses 999 Fields erstellen ein Dorn im Auge.

Code: [AUSKLAPPEN]
Type Zufall
  field ID
end Type

for i=0 to anzahl
  z.zufall = new zufall
  z\id = ermittelteId
next
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

M0rgenstern

BeitragMo, Dez 28, 2009 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ihr beiden.
Funktioniert richtig gut.
Aber den Type hab ich rausgelassen.
Das mit dem Dim Feld funktioniert super, auch wenn ich weiß, dass es nicht die perfekte Lösung ist.

Lg, M0rgenstern

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group