Hallo bin frisch in der VBA programmierung und muss für die Fachhochschule paar Sachen ausarbeiten, darunter ein Labyrinth, welches sich von selbst aufbaut.
Startpunkt sollte irgendwo links oben am Spielfeldrand liegen und das Labyrinth sich zum unteren rechten Rand hin aufbauen (Endpunkt muss nicht in der Spielfeldecke liegen). Ich glaube ich programmiere das ganze viel zu kompliziert...und noch dazu baut sich das Spielfeld über den eigentlichen Rahmen hinaus weiterhin auf...
Die Grundidee ist, dass per Zufall entschieden wird, ob der Weg horizontal oder vertikal gebaut wird. Im nächsten Schritt wird entschieden wie viele "Bausteien" gesetzt werden sollen. Da das Spielfeld am rechten Rand enden soll habe ich im Fall "horizontaler Weg" noch die Bedingung hinzugefügt, dass wenn die x koordinate 10 erreicht ist (diese stellt den Spielfeldrand dar), die Schleife verlassen werden soll und zum Sub "Ende" übergegangen werden soll. Leider wird oft der Spielaufbau nach der Meldung "Ende" weiterhin fortgesetzt...Ich bitte dringend um Hilfe!!!
hier die programmierung:
Dim i As Integer
Dim j As Integer
Dim X As Integer, Y As Integer, r As Integer
Dim k As Integer, rechtslinks As Integer, hochrunter As Integer
Dim richtung As Integer, t As Integer, abbruch As Integer
Private Sub cmdstart_Click()
For i = 1 To 10 'roter Spielfeldrahmen
Worksheets("Tabelle2").Cells(i, 1).Interior.ColorIndex = 3
Worksheets("Tabelle2").Cells(1, i).Interior.ColorIndex = 3
Worksheets("Tabelle2").Cells(10, i).Interior.ColorIndex = 3
Worksheets("Tabelle2").Cells(i, 10).Interior.ColorIndex = 3
Next i
k = 2 'Startwerk x-Achse
X = 2 'Startwert y-Achse
abbruch = 0 'abbruch rücksetzen bei mehrmaliger ausführung des programmes
Call Weg
End Sub
Sub Weg() 'vertikal oder horizontal
Randomize
richtung = Int(Rnd * 2 + 1) '50/50 Chance
If richtung = 1 Then
Call horizontal
Else
Call vertikal
End If
End Sub
Sub vertikal()
Randomize
t = Int(Rnd * 2 + 1) 'Schrittweite max 2 Felder
For hochrunter = X To X + t 'x=aktuelle y-Koordinate;t=zufällige Schrittweite
If Not Worksheets("Tabelle2").Cells(hochrunter, k).Interior.ColorIndex = 3 Then 'Wenn Spielrand nicht erreicht ist(rot ist)
Worksheets("Tabelle2").Cells(hochrunter, k).Interior.ColorIndex = 4 'färbe aktuelles Feld grün
Else
Call horizontal
End If
Next hochrunter
X = X + t 'neue y-koordinate speichern
Call Weg
End Sub
Sub horizontal()
Randomize
r = Int(Rnd * 2 + 1) 'Schrittweite max 2 Felder
For rechtslinks = k To k + r 'k=aktuelle x-Koordinate; r=zufällige Schrittweite
If rechtslinks = 10 Then 'wenn rechter Spielrand (x=10) erreicht ist,setze abbruch=1
abbruch = 1
Exit For 'Schleife verlassen
Else
Worksheets("Tabelle2").Cells(X, rechtslinks).Interior.ColorIndex = 4
End If
Next rechtslinks
k = k + r 'neue x-Koordinate speichern
If abbruch = 1 Then
Call Ende
Else
Call Weg
End If
' keine lösung...
' r = Int(Rnd * 2 + 1)
' For rechtslinks = k To k + r
' Debug.Print rechtslinks & "reli"
' If Not Worksheets("Tabelle2").Cells(x, rechtslinks).Interior.ColorIndex = 3 Then
' Worksheets("Tabelle2").Cells(x, rechtslinks).Interior.ColorIndex = 4
' Else
' abbruch = 1
' Exit For
' End If
' Next rechtslinks
' k = k + r
' If abbruch = 1 Then
' Call Ende
' Else
'
' Call Weg
' End If
End Sub
Sub Ende()
MsgBox "Ende" 'Wird dieses Sub aufgerufen sollte ende sein...
End Sub
Schon mal danke im voraus!!!
|