4 gewinnt!

so mein 2. anliegen betrifft ein spielchen, dass wir alle gut kennen, nämlich 4 gewinnt. ich würde gerne mit einer funktion, die ein 2-dimensionales array übergeben bekommt (8 zeilen, 10 spalten) bestimmen ob es einen sieger gibt oder nicht, also er soll nur true oder false ausgeben. und zwar wenn spieler 1 einen stein hineinwirft wird an dieser stelle 1 eingetragen, bei spieler 2 wird 2 eingetragen. wenn ein feld leer ist steht 0 drin. es muss allerdings von unten befüllt werden und kein stein sollte in der luft hängen. habt ihr vielleicht eine idee???

lg Manuel

Hi Manuel,

die waagerechten und senkrechten Möglichkeiten sind einfach, oder?
Schwieriger wird es bei den Diagonalen, das wird reichlich Rechnerei und sieht am Ende komplizierter aus, als man sich vorher vorstellt.

Langsamer umständlicher und nicht sehr sparsam, dafür aber sehr übersichtlich wird es vermutlich, wenn Du die Zeilen, Spalten, Diagonalen jeweils in einen String einträgst und dann mit Instr(Zeile,„1111“) … suchst. Die Prozedur ist dann immer noch so schnell, daß der Spieler den Unterschied nicht bemerkt.

Gruß, Rainer

leider ist mir dabei gar nichts klar. kannst du mir vielleicht beim ausprogrammieren helfen, weil irgendwie finde ich keinen ansatz. dankeschön

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

den Teil, der die waagerechten und senkrechten testet habe ich Dir mal getippt, das Speil dazu und die Diagonalen musst Du selbst machen.

Ich würde die Prüfung aber so umbauen, daß zurückgegeben wird, wer gewonnen hat. :smile: Mit einer weiteren Funktion lässt sich der Code auch noch kürzen, aber ich will Dir ja auch noch etwas übrig lassen.

Option Explicit

Dim Feld(1 To 10, 1 To 8) As Byte

Private Sub Command1\_Click()
 If Pruefung = True Then
 MsgBox "Ein Spieler hat gewonnen"
 Else
 MsgBox "Noch hat Niemand gewonnen"
 End If
End Sub

Private Function Pruefung() As Boolean
 Dim r As Integer
 Dim c As Integer
 Dim Zeile As String
 For c = 1 To 10
 Zeile = ""
 For r = 1 To 8
 Zeile = Zeile + CStr(Feld(c, r))
 Next
 If InStr(Zeile, "1111") Then
 Pruefung = True
 End If
 If InStr(Zeile, "2222") Then
 Pruefung = True
 End If
 Next
 For r = 1 To 8
 Zeile = ""
 For c = 1 To 10
 Zeile = Zeile + CStr(Feld(c, r))
 Next
 If InStr(Zeile, "1111") Then
 Pruefung = True
 End If
 If InStr(Zeile, "2222") Then
 Pruefung = True
 End If
 Next
End Function

Private Sub Form\_Load()
 Dim c As Integer
 Dim r As Integer
 For c = 1 To 10
 For r = 1 To 8
 Feld(c, r) = 0
 Next
 Next
End Sub

Gruß, Rainer