So hier habe ich mal vorsichtshalber einen ganzen Thread aufgemacht.
Bei meinem Projekt handelt es sich um einen, eher spartanisch gehaltenen, Sokoban-Klon.
Ich lerne Visual Basic nun seit ca 5 Monaten(in der Schule), daher würde ich mir bitte schlagfertige Äußerungen über meinen Programmierstil verbieten.
Das einzige was noch fehlt, ist das festlegen der nicht überquerbaren Flächen (das bekomme ich noch nicht so richtig hin :/)
Hier einmal den Code:
Form1.vb
level.vb
Ich würde mich seeeeeeeeeeehr über Verbesserungsvorschläge und allgemeine Unterstützung freuen, da es sich dabei um ein Schulprojekt handelt, welches für mich entscheidend für di Versetzung ist, da die gesamte Info-Note aus diesem Projekt hervorgeht.
Hocherfreut,
hammerdollen
Bei meinem Projekt handelt es sich um einen, eher spartanisch gehaltenen, Sokoban-Klon.
Ich lerne Visual Basic nun seit ca 5 Monaten(in der Schule), daher würde ich mir bitte schlagfertige Äußerungen über meinen Programmierstil verbieten.
Das einzige was noch fehlt, ist das festlegen der nicht überquerbaren Flächen (das bekomme ich noch nicht so richtig hin :/)
Hier einmal den Code:
Form1.vb
Quellcode
- Public Class Form1
- Private Field As level
- Public robo As New PictureBox
- Public kiste As New PictureBox
- Public position As String
- Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Field = New level("C:\Users\Marvin\Documents\Visual Studio 2010\Projects\Infoprojekt\Infoprojekt\level\1.txt")
- With robo
- .Parent = Me
- .Tag = "roboter"
- .Name = "roboter"
- .Height = 75
- .Width = 75
- .Location = New Point(75, 75)
- .Enabled = True
- .BackgroundImage = My.Resources.Boden
- .Image = My.Resources.Roboter
- End With
- With kiste
- .Parent = Me
- .Tag = "kiste"
- .Name = "kiste"
- .Height = 75
- .Width = 75
- .Location = New Point(225, 225)
- .Enabled = True
- .BackgroundImage = My.Resources.Boden
- .Image = My.Resources.Kiste
- End With
- 'start
- For x As Integer = 0 To Field.Size.Width - 1
- For y As Integer = 0 To Field.Size.Height - 1
- Dim bausteine As New PictureBox
- With bausteine
- .Parent = Me
- .Tag = New Point(x, y)
- .Height = 75
- .Width = 75
- .Left = 75 * x
- .Top = 75 * y
- .SizeMode = PictureBoxSizeMode.StretchImage ' damit das Bild bei jeder Größe passt
- If Field.Field(x, y) = 0 Then
- bausteine.Image = My.Resources.Boden
- bausteine.Name = "boden"
- ElseIf Field.Field(x, y) = 1 Then
- .Image = My.Resources.Mauer
- bausteine.Name = "mauer"
- ElseIf Field.Field(x, y) = 2 Then
- bausteine.Image = My.Resources.Ziel
- bausteine.Name = "ziel"
- End If
- End With
- Next
- Next
- 'end
- End Sub
- Public Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
- Select Case e.KeyValue
- Case 37, 65
- robo.Left -= 75
- Case 38, 87
- robo.Top -= 75
- Case 39, 68
- robo.Left += 75
- Case 40, 83
- robo.Top += 75
- End Select
- If kiste.Location.X = robo.Location.X + 75 And kiste.Location.Y = robo.Location.Y Then
- position = "links"
- 'MsgBox(position)
- End If
- 'Rechts
- If kiste.Location.X = robo.Location.X - 75 And kiste.Location.Y = robo.Location.Y Then
- position = "rechts"
- 'MsgBox(position)
- End If
- 'Unten
- If kiste.Location.X = robo.Location.X And kiste.Location.Y = robo.Location.Y - 75 Then
- position = "unten"
- 'MsgBox(position)
- End If
- 'Oben
- If kiste.Location.X = robo.Location.X And kiste.Location.Y = robo.Location.Y + 75 Then
- position = "oben"
- 'MsgBox(position)
- End If
- If robo.Location.X = kiste.Location.X And robo.Location.Y = kiste.Location.Y Then
- Call schieben()
- End If
- End Sub
- Private Function schieben()
- With kiste
- Select Case position
- Case "rechts"
- kiste.Left = kiste.Left - 75
- Case "links"
- kiste.Left = kiste.Left + 75
- Case "oben"
- kiste.Top = kiste.Top + 75
- Case "unten"
- kiste.Top = kiste.Top - 75
- End Select
- End With
- schieben = 1
- End Function
- End Class
level.vb
Quellcode
- Public Class level
- Private f(,) As Integer ' das Feld bestehend aus Indices
- Private usef(,) As Integer
- Private s As Size ' Feldgröße
- Private orig_hero As Point
- Public Sub New(ByVal file As String)
- 'auslesen
- Dim abc As New List(Of String)
- abc.AddRange(IO.File.ReadAllText(file).Split(CChar(" ")))
- Dim width, height As Integer
- width = abc(0).Length
- height = abc.Count
- Dim k(width, height) As Integer
- s = New Size(width, height)
- 'auswerten
- For x As Integer = 0 To width - 1
- For y As Integer = 0 To height - 1
- k(x, y) = CInt(CStr(abc(y)(x)))
- Next
- Next
- f = k
- usef = f
- End Sub
- Public ReadOnly Property Size() As Size
- Get
- Return s
- End Get
- End Property
- Public ReadOnly Property OriginalField() As Integer(,)
- Get
- Return f
- End Get
- End Property
- Public Property Field() As Integer(,)
- Get
- Return usef
- End Get
- Set(ByVal value As Integer(,))
- usef = value
- End Set
- End Property
- End Class
Ich würde mich seeeeeeeeeeehr über Verbesserungsvorschläge und allgemeine Unterstützung freuen, da es sich dabei um ein Schulprojekt handelt, welches für mich entscheidend für di Versetzung ist, da die gesamte Info-Note aus diesem Projekt hervorgeht.
Hocherfreut,
hammerdollen