Von |
Bertha |
Am |
08. Oktober 2008 um 20:33:43 |
Antwort |
Hallo YardBird,
um die Sache zu vereinfachen könnte man zuerst alle doppelten Karten aus dem Array eliminieren und die Anzahl der verbleibenden relevanten Karten ermitteln. (Zwei Zehnen, zwei Könige tragen nichts zur "Straightbildung" bei … )
Dann muss man nur noch die auf einander folgenden Vierer- und Fünfer-Kombinationen untersuchen, und hier interessiert dann auch nur noch die Differenz der ersten zu der letzten Karte (was einer doppelter Gutshot ist weiß ich allerdings nicht, den habe ich erst einmal nicht in Betracht gezogen):
ViererKombi/Differenz 3 => OESD
ViererKombi/Differenz 4 => Gutshot
FünferKombi/Differenz 4 => Straight
FünferKombi/Differenz 5 => Gutshot
FünferKombi/Differenz 6 => vielleicht der doppelte Gutshot
Wie man die Kombinationen dann erstellt, ist sicherlich Geschmackssache, ich habe dazu eine sich wiederkehrend aufrufende Prozedur eingesetzt. Außerdem habe ich die Resultate nicht bewertet und mit weiterführenden Aktionen versehen, sondern nur gezählt. Dim PlayingCards() As Integer 'Array mit den verbleibenden relevanten Karten Dim OESDCnt As Integer 'Anzahl der OESD Dim GSCnt As Integer 'Anzahl der Gutshots Dim StraightCnt As Integer 'Anzahl der Straights Dim NumOfRelCards As Integer 'Anzahl der Relevanten Karten Private Sub StartStraightCheck() CheckPlayCards(NumOfRelCards, 0, NumOfRelCards - 1, 0) 'Falls CheckPlayCards(NumOfRelCards - 1) = Wert für Ass 'dann CheckPlayCards(NumOfRelCards - 1) = Kleiner Wert für Ass 'Neu sortieren 'CheckPlayCards(NumOfRelCards, 0, NumOfRelCards - 1) noch einmal aufrufen End Sub Private Sub CheckPlayCards(ByVal NumofCards As Integer, ByVal StartCard As Integer, ByVal EndCard As Integer _ , ByVal AufrufausBlock As Integer) Dim i As Integer Select Case NumofCards Case 4 Select Case PlayingCards(EndCard) - PlayingCards(StartCard) Case 3 OESDCnt = OESDCnt + 1 Case 4 GSCnt = GSCnt + 1 End Select Case 5 Select Case PlayingCards(EndCard) - PlayingCards(StartCard) Case 4 StraightCnt = StraightCnt + 1 Case 5 ' GSCnt = GSCnt + 1 'Ist zwar ein Gutshot, wird aber später noch im 'Select Case NumofCards >> Case 4 Block identifiziert Case 6 'Schlägt hier vielleicht der Doppelte Gutshot auf ??? End Select For i = AufrufausBlock To 1 CheckPlayCards(4, StartCard + i, EndCard + i - 1, i) Next Case 6 For i = AufrufausBlock To 1 CheckPlayCards(5, StartCard + i, EndCard + i - 1, i) Next Case 7 For i = AufrufausBlock To 1 CheckPlayCards(6, StartCard + i, EndCard + i - 1, i) Next End Select End Sub Gruß Bertha |
|