Hallo,
hier der Code meines - während dem Essen kochen entstandenen Game Sternenhimmel nach einer Idee von McCandy007.
Die Klasse
Die Form
Gruss
mikeb69
hier der Code meines - während dem Essen kochen entstandenen Game Sternenhimmel nach einer Idee von McCandy007.
Die Klasse
VB.NET-Quellcode
- Public Class ClassSternenhimmel
- Private _groesse As Size
- Private _anzahl As Integer
- Private _sterne As New List(Of Point)
- Private _fehlenderStern As Point
- Public Event Sterne(ByVal sender As Object, ByVal e As SterneEventArgs)
- ''' <summary>Neue Instanu der Klasse.</summary>
- ''' <param name="groesse">Größe der Darstellfläche (Beide Seiten zusammen)</param>
- ''' <param name="anzahl">Anzahl der Sterne, welche rzeugt werden sollen.</param>
- ''' <remarks></remarks>
- Public Sub New(ByVal groesse As Size, ByVal anzahl As Integer)
- _groesse = groesse
- _anzahl = anzahl
- End Sub
- ''' <summary>Erzeugen der Sterne anstossen.</summary>
- ''' <remarks></remarks>
- Public Sub SerneErzeugen()
- SterneErzeugen()
- End Sub
- ''' <summary>Alle Sterne erzeugen.</summary>
- ''' <remarks></remarks>
- Private Sub SterneErzeugen()
- Dim r As New Random()
- 'Sterne so erzeugen, dass kein Stern auf dem Anderen liegt.
- Do
- find_point_arg = New Point(r.Next(1, _groesse.Width / 2), r.Next(1, _groesse.Height))
- If _sterne.FindIndex(AddressOf find_point) = -1 Then
- _sterne.Add(find_point_arg)
- End If
- Loop While _sterne.Count < _anzahl
- 'Fehlenden Stern auswählen
- _fehlenderStern = _sterne(r.Next(1, _anzahl))
- 'Anzeigen, dass alle Sterne erzeugt wurden.
- RaiseEvent Sterne(Me, New SterneEventArgs())
- End Sub
- 'Suche - Collection
- Private find_point_arg As Point
- Private Function find_point(ByVal p As Point) As Boolean
- If p = find_point_arg Then
- Return True
- Else
- Return False
- End If
- End Function
- ''' <summary>Gibt alle Sterne zurück.</summary>
- ''' <value></value>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public ReadOnly Property GetSterne() As List(Of Point)
- Get
- Return _sterne
- End Get
- End Property
- ''' <summary>Gibt den fehlenden Stern zurück.</summary>
- ''' <value></value>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public ReadOnly Property GetFehlendenStern() As Point
- Get
- Return _fehlenderStern
- End Get
- End Property
- End Class
- Public Class SterneEventArgs
- Inherits EventArgs
- Public Sub New()
- End Sub
- End Class
Die Form
VB.NET-Quellcode
- Public Class Form1
- Private WithEvents _cs As ClassSternenhimmel
- Private Sub ButtonNeuerHimmel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNeuerHimmel.Click
- 'Prüfen ob die Eingabe der Anzahl der Sterne korrekt ist.
- If IsNumeric(Me.TextBoxAnzahlSterne.Text) = True AndAlso CInt(Me.TextBoxAnzahlSterne.Text) < 1001 Then
- 'Neue Instanz der Klasse
- _cs = New ClassSternenhimmel(Me.PictureBoxSternenhimmel.Size, Math.Abs(CInt(Me.TextBoxAnzahlSterne.Text)))
- 'Handler erzeugen
- AddHandler _cs.Sterne, AddressOf _cs_Sterne
- 'Sterne erzeugen
- _cs.SerneErzeugen()
- Else
- 'Zurücksetzen der Picturebox - bei falscher Eingabe
- Me.TextBoxAnzahlSterne.Text = "100"
- End If
- End Sub
- Private Sub _cs_Sterne(ByVal sender As Object, ByVal e As SterneEventArgs) ' Handles _cs.Sterne
- 'Sternenhimmel zeichnen
- Dim b As New Bitmap(Me.PictureBoxSternenhimmel.Width, Me.PictureBoxSternenhimmel.Height)
- Using g As Graphics = Graphics.FromImage(b)
- g.Clear(Color.Black)
- For Each p As Point In _cs.GetSterne
- 'Fehlenden Stern in der linken Hälfte nicht zeichnen
- If p <> _cs.GetFehlendenStern Then
- g.DrawRectangle(Pens.White, New Rectangle(p, New Size(1, 1)))
- End If
- 'Rechts alle Sterne zeichnen
- g.DrawRectangle(Pens.White, New Rectangle(Point.Add(p, New Size(Me.PictureBoxSternenhimmel.Width / 2, 0)), New Size(1, 1)))
- Next
- End Using
- Me.PictureBoxSternenhimmel.Image = b
- 'Trennlinie zeichnen
- drawline()
- End Sub
- Private Sub PictureBoxSternenhimmel_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBoxSternenhimmel.MouseDown
- 'Bereich in dem der Mausklick sein muss um einen Treffer zu erkennen.
- Dim testsize As New Size(20, 20)
- Dim r As New Rectangle(Point.Subtract(_cs.GetFehlendenStern, New Size(10, 10)), testsize)
- 'Fehlenden Stern und Markierung einzeichnen
- Dim b As Bitmap = Me.PictureBoxSternenhimmel.Image
- Using g As Graphics = Graphics.FromImage(b)
- g.FillRectangle(Brushes.White, New Rectangle(_cs.GetFehlendenStern, New Size(2, 2)))
- g.DrawEllipse(Pens.White, r)
- End Using
- Me.PictureBoxSternenhimmel.Image = b
- 'Messagebox ausgabe
- If r.Contains(e.Location) Then
- MessageBox.Show("Richtig")
- Else
- MessageBox.Show("Falsch")
- End If
- End Sub
- Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxHimmelTrennung.CheckedChanged
- drawline()
- End Sub
- Private Sub drawline()
- Dim p As Pen
- If Me.CheckBoxHimmelTrennung.Checked = True Then
- p = Pens.White
- Else
- p = Pens.Black
- End If
- Dim b As Bitmap = Me.PictureBoxSternenhimmel.Image
- Using g As Graphics = Graphics.FromImage(b)
- g.DrawLine(p, CInt(Me.PictureBoxSternenhimmel.Width / 2), 0, CInt(Me.PictureBoxSternenhimmel.Width / 2), Me.PictureBoxSternenhimmel.Height)
- End Using
- Me.PictureBoxSternenhimmel.Image = b
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'Leeres Image erzeugen um keine Ausnahme beim Linienzeichen zu erhalten
- Dim b As New Bitmap(Me.PictureBoxSternenhimmel.Width, Me.PictureBoxSternenhimmel.Height)
- Using g As Graphics = Graphics.FromImage(b)
- g.Clear(Color.Black)
- End Using
- Me.PictureBoxSternenhimmel.Image = b
- End Sub
- End Class
Gruss
mikeb69
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mikeb69“ ()