tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
634
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    NichtsNutzHoch2 NichtsNutzHoch2 ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    4
    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.
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Verschoben ins VB-Forum hat im C/C++ Forum nix zu suchen
    Falls es sich hier um VB.NET handelt bitte melden!
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    NichtsNutzHoch2 NichtsNutzHoch2 ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    4
    Das ist das Visual Basic aus dem Visual Studio 2010, denk mal schon das das VB.Net ist.
     

  4. #4
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Ich hab hier ein Tic-Tac-Toe mal als VBA-Makro gemacht, vielleicht kannst du dir da was abschauen.


    Der Doc!
    Angehängte Dateien Angehängte Dateien
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  5. #5
    NichtsNutzHoch2 NichtsNutzHoch2 ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    4
    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.
     

  6. #6
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    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!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  7. #7
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    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).
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    ...und ins .NET -Forum verschoben. VB.NET hat nicht wirklich was mit VB6 zu tun.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  9. #9
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Ich hab auf Excel-Basis ein kleines Makro geschrieben (Excel, weil da die Eingabe der Zellendaten am einfachsten war):
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    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!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  10. #10
    NichtsNutzHoch2 NichtsNutzHoch2 ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    4
    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.
    Geändert von NichtsNutzHoch2 (28.04.11 um 21:30 Uhr) Grund: Noch eine Frage hinzugefügt.
     

  11. #11
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Beschreib es in PHP, vielleicht lässt es sich ja von uns in VB wandeln.

    Betr der Frage, du kannst deine gespeicherte Adresse "x,y" ja über Stringfunktionen aufteilen und kriegst so dein x und dein y retour. Damit lässt sich das Array dann ja problemlos abfragen.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

Ähnliche Themen

  1. Visual Basic 2010 exe einbetten
    Von Deanga133 im Forum .NET Café
    Antworten: 1
    Letzter Beitrag: 16.11.10, 22:07
  2. Visual Basic 2010 exe einbetten
    Von Deanga133 im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 15.11.10, 20:21
  3. Visual Basic 2010 Express - Rückwärtssuche
    Von VB2010_ExpressUser im Forum .NET Windows Forms
    Antworten: 6
    Letzter Beitrag: 14.11.10, 13:20
  4. Webservice: Visual Studio 2008 vs Visual Studio 2010 Express for Windwos Phone
    Von Johannes7146 im Forum .NET Web und Kommunikation
    Antworten: 4
    Letzter Beitrag: 27.09.10, 23:06