Flamefire hat folgendes geschrieben : |
Idee war, aus den verbleibenden Karten einen neuen Stapel zu erstellen (Als Methode von TDeck mit einem Parameter der TRequest Klasse und einer TRequest.MatchCondition(TCard) Methode) und aus dem Stapel dann eine Karte zu ziehen, die aus dem UrsprungsStapel entfernen und dann den erstellten Stapel zu löschen. |
So würde ich es in JS machen und so habe ich es auch schon in Delphi gebaut, z.B. bei der Maperstellung für diverser Spiele die du ja kennst: Kandidaten in eine Liste schreiben, Liste mischen, die ersten n Elemente auswählen.
JS
1: 2: 3:
| var card = deck.match(new Request(color_spades,is_face_card)).shuffle().subset(1)[0]; deck.remove(card); card.showToUser() |
Wenn man das wirklich so massive ver-OOP-en will wird wohl nicht viel anderes übrig bleiben. Man kann das vermutlich noch so optimieren, dass man in Delphi kein echtes Temporär-Deck baut, sondern eine Methode hat die eben dies Intern tut, á la TDeck.GetCard(Request:TRequest). Diese könnte dann Intern lediglich ein Array führen der Indizes, die die Kriterien erfüllen.
Pseudocode
1: 2: 3: 4: 5: 6: 7: 8:
| möglich = leeres Array für jede Karte wenn Karte erfüllt Kriterien dann möglich += Kartenindex wenn möglich enthält Elemente dann return Karten[wähle zufällig aus möglich] sonst return "keine karte gefunden" |
Moment. Das ist einfacher als der Originalvorschlag und damit genau das was du gefragt hast

"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."