3 Gewinnt Spiel mit Visual Studio Basic 2010

NichtsNutzHoch2

Grünschnabel
Hallo,

ich hoffe hier kann mir jemand helfen. Ich bin dabei ein 3-Gewinnt spiel für meine Freundin mit Visual Basic zu programmieren und bräuchste ein wenig Hilfe dabei.

Das Spielfeld wird in einem zweidimensionalen Array(y und x-Achse) gespeichert. Nun scheitere ich am folgenden Problem. Wie werte ich aus, ob mindestens 3 mal der selbe Gegenstand sich berührt.

Beispiel:

123
455
552

Hier würden sich die vier 5en berühren.
Ich bekomme einfach keine Abfrage für mein Problem hin, womit ich dies feststellen kann.

Vielen Dank euch im Voraus!

Gruß,
NichtsNutzHoch2.
 
Ich hab hier ein Tic-Tac-Toe mal als VBA-Makro gemacht, vielleicht kannst du dir da was abschauen.


Der Doc!
 

Anhänge

  • Tic-Tac-Toe.doc
    37,5 KB · Aufrufe: 63
Ja, ansich ist das eine Einfache auswertung was du hast.

Aber mein richtiges Spielfeld ist 10x12 Einheiten groß. XD

Eine lineare Ausertung bekomme ich auch ohne probleme hin, nur die Verschachtelung über die Ebenen hinweg bereitet mir Probleme, sprich den den Pfad zu allen Objekten zu finden, wenn mehr als 3 miteinader verbunden sind.

Besseres Beispiel:

1 1 2 7 3
4 4 2 5 5
1 2 2 3 4

Hierbei müssten die vier zweien erkannt werden.
 
OK, ist doch eine etwas andere Ausgangslage, mit größeren Feldern ist das nicht ganz so einfach. Ich werd mal in mich gehen, vielleicht fällt mir was ein.


Der Doc!
 
Mir fallen nur sehr aufwendige Lösungen ein. Aber da das ja nur nach jedem setzen einmal geprüft wird, spielt Performance ja keine Rolle.

http://de.wikipedia.org/wiki/Backtracking

Neben Backtracking könntest du auch einfach über jedes Feld iterieren und alle 8 Nachbarn angucken (sofern diagonal erlaubt ist).
 
Ich hab auf Excel-Basis ein kleines Makro geschrieben (Excel, weil da die Eingabe der Zellendaten am einfachsten war):
Visual Basic:
Sub check()
    Dim iField(4, 4) As Integer '5x5 Raster
    Dim sField(4, 4) As String
    Dim iSearch As Integer, iCheck As Integer
    iSearch = 2 'Suche nach Zahl
    For cnt = 0 To 4
        For cns = 0 To 4
            iField(cnt, cns) = ActiveSheet.Cells(cnt + 1, cns + 1).Value 'Einlesen in Array, sind nur Vorbereitungsarbeiten
        Next cns
    Next cnt
    
    For cnt = 0 To 4
        For cns = 0 To 4
            iCheck = 0
            If iField(cnt, cns) = iSearch Then 'beinhaltet die Zelle die gesuchte Zahl
                If cnt > 0 Then If iField(cnt - 1, cns) = iSearch Then iCheck = iCheck + 1 'ist darüber die gleiche Zahl / überhaupt ein Feld
                If cnt < 4 Then If iField(cnt + 1, cns) = iSearch Then iCheck = iCheck + 1 'ist darunter die gleiche Zahl / überhaupt ein Feld
                If cns > 0 Then If iField(cnt, cns - 1) = iSearch Then iCheck = iCheck + 1 'ist links davon die gleiche Zahl / überhaupt ein Feld
                If cns < 4 Then If iField(cnt, cns + 1) = iSearch Then iCheck = iCheck + 1 'ist rechts davon die gleiche Zahl / überhaupt ein Feld
            End If
            sField(cnt, cns) = iCheck 'Array mit Anzahl der Nachbarn schreiben
            ActiveSheet.Cells(cnt + 1, cns + 1).Value = iCheck 'anzeigen
        Next cns
    Next cnt
End Sub
Hier wird ein 5x5-Raster auf eine bestimmte Zahl geprüft und die Anzahl der gleichen Nachbarn ermittelt (nur in gerader Linie). Wenn ein Feld keinen gleichen Nachbarn hat, kriegt es den Wert 0, ansonsten die Anzahl der gleichen Nachbarn. Du müsstest nur noch auf einen Wert von 2 prüfen (= 2 benachbarte Zellen mit dem gleichen Wert und die eigentliche Zelle -> 3 verbundene Zellen).

Wie gesagt, ist schwerstens experimentell und nur eine kleine Spielerei, vielleicht inspiriert es dich aber.


Der Doc!
 
Danke erstmal für den Vorschlag, eigentlich ganz OK, nur nicht wirklich für mein Problem zu gebrauchen.

Mittlerweile habe ich eine Logische lösung gefunden das Problem zu lösen, habe aber keine Idee wie ich das in VB umsetzen kann. In PHP oder Perl wärs kein Problem, aber mit VB...

Ich probiere es jetzt mal selbst erst einmal.

Aber eine kleine Logikfrage habe ich noch.

Mein Spielfeld ist aktuell in einem zweidimensionalen Array gespeichert( spielfeld(x,y)).
Ich möchte eine Positiv gespeicherte Adresse speicher()="x,y" in einen Array speichern und diese dann später so auslesen können, sodass ich über die gespeicherte Adresse direkt auf den Array zugreifen kann. spielfeld("x,y")

Funktioniert das?

Und wie kann ich überrpüfen, ob ein Wert bereits in einem Array existiert?
Finde dafür irgendwie keine Funktion über Google und co.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück