Simpler Snake Klon

    • VB.NET

      Simpler Snake Klon

      Hier der Code für ein sehr simples snake mit hilfe des GDI

      alles was auf der Form benötigt wird is ne Picturebox mit dem Namen pbField
      € Die zwei timer nicht vergessen.

      VB.NET-Quellcode

      1. Public Class frmSnake
      2. 'Aufzählungstyp für die Richtungen in die die Schlange laufen kann
      3. Private Enum eDirection
      4. Left
      5. Right
      6. Up
      7. Down
      8. End Enum
      9. '20x20 Spielfeld
      10. Private Const FieldWidth As Integer = 20 'Breite des Feldes
      11. Private Const FieldHeight As Integer = 20 'Höhe des Feldes
      12. 'Größe eines Blocks (10x10)
      13. Private Const RectWidth As Integer = 10
      14. Private Const RectHeight As Integer = 10
      15. Private Field(FieldWidth, FieldHeight) As Integer 'Karte als Array
      16. Private CurrentDirection As eDirection = eDirection.Left 'Richtung der Schlange
      17. Private CurrentSnakeLength As Integer = 3 'Länge der Schlange
      18. Private CurrentSnakePos As New Point(10, 10) 'Position des Schlangenkopfes
      19. Private Updating As Boolean = False
      20. 'leeres Spielfeld erstellen
      21. Private Sub ResetField()
      22. For x As Integer = 0 To FieldWidth
      23. For y As Integer = 0 To FieldHeight
      24. Field(x, y) = 0
      25. Next y
      26. Next x
      27. End Sub
      28. 'Neues Essen an einer zufälligen Position auftauchen lassen
      29. Private Sub SetRndFood()
      30. 'Eine Liste mit möglichen Spawn-punkten für essen erstellen
      31. Dim PossibleFoodPositions As New List(Of Point)
      32. For x As Integer = 0 To FieldWidth - 1
      33. For y As Integer = 0 To FieldHeight - 1
      34. If Field(x, y) = 0 Then
      35. PossibleFoodPositions.Add(New Point(x, y))
      36. End If
      37. Next y
      38. Next x
      39. 'Eine zufällige position aus der Liste der punkte für den spawn wählen
      40. If PossibleFoodPositions.Count > 0 Then
      41. Dim r As New Random
      42. Dim Pos As Integer = r.Next(0, PossibleFoodPositions.Count - 1)
      43. Field(PossibleFoodPositions(Pos).X, PossibleFoodPositions(Pos).Y) = -1
      44. End If
      45. End Sub
      46. Private Sub frmSnake_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      47. pbField.Left = 0
      48. pbField.Top = 0
      49. pbField.Width = 1 + FieldWidth * RectWidth
      50. pbField.Height = 1 + FieldHeight * RectHeight
      51. Me.Width = pbField.Width + 8
      52. Me.Height = pbField.Height + 34
      53. SetRndFood()
      54. Randomize()
      55. End Sub
      56. 'Bild erneuern
      57. Private Sub tmrRenderScene_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrRenderScene.Tick
      58. pbField.Refresh()
      59. End Sub
      60. Private Sub pbField_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles pbField.Paint
      61. For x As Integer = 0 To FieldWidth
      62. For y As Integer = 0 To FieldHeight
      63. If Field(x, y) = -1 Then
      64. 'Essen wird blau dargestellt
      65. e.Graphics.FillRectangle(Brushes.Blue, New Rectangle(x * RectWidth, y * RectHeight, RectWidth, RectHeight))
      66. End If
      67. If Field(x, y) > 0 Then
      68. 'Schlange wird rot dargestellt
      69. e.Graphics.FillRectangle(Brushes.Red, New Rectangle(x * RectWidth, y * RectHeight, RectWidth, RectHeight))
      70. End If
      71. 'e.Graphics.DrawRectangle(Pens.Black, New Rectangle(x * RectWidth, y * RectHeight, RectWidth, RectHeight))
      72. Next y
      73. Next x
      74. End Sub
      75. Private Sub tmrUpdateSnake_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrUpdateSnake.Tick
      76. If Updating Then Return
      77. Updating = True
      78. 'Schlange in eine Bestimmte richtung laufen lassen
      79. '1. Richtung prüfen
      80. '2. Prüfen ob sich schlange im feld befindet
      81. Select Case CurrentDirection
      82. Case eDirection.Left
      83. If CurrentSnakePos.X - 1 >= 0 Then
      84. CurrentSnakePos.X -= 1
      85. End If
      86. Case eDirection.Right
      87. If CurrentSnakePos.X + 1 < FieldWidth Then
      88. CurrentSnakePos.X += 1
      89. End If
      90. Case eDirection.Up
      91. If CurrentSnakePos.Y - 1 >= 0 Then
      92. CurrentSnakePos.Y -= 1
      93. End If
      94. Case eDirection.Down
      95. If CurrentSnakePos.Y + 1 < FieldHeight Then
      96. CurrentSnakePos.Y += 1
      97. End If
      98. End Select
      99. 'Prüfen ob die schlange über futter gelaufen ist
      100. If Field(CurrentSnakePos.X, CurrentSnakePos.Y) = -1 Then
      101. CurrentSnakeLength += 1
      102. SetRndFood()
      103. 'Punkte ?
      104. ElseIf Field(CurrentSnakePos.X, CurrentSnakePos.Y) > 0 Then
      105. 'tot schlange ist mit sich selbs kollidiert
      106. End If
      107. 'Schlangenlänge korrigieren
      108. Field(CurrentSnakePos.X, CurrentSnakePos.Y) = CurrentSnakeLength + 1
      109. For x As Integer = 0 To FieldWidth
      110. For y As Integer = 0 To FieldHeight
      111. If Field(x, y) > 0 Then
      112. Field(x, y) -= 1
      113. End If
      114. Next y
      115. Next x
      116. Updating = False
      117. End Sub
      118. Private Sub frmSnake_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
      119. Select Case e.KeyCode
      120. Case Keys.Up
      121. CurrentDirection = eDirection.Up
      122. Case Keys.Down
      123. CurrentDirection = eDirection.Down
      124. Case Keys.Left
      125. CurrentDirection = eDirection.Left
      126. Case Keys.Right
      127. CurrentDirection = eDirection.Right
      128. End Select
      129. End Sub
      130. End Class

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „bsHobbit“ ()