| FlexGrid, TrueGrid |
| |
| Probleme: Picture können nicht geladen werden; |
| Private spielfeld() As Boolean, spielfeldAufbau As Variant | sowie: SelStartCol und SelStartRow gibt es nicht. |
| |
| Sub spielfeldBelegen() | |
| Dim spalte%, zeile%, konvoiGröße%, schiffNr%, s% |
| Dim vertikalAusrichtung As Boolean, konvoiOk As Boolean |
| ReDim spielfeld(10, 10) | |
| spielfeldAufbau = Array(6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1) | Anzahl und Größe der Konvois festlegen. |
| Randomize Timer | Zufallszahlengenerator initialisieren. |
| For schiffNr = 0 To UBound(spielfeldAufbau) | Alle Konvois zusammenbauen. |
| konvoiGröße = spielfeldAufbau(schiffNr) | Größe des Konvois bestimmen. |
| Do | Startfeld finden, das nicht belegt ist und Platz für Konvoi bietet. |
| konvoiOk = True | Am Anfang darf der Konvoi gesetzt werden. |
| spalte = Int(Rnd * 10) + 1 | Koordinaten für Startfeld ermitteln. |
| zeile = Int(Rnd * 10) + 1 | |
| If spielfeld(spalte, zeile) = True Then | Ist das Feld schon belegt? |
| konvoiOk = False | |
| Else | |
| vertikalAusrichtung = Rnd > 0.5 | Nein. Dann prüfen, ob Konvoi Platz hat. |
| If vertikalAusrichtung Then | |
| konvoiOk = (zeile + konvoiGröße) <= 10 | Ist genug Platz für den Konvoi? |
| If zeile + konvoiGröße < 10 Then | Ist das Nachbarfeld am Ende des Konvois belegt? |
| If spielfeld(zeile + konvoiGröße + 1, spalte) = True Then |
| konvoiOk = False | |
| End If | |
| End If | |
| If konvoiOk Then | Alle Bedingungen für das Setzen des Konvois erfüllt? |
| For s = 1 To konvoiGröße | Ja, dann prüfen ob alle Felder leer sind. |
| If spielfeld(zeile + s, spalte) = True Then | |
| konvoiOk = False | |
| Exit For | |
| End If | |
| Next s | |
| End If | |
| Else | |
| konvoiOk = (spalte + konvoiGröße) <= 10 | Konvoi soll in die Horizontale gehen. |
| If spalte + konvoiGröße < 10 Then | Ist das Nachbarfeld am Ende des Konvois belegt? |
| If spielfeld(zeile, spalte + konvoiGröße + 1) = True Then |
| konvoiOk = False | |
| End If | |
| End If | |
| If konvoiOk Then | Sind alle Bedingungen für das Setzen des Konvois erfüllt? |
| For s = 1 To konvoiGröße | |
| If spielfeld(zeile, spalte + s) = True Then | |
| konvoiOk = False | |
| Exit For | |
| End If | |
| Next s | |
| End If | |
| End If | |
| End If | |
| Loop While konvoiOk = False | |
| For s = 0 To konvoiGröße - 1 | Konvoi hat genug Platz. Schiffe setzen. |
| If vertikalAusrichtung Then | Konvoi wird in vertikaler Richtung aufgebaut. |
| zeile = zeile + 1 | |
| Else | |
| spalte = spalte + 1 | |
| End If | |
| spielfeld(zeile, spalte) = True | |
| grdSpielfeld.Row = zeile | |
| grdSpielfeld.Col = spalte | |
' grdSpielfeld.Picture = _ imgSpielstein(konvoiGröße).Picture | Grid funktioniert nicht. (Das für den Konvoityp typische Bild auswählen.) |
| Next s | |
| Next schiffNr | |
| End Sub | |
| |
| Private Sub Form_Load() | |
| Dim n%, m%, spalte%, zeile%, anzahlSchiffe% | |
| grdSpielfeld.Rows = 11 | Als erstes das Spielfeld aufbauen. |
| grdSpielfeld.Cols = 11 | |
| grdSpielfeld.Row = 0 | |
| grdSpielfeld.ColWidth(0) = 400 | |
| For n = 1 To 10 | |
| grdSpielfeld.Col = n | |
| grdSpielfeld.Text = Chr(n + 64) | |
| Next n | |
| grdSpielfeld.Col = 0 | |
| For n = 1 To 10 | |
| grdSpielfeld.Row = n | |
| grdSpielfeld.Text = n | |
| Next n | |
| For n = 1 To grdSpielfeld.Rows - 1 | |
| grdSpielfeld.ColWidth(n) = 800 | |
| grdSpielfeld.ColAlignment(n) = vbCenter | |
| grdSpielfeld.RowHeight(n) = 800 | |
| Next n | |
| grdSpielfeld.Width = grdSpielfeld.ColWidth(1) * (grdSpielfeld.Cols) |
| grdSpielfeld.Height = grdSpielfeld.RowHeight(1) * (grdSpielfeld.Rows) |
| Me.Width = grdSpielfeld.Width * 1.05 | |
| Me.Height = grdSpielfeld.Height * 1.1 | |
| spielfeldBelegen | |
| For zeile = 1 To 10 | |
| For spalte = 1 To 10 | |
| If spielfeld(zeile, spalte) = True Then anzahlSchiffe = anzahlSchiffe + 1 |
| Next spalte | |
| Next zeile | |
| Me.Caption = Me.Caption & " - Anzahl der Schiffe: " & anzahlSchiffe |
| End Sub | |
| |
| Private Sub grdSpielfeld_Click() | |
| Dim treffer, pluralWort1$, pluralWort2$, n%, m% | |
| treffer = 0 | Initialisierung notwendig, da Variant. |
| 'If grdSpielfeld.SelStartCol <> grdSpielfeld.SelEndCol Or grdSpielfeld.SelStartRow <> grdSpielfeld.SelEndRow Then | Grid funktioniert nicht. |
| ' For n = grdSpielfeld.SelStartRow To grdSpielfeld.SelEndRow | Grid funktioniert nicht. |
| ' For m = grdSpielfeld.SelStartCol To grdSpielfeld.SelEndCol | Grid funktioniert nicht. |
| If spielfeld(n, m) = True Then | |
| treffer = treffer + 1 | |
| End If | |
| ' Next m | Grid funktioniert nicht. |
| ' Next n | Grid funktioniert nicht. |
| pluralWort1 = IIf(treffer = 1, "befindet", "befinden") | |
| pluralWort2 = IIf(treffer = 1, " Schiff", " Schiffe") | |
| MsgBox "In dem Bereich " & pluralWort1 & " sich " & treffer & pluralWort2, 48, "Statusbericht" |
| Exit Sub | |
| 'End If | Grid funktioniert nicht. |
| If spielfeld(grdSpielfeld.Row, grdSpielfeld.Col) = True Then |
| treffer = "ein" | |
| Else | |
| treffer = "kein" | |
| End If | |
| MsgBox "Auf " & Chr(grdSpielfeld.Col + 64) & grdSpielfeld.Row & " ist " & treffer & " Schiff", 48, "Erfolgsmeldung" |
| End Sub | |
| |
| Private Sub mnuNeuesSpielfeld_Click() | |
| Dim zeile%, spalte% | |
| For zeile = 1 To 10 | |
| grdSpielfeld.Row = zeile | |
| For spalte = 1 To 10 | |
| grdSpielfeld.Col = spalte | |
| ' grdSpielfeld.Picture = LoadPicture() | Grid funktioniert nicht. |
| Next spalte | |
| Next zeile | |
| spielfeldBelegen |
| End Sub |
|
|
|
|
|
|
|
|
| . |
| |