Zum letzten Type eintrag springen, welche den Wert 1 hat?
Übersicht

blackmasterBetreff: Zum letzten Type eintrag springen, welche den Wert 1 hat? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
konnte den Titel nicht komplett oben hinschreiben. Nun meine Frage und zwar, möchte ich gerne zum letzten Type eintrag springen, welche den Wert 1 von einer bestimmten Variable hat. Ich habe das mal so versucht: Code: [AUSKLAPPEN] 'Alle Spieler abfragen und zeichnen
For Info:Spieler = EachIn Spieler.List 'Inhalt entfernt... 'Inhalt entfernt... 'Inhalt entfernt... For Info:Spieler = EachIn Spieler.List If SpielerNummer = Info.SpielerNummer Then 'Wenn dieser Spieler schon verloren hat, dann überspringen If Info.SpielerVerloren = 1 Then SpielerNummer = SpielerNummer + 1 If SpielerNummer > MaxSpieler Then SpielerNummer = 1 EndIf EndIf Next 'Inhalt entfernt... 'Inhalt entfernt... 'Inhalt entfernt... Next Ich habe die Schleife verschachteln müssen, da es anders nicht geht, deshalb frage ich 2 mal die Type Felder ab. Ich habe ja viele Code Teile entfernt beim Posten um es besser übersichtlich zu halten. Zu meinem Problem: Das mit den Überspringen funktioniert nicht immer gut, wenn der erste Spieler verloren hat und es dann eins Weiter zählt, klappt auch sehr gut, aber sobald SpielerNummer wieder auf 1 ist, überspringt er den Type Feld nicht mehr, obwohl dieser Feld (Info.SpielerVerloren) auf 1 ist. Kann mein Problem jetzt nicht genauer erklären, liegt vieleicht daran, das es erst Morgends ist ![]() Ich hoffe, das man es trotzdem verstehen kann, wie ich es formuliert habe. Also, es soll die Type Felder so lange überspringen, wie Info.SpielerVerloren=1 ist. Für Hilfen wäre ich euch sehr dankbar. MfG |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich weiss nicht ob ich dich richtig verstanden habe, aber du könntest das z.B. auch so machen: Code: [AUSKLAPPEN] Function SpielerVerloren:Int(SpielerNummer:Int) For Info:Spieler = EachIn Spieler.List If Info.SpielerNummer = SpielerNummer Then If Info.SpielerVerloren = 1 Then Return True Else Return False EndIf EndIf Next 'Spieler nicht gefunden.. sollte nicht vorkommen Return True End Function ... 'Generell mal den nächsten Spieler auswählen Local NaechsterSpieler:Int = AktuellerSpieler + 1 'Wenn die Spielergrenze überschritten wurde, 'den Spieler auf den ersten Spieler setzen If NaechsterSpieler > MaxSpieler Then NaechsterSpieler = 1 EndIf 'Spielerliste sortiert nach Zahlen durchgehen For i:Int = NaechsterSpieler To Spieler.List.Count() If SpielerVerloren(i) Then 'Wenn der Spieler verloren hat, überspringen Continue Else 'Wenn nicht, dann ist dies der nächste Spieler NaechsterSpieler = i 'Schleife abbrechen Exit EndIf Next |
||
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für deine antwort.
Ich habe nur die Function bei mir eingebaut und lasse eine While Schleife solange durchlaufen, wie SpielerVerloren=1 ist. While SpielerVerloren(SpielerNummer) = 1 SpielerNummer = SpielerNummer + 1 If SpielerNummer > MaxSpieler Then SpielerNummer = 1 SpielerVerloren(SpielerNummer) Wend Ich tu das noch abändern, damit ich keine endlos schleife habe, wenn kein Spieler mehr vorhanden ist. Funktioniert einwandfrei. Und vielen Dank für deine Hilfe. MfG |
||
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du willst zum letzen Type Springen der den Wert 1 hat oder?
Die Ganze Liste durchgehen finde ich bisschen viel, wieso kehrst du die Liste nicht einfach um (Reverse), damit hast du den letzen eintrag direkt als 1. und er kann sich von hintne nach vorne durcharbeiten. Vielleicht ist das Resource sparender, hab aber keine Tests gemacht. |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
kog:
Das glaub ich nicht, dass das sparsamer ist. Denn das Reverse wird auch mindestens(!) einmal die Liste komplett durchgehen müssen. Aber man kann ja einfach selbst die Liste von hinten durchgehen. Hab ich schon gemacht, sollte kein Problem sein. Allerdings hab ich hier jetzt keinen Zugriff auf BMax. Glaube aber, man muss dabei mit "TLink"s hantieren. Innerhalb ner Liste kriegt man den TLink zu einem Eintrag (beim ersten Mal den letzten) und mithilfe dieses Links kriegt man den, des vorigen Eintrags, worüber man auch selbst den vorigen kriegt. Und so weiter. Kompliziert zu beschreiben, Umsetzung sollte aber einfach sein. Dann bricht man halt einfach ab, wenn man die erste 1 findet oder die Liste durchgegangen wurde. |
||
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 |
![]() |
Moep |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Function getLastBlabla:TObj()
For i=list.Count()-1 To 0 Step -1 obj=TObj(list.ValueAtIndex(i)) If obj.variable=1 Return obj EndIf Next Return Null Next müsste das nich auch so gehen? Weiß jetz nich ob ich das Problem richtig verstanden hab... Aber wenn man das letzte Objekt mit einer bestimmten Bedingung aus einer Liste haben will dürfte das so funktionieren.. mfg |
||
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42 Achtung: Suchtgefahr! moep123.ohost.de |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könnte so gehen. Wobei dass dann wirklich etwas uneffizient ist, da ganz stark anzunehmen ist, dass die Methode "ValueAtIndex" jedesmal durch die Liste durchiteriert bist zu der Stelle. Nehmen wir zum Beispiel an, die Liste hat 10 Einträge. Beim ersten Schleifendurchlauf, wird die Liste komplett durchiteriert, also 10 mal. Beim zweiten 9 mal, beim dritten 8 mal usw. usf. Angenommen wir suchen eigentlich den ersten Eintrag, so bewegen wir uns 10+9+8+7+6+5+4+3+2+1 = 55 mal durch die Liste. Mit meiner beschriebenen Methode, bewegen wir uns in dem Fall (=worst case) 10 mal durch die Liste. | ||
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 |
![]() |
Moep |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay das hast du natürlich recht , daran hab ich überhaupt nicht gedacht^^
Aber wer weißt wie ValueAtIndex arbeitet? ![]() mfg |
||
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42 Achtung: Suchtgefahr! moep123.ohost.de |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Method ValueAtIndex:Object( index ) Assert index>=0 Else "Object index must be positive" Local link:TLink=_head._succ While link<>_head If Not index Return link._value link=link._succ index:-1 Wend RuntimeError "List index out of range" EndMethod Suchaufwand: 20 sekunden |
||
![]() |
Moep |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay da muss ich mich wohl geschlagen geben^^
Und.... "Suchaufwand 20 Sekunden"... is mir schon klar, dass das schnell geht..das Thema war für mich einfach nur nich so wichtig, dass ich das extra nachgucke. mfg |
||
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42 Achtung: Suchtgefahr! moep123.ohost.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group