hallo,
hier mal ein "Grungerüst" für ein Irrgartenspiel.
Probleme die auftreten können:
1. ein bewegen über den Form-Rand hinweg hab ich nicht abgefangen
2. wenn die Spielfigur größer als die schmale Seite einer Wand ist, kann eine Kollission unter umständen nicht erkannt werden.
evtl. mehr Punkte in der Funktion Chrashed abfragen
Kommentare erwünscht.
Gruss
mikeb69
hier mal ein "Grungerüst" für ein Irrgartenspiel.
Probleme die auftreten können:
1. ein bewegen über den Form-Rand hinweg hab ich nicht abgefangen
2. wenn die Spielfigur größer als die schmale Seite einer Wand ist, kann eine Kollission unter umständen nicht erkannt werden.
evtl. mehr Punkte in der Funktion Chrashed abfragen
VB.NET-Quellcode
- Public Class Form1
- 'bild des Spielers
- Private player As Bitmap
- 'position des Spielers
- Private player_location As New Point(50, 50)
- 'Array aller Mauern als Rectangle
- Private border() As RectangleF = {New RectangleF(120, 40, 10, 180), New RectangleF(40, 150, 200, 10)}
- Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
- Dim lastpos As Point = player_location
- Select Case e.KeyCode
- Case Keys.Down
- player_location = New Point(player_location.X, player_location.Y + 5)
- Case Keys.Up
- player_location = New Point(player_location.X, player_location.Y - 5)
- Case Keys.Left
- player_location = New Point(player_location.X - 5, player_location.Y)
- Case Keys.Right
- player_location = New Point(player_location.X + 5, player_location.Y)
- End Select
- If Chrashed(New Rectangle(player_location, player.Size)) = True Then
- Me.PictureBox1.BackColor = Color.Red
- player_location = lastpos
- Else
- Me.PictureBox1.BackColor = Me.BackColor
- End If
- Me.PictureBox1.Refresh()
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- player = New Bitmap(Image.FromFile("character.png"))
- Me.KeyPreview = True
- Me.Size = New Size(300, 300)
- Me.PictureBox1.Dock = DockStyle.Fill
- End Sub
- ''' <summary>Zeichnet das Spielfeld und Spielfigur an der aktuellen Position.</summary>
- ''' <remarks></remarks>
- Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
- Dim b As New Bitmap(Me.PictureBox1.Size.Width, Me.PictureBox1.Size.Height)
- Using g As Graphics = Graphics.FromImage(b)
- g.DrawImage(player, player_location)
- For i As Integer = 0 To border.Count
- g.FillRectangles(Brushes.Black, border)
- Next
- End Using
- Me.PictureBox1.Image = b
- End Sub
- ''' <summary>Prüft, ob der Spieler mit einer Mauer kollidiert.</summary>
- ''' <param name="player">Position und Größe des Spielers.</param>
- ''' <returns>True wenn Kollission - sonst False.</returns>
- ''' <remarks></remarks>
- Private Function Chrashed(ByVal player As Rectangle) As Boolean
- For i As Integer = 0 To border.Length - 1
- Dim r As RectangleF = border(i)
- If r.Contains(player.Left, player.Top) Or _
- r.Contains(player.Left, player.Bottom) Or _
- r.Contains(player.Right, player.Top) Or _
- r.Contains(player.Right, player.Bottom) Then
- Return True
- End If
- Next
- Return False
- End Function
- End Class
Kommentare erwünscht.
Gruss
mikeb69