Mittwoch, 9. September 2015

Spiele Programmierung mit Visual Basic VBA Excel Access Word


Spiele Programmierung mit Visual Basic VBA Excel Access Word

Author D.Selzer-McKenzie

Video: http://youtu.be/yP6k_4dquV8

Hier zeige ich Ihnen als kleines Beispiel eine Spiele-Programmierung, die mit Visual Basic genauso wie mit VBA Excel/Access gemacht werden kann. Dies nur als Anregung, wie einfach und mit wie wenige Code dies möglich ist.

Den SourceCode , der wegen der Sonderzeichen in die Videobeschreibung nicht eingeschrieben werden kann, können Sie kostenlos herunterladen im Forum


 

Hier der SourceCode:

Public Class Form1

    ' Index des aktuellen Panels

    Dim PX As Integer

 

    ' Gesamtes Spielfeld inkl. Randfelder

    Dim F(14, 9) As Integer

 

    ' Zeile und Spalte des aktuellen Panels

    Dim PZ As Integer

    Dim PS As Integer

 

    ' Schwierigkeitsstufe

    Dim Stufe As Integer

 

    ' Eine zunächst leere Liste von Spiel-Panels

    Dim PL As New ArrayList

 

    ' Ein Feld von Farben für die Panels

    Dim FarbenFeld() As Color = {Color.Red,

        Color.Yellow, Color.Green, Color.Blue,

        Color.Cyan, Color.Magenta, Color.Black,

        Color.White}

 

    ' Konstanten für Status eines Feldpunktes

    Const Leer = -1

    Const Rand = -2

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' Zufallsgenerator initialisieren

        Randomize()

        ' Feld besetzen

        For Z = 1 To 13

            F(Z, 0) = Rand

            For S = 1 To 8

                F(Z, S) = Leer

            Next S

            F(Z, 9) = Rand

        Next Z

        For S = 0 To 9

            F(14, S) = Rand

        Next S

        ' Initialisierung

        Stufe = 1

        NächstesPanel()

    End Sub

 

    Private Sub NächstesPanel()

        Dim Farbe As Integer

        Dim DasPanel As New Panel

 

        ' Neues Panel zur ArrayList hinzufügen

        PL.Add(DasPanel)

 

        ' Eventhandler für Event 'Click' zuweisen

        AddHandler DasPanel.Click,

            AddressOf PanelClickReaktion

 

        ' Neues Panel platzieren

        'DasPanel.Location = New Point(100, 80)

        'DasPanel.Size = New Size(20, 20)

 

        DasPanel.Location = New Point(150, 100)

        DasPanel.Size = New Size(40, 40)

 

 

        ' Farbauswahl für neues Panel

        Farbe = Math.Floor(Rnd() * 8)

        DasPanel.BackColor = FarbenFeld(Farbe)

 

        ' Neues Panel zum Formular hinzufügen

        Controls.Add(DasPanel)

 

        ' Index für späteren Zugriff ermitteln

        PX = PL.Count - 1

 

        ' Index als Info zu Panel hinzufügen

        DasPanel.Tag = PX

 

        ' Aktuelle Zeile, Spalte

        PZ = 1

        PS = 5

    End Sub

 

    Private Sub PanelClickReaktion(ByVal sender As System.Object, ByVal e As System.EventArgs)

        ' Verweis auf Panel

        Dim DasPanel As Panel

 

        ' Verweis auf geklicktes Panel gesetzt

        DasPanel = sender

 

        ' Eigenschaften des geklickten Panels ändern

        lblPNr.Text = "P " & DasPanel.Tag

        DasPanel.BorderStyle = BorderStyle.Fixed3D

    End Sub

 

    Private Sub SteuerelementTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SteuerelementTimer.Tick

        ' Falls es nicht mehr weiter geht

        If F(PZ + 1, PS) <> Leer Then

            ' Oberste Zeile erreicht

            If PZ = 1 Then

                SteuerelementTimer.Enabled = False

                MessageBox.Show("Das war's")

                Exit Sub

            End If

 

            F(PZ, PS) = PX       ' Belegen

            AllePrüfen()

            NächstesPanel()

 

        Else

            ' Falls es noch weiter geht

            PL(PX).Top = PL(PX).Top + 20

            PZ = PZ + 1

        End If

    End Sub

 

    Private Sub AllePrüfen()

        Dim Neben, Über As Boolean

        Neben = False

        Über = False

 

        ' Drei gleiche Panel nebeneinander ?

        For Z = 13 To 1 Step -1

            For S = 1 To 6

                Neben = NebenPrüfen(Z, S)

                If Neben Then Exit For

            Next S

            If Neben Then Exit For

        Next Z

 

        ' Drei gleiche Panel übereinander ?

        For Z = 13 To 3 Step -1

            For S = 1 To 8

                Über = ÜberPrüfen(Z, S)

                If Über Then Exit For

            Next S

            If Über Then Exit For

        Next Z

 

        If Neben Or Über Then

            ' Schneller

            Stufe = Stufe + 1

            SteuerelementTimer.Interval = 500 / (Stufe + 9)

 

            ' Eventuell kann jetzt noch eine Reihe

            ' entfernt werden

            AllePrüfen()

        End If

 

    End Sub

 

    ' Falls 3 Felder nebeneinander besetzt

    Private Function NebenPrüfen(ByVal Z As Integer, ByVal S As Integer) As Boolean

        Dim ZX, SX As Integer

        NebenPrüfen = False

 

        If F(Z, S) <> Leer And

                F(Z, S + 1) <> Leer And

                F(Z, S + 2) <> Leer Then

 

            ' Falls drei Farben gleich

            If PL(F(Z, S)).BackColor =

                    PL(F(Z, S + 1)).BackColor And

                    PL(F(Z, S)).BackColor =

                    PL(F(Z, S + 2)).BackColor Then

 

                For SX = S To S + 2

                    ' PL aus dem Formular löschen

                    Controls.Remove(PL(F(Z, SX)))

                    ' Feld leeren

                    F(Z, SX) = Leer

 

                    ' Panels oberhalb des entladenen

                    ' Panels absenken

                    ZX = Z - 1

                    Do While F(ZX, SX) <> Leer

                        PL(F(ZX, SX)).Top =

                            PL(F(ZX, SX)).Top + 20

 

                        ' Feld neu besetzen

                        F(ZX + 1, SX) = F(ZX, SX)

                        F(ZX, SX) = Leer

                        ZX = ZX - 1

                    Loop

 

                Next SX

                NebenPrüfen = True

            End If

        End If

    End Function

 

    ' Falls drei Felder übereinander besetzt

    Private Function ÜberPrüfen(ByVal Z As Integer,

            ByVal S As Integer) As Boolean

        Dim ZX As Integer

        ÜberPrüfen = False

 

        If F(Z, S) <> Leer And F(Z - 1, S) <> Leer And

                F(Z - 2, S) <> Leer Then

 

            ' Falls drei Farben gleich

            If PL(F(Z, S)).BackColor =

                    PL(F(Z - 1, S)).BackColor And

                    PL(F(Z, S)).BackColor =

                    PL(F(Z - 2, S)).BackColor Then

 

                ' 3 Panels entladen

                For ZX = Z To Z - 2 Step -1

                    ' PL aus dem Formular löschen

                    Controls.Remove(PL(F(ZX, S)))

                    ' Feld leeren

                    F(ZX, S) = Leer

                Next ZX

                ÜberPrüfen = True

            End If

        End If

    End Function

 

    Private Sub ButtonNachLinks_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNachLinks.Click

        If F(PZ, PS - 1) = Leer Then

            PL(PX).Left = PL(PX).Left - 30

            PS = PS - 1

        End If

    End Sub

 

    Private Sub ButtonNachRechts_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNachRechts.Click

        If F(PZ, PS + 1) = Leer Then

            PL(PX).Left = PL(PX).Left + 30

            PS = PS + 1

        End If

    End Sub

 

    Private Sub ButtonNachUnten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNachUnten.Click

        Do While F(PZ + 1, PS) = Leer

            PL(PX).Top = PL(PX).Top + 10

            PZ = PZ + 1

        Loop

        F(PZ, PS) = PX       'Belegen

        AllePrüfen()

        NächstesPanel()

    End Sub

 

    Private Sub ButtonPause_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPause.Click

        SteuerelementTimer.Enabled = Not SteuerelementTimer.Enabled

    End Sub

End Class

 




Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.