Types durchzählen und so weiter

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

C64-Flo

Betreff: Types durchzählen und so weiter

BeitragDo, Dez 21, 2006 9:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich habe kürzlich bemerkt, dass ich unbedingt TYPES in meinem neuen Projekt benötige... Surprised

Also habe ich flugs das eine oder andere Tutorial durchforstet und denke nun auch die Grundzüge begriffen zu haben.

Nur das eine oder andere erscheint mir sehr seltsam....

Wie zähle ich zB meine TYPES durch?

Also Idee ist :
Ich habe eine dynamische Anzahl von Waffen des Typs wpn -



Code: [AUSKLAPPEN]

type wpn
    field s
    field name$
end type


dim waffe.wpn(20)

for a=1 to 20
                    waffe(1)=new wpn
                    select a
                               case 1
                               waffe(a)\name$=("Dolch") waffe(a)\s=4
                               case 2
                               waffe(a)\name$=("Knüppel") waffe(a)\s=6
                              ;[...]
                        end select
next


Zu den 20 festen Basiswaffen kommen später dynmaisch welche dazu oder gehen welche flöten - aber wie zähle ich durch wieviele ich gerade habe bzw kann ich eine Schleife durch alle wpn-TYPES durchlaufen lassen?

mit

Code: [AUSKLAPPEN]

;----durchzählen
anzahl=0
for a=1 to last wpn
        if waffe(a)<>null then
                         inc(anzahl)
                          print waffe(a)\name$+" Schaden: "+waffe(a)\s
                       end if
       next
print "Anzahl der Waffen: "+anzahl


funktioniert es nicht so ganz -
Crying or Very sad
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.)

Farbfinsternis

BeitragDo, Dez 21, 2006 9:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Type TObject
  Global _list:TList

  Field x:Int
  Field y:Int


  Function Add:TObject(x:Int, y:Int)
    Local obj:TObject = New TObject

    if obj._list = Null Then obj._list = New TList
    obj._list.AddLast(obj)

    obj.x = x
    obj.y = y

    Return obj
  End Function
End Type
Global objekte:TObject

For Local i:Int = 0 To 10
  objekte = TObject.Add(Rnd(0,800), Rnd(0,600))
Next

For objekte:TObject = EachIn objekte._list
  Print String(objekte.x)+", "+String(objekte.y)
Next
Farbfinsternis.tv

Justus

BeitragDo, Dez 21, 2006 9:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Speichere deine Instanzen in einer TList. Lies dir außerdem so bald wie möglich Tutorials und Codes zu Objektorientierter Programmierung (kurz: OOP) durch, um neue und effizientere Wege des Programmierens zu erschließen und anwenden zu können.

Eine Möglichkeit mit einer solchen Waffe umzugehen, steht hier:

Code: [AUSKLAPPEN]
'Es empfiehlt sich, mit SuperStrict zu arbeiten, um möglichst eindeutigen und durchschaubaren Code
'zu erhalten. Ist SuperStrict aktiviert, so muss man jede Variable mit ihrem Typ (String, Int, Float, etc.)
'und als Local oder Global usw. definieren.
SuperStrict

Type TWeapon

   'Einfach ein Testfeld
   Field number:Int
   
   'Diese Methode wird automatisch aufgerufen, wenn eine neue Instanz mit New erstellt wird
   Method New()
      self.number = Rand(0,10)
   EndMethod

End Type

'Hier erstellen wir eine neue Liste und
'deklarieren weapon:TWeapon
Global weaponList:TList = New TList
Global weapon:TWeapon

'Wir fügen unserer Variable 4 Waffenobjekte hinzu
ListAddLast(weaponList,New TWeapon)
ListAddLast(weaponList,New TWeapon)
ListAddLast(weaponList,New TWeapon)
ListAddLast(weaponList,New TWeapon)

'Jede einzelne Waffe in der Liste wird durchgegangen
For weapon:TWeapon = EachIn weaponList
   Print weapon.number
Next


Es ist nicht einfach zu verstehen, aber wenn du dir Mühe gibst, viele kleine programmiererische Schritte tust und schnell lernst, wirst du es schaffen.

D2006

Administrator

BeitragDo, Dez 21, 2006 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin jetzt mal mutig und stelle eine These auf:
Da hat jemand aus Versehen in die BlitzMax Kategorie gepostet, obwohl es ein BB Problem ist.

Deshalb verschiebe ich das mal in die BB Beginner Ecke.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

C64-Flo

Betreff: DANKE LIEBER ADMIN!

BeitragDo, Dez 21, 2006 10:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin schon am Verzweifeln hier, weil der ganze Antwort-Code einfach nicht funktionieren will!
(Danke Justus + Farbfinsternis nichtsdestotrotz) Very Happy


Ja, hab mich schon gewundert - obs am Kaffe liegt? Question


Also mit dynamischen Arrays hab ich mal schon ne Weile rumgemacht - allerdings nicht in BB Wink

Das muss doch hier auch irgendwie gehen...?

Frage:

Wie zähle ich alle vorhandenen TYPES durch

zB
Code: [AUSKLAPPEN]

for x=first wpn to last wpn
          [...]
next


Wenn ich das irgendwie könnte, wäre eigentlich der Rest machbar....
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.)

garret

BeitragDo, Dez 21, 2006 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Lass in einer For w.weapon = Each weapon-Schleife alle Types durchlaufen und erhöhe entsprechend eine Zählvariable.

Code: [AUSKLAPPEN]

anzahl=0 ; vorher auf 0 setzen da sie ja sonst immer höher wird
For w.weapon = Each weapon
  anzahl=anzahl+1
  ;[andere Befehle]
Next


Dann musst du nicht die genaue Anzahl (z.B. 20 bei dir) angeben. Die Schleife durchläuft jedes (Each) weapon-Element.

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)

StepTiger

BeitragDo, Dez 21, 2006 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Farbfinsternis hat Folgendes geschrieben:
Code: [AUSKLAPPEN]

Type TObject
  Global _list:TList

  Field x:Int
  Field y:Int


  Function Add:TObject(x:Int, y:Int)
    Local obj:TObject = New TObject

    if obj._list = Null Then obj._list = New TList
    obj._list.AddLast(obj)

    obj.x = x
    obj.y = y

    Return obj
  End Function
End Type
Global objekte:TObject

For Local i:Int = 0 To 10
  objekte = TObject.Add(Rnd(0,800), Rnd(0,600))
Next

For objekte:TObject = EachIn objekte._list
  Print String(objekte.x)+", "+String(objekte.y)
Next


Das ist kein BMax Wink
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Blitzcoder

Newsposter

BeitragDo, Dez 21, 2006 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein bloß nicht.

Code: [AUSKLAPPEN]

type waepon
    field bla
end type


for tmp.weapon = each weapon
    tmp\bla = 10
next
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

StepTiger

BeitragDo, Dez 21, 2006 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
und?
Das sind ganz normale BB Commands...

ps:
da muss "type weapon" stehen, nicht "type waepon"
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group