Hab ein kleines 4-Gewinnt Spiel gemacht mit Gdi+. (in VB.net)
Schicke euch den Source per Anfrage (PN).
Download
[Only registered and activated users can see links. Click Here To Register...]
Virustotal:
[Only registered and activated users can see links. Click Here To Register...]
Schicke euch den Source per Anfrage (PN).
Download
[Only registered and activated users can see links. Click Here To Register...]
Virustotal:
[Only registered and activated users can see links. Click Here To Register...]
Code:
Public Class Form1
Private gamePoints As New Point(50, 50)
Private WithEvents Spielfeld As New Spielfeld(gamePoints.X, gamePoints.Y) With {.Width = gamePoints.X * 12, .Height = gamePoints.Y * 12}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.DoubleBuffered = True
Me.SetStyle(ControlStyles.UserPaint, True)
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.Controls.Add(Spielfeld)
End Sub
Private Sub Spielfeld_MouseDown(sender As Object, e As MouseEventArgs) Handles Spielfeld.MouseDown
Label1.Text = String.Format("{0} ist an der Reihe", Spielfeld.nextPlayer.ToString)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Not MessageBox.Show("Möchtest du ein neues Spiel starten?", "Neustart", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
Exit Sub
End If
Spielfeld.restart()
Label1.Text = String.Format("{0} ist an der Reihe", Spielfeld.nextPlayer.ToString)
End Sub
End Class
Public Class Spielfeld
Inherits Control
Enum Playermove
Spieler1 = -1
Spieler2 = 0
End Enum
Private _nextPlayer As Playermove = Playermove.Spieler1
Public ReadOnly Property nextPlayer As Playermove
Get
Return _nextPlayer
End Get
End Property
Public Property _width As Integer
Public Property _height As Integer
Public Sub New(width As Integer, height As Integer)
Me._width = width
Me._height = height
End Sub
Private startBlocks As New List(Of Rectangle)
Private Sub DrawField(e As PaintEventArgs)
startBlocks.RemoveRange(0, startBlocks.Count)
With e.Graphics
For wid = 0 To _width * 6 Step _width
For hei = 0 To _height * 7 Step _height
startBlocks.Add(New Rectangle(wid, hei, _width, _height))
.FillEllipse(Brushes.WhiteSmoke, startBlocks(startBlocks.Count - 1))
Next
Next
End With
End Sub
Private playedBlocks As New List(Of Rectangle)
Private blackblockCoords As New List(Of Point)
Private redblockCoords As New List(Of Point)
Private animation As New Timer With {.Interval = 75}
Private moreBlock As Integer
Private newRec As Rectangle
Private firstBlock As Rectangle
Private Sub ClickDrawingField(e As MouseEventArgs)
If Not e.Button = MouseButtons.Left OrElse falling OrElse Not playedBlocks.Where(Function(item) item.Contains(e.Location)).Count = 0 Then
Return
End If
Dim clickedblocks = startBlocks.Where(Function(item) item.Contains(e.Location) AndAlso playedBlocks.Where(Function(items) items.IntersectsWith(item)).Count = 0)
If clickedblocks.Count = 0 Then
Return
End If
firstBlock = clickedblocks.First
moreBlock = _height * 7 - playedBlocks.Where(Function(item) item.Location.X = firstBlock.X).Count * _height
newRec = New Rectangle(firstBlock.X, firstBlock.Y, firstBlock.Width, firstBlock.Height)
falling = True
_nextPlayer = Not _nextPlayer
playedBlocks.Add(newRec)
AddHandler animation.Tick, AddressOf animation_Tick
animation.Start()
Me.Invalidate()
End Sub
Private Sub LookForWin()
If Not Math.IEEERemainder(playedBlocks.Count, 2) = 0 Then
blackblockCoords.Add(newRec.Location)
If blackblockCoords.Contains(New Point(newRec.X, newRec.Y + _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X, newRec.Y + (_height * 2))) AndAlso blackblockCoords.Contains(New Point(newRec.X, newRec.Y + (_height * 3))) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y)) AndAlso blackblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y)) AndAlso blackblockCoords.Contains(New Point(newRec.X + (_width * 3), newRec.Y)) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y)) AndAlso blackblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y)) AndAlso blackblockCoords.Contains(New Point(newRec.X - (_width * 3), newRec.Y)) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y)) AndAlso blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y)) AndAlso blackblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y)) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y)) AndAlso blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y)) AndAlso blackblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y)) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y - _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y - (_height * 2))) AndAlso blackblockCoords.Contains(New Point(newRec.X - (_width * 3), newRec.Y - (_height * 3))) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y - _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y - (_height * 2))) AndAlso blackblockCoords.Contains(New Point(newRec.X + (_width * 3), newRec.Y - (_height * 3))) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y + _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y + (_height * 2))) AndAlso blackblockCoords.Contains(New Point(newRec.X - (_width * 3), newRec.Y + (_height * 3))) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y + _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y + (_height * 2))) AndAlso blackblockCoords.Contains(New Point(newRec.X + (_width * 3), newRec.Y + (_height * 3))) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y + _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y - _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y - (_height * 2))) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y + _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y - _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y - (_height * 2))) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y + (_height * 2))) AndAlso blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y + _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y - _height)) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf blackblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y + (_height * 2))) AndAlso blackblockCoords.Contains(New Point(newRec.X + _width, newRec.Y + _height)) AndAlso blackblockCoords.Contains(New Point(newRec.X - _width, newRec.Y - _height)) Then
MessageBox.Show("Spieler 1 gewinnt")
ElseIf playedBlocks.Count = 8 * 7 Then
MessageBox.Show("Kein Gewinner!")
Else
Exit Sub
End If
Else
redblockCoords.Add(newRec.Location)
If redblockCoords.Contains(New Point(newRec.X, newRec.Y + _height)) AndAlso redblockCoords.Contains(New Point(newRec.X, newRec.Y + (_height * 2))) AndAlso redblockCoords.Contains(New Point(newRec.X, newRec.Y + (_height * 3))) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y)) AndAlso redblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y)) AndAlso redblockCoords.Contains(New Point(newRec.X + (_width * 3), newRec.Y)) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y)) AndAlso redblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y)) AndAlso redblockCoords.Contains(New Point(newRec.X - (_width * 3), newRec.Y)) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y)) AndAlso redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y)) AndAlso redblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y)) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y)) AndAlso redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y)) AndAlso redblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y)) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y - _height)) AndAlso redblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y - (_height * 2))) AndAlso redblockCoords.Contains(New Point(newRec.X - (_width * 3), newRec.Y - (_height * 3))) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y - _height)) AndAlso redblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y - (_height * 2))) AndAlso redblockCoords.Contains(New Point(newRec.X + (_width * 3), newRec.Y - (_height * 3))) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y + _height)) AndAlso redblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y + (_height * 2))) AndAlso redblockCoords.Contains(New Point(newRec.X - (_width * 3), newRec.Y + (_height * 3))) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y + _height)) AndAlso redblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y + (_height * 2))) AndAlso redblockCoords.Contains(New Point(newRec.X + (_width * 3), newRec.Y + (_height * 3))) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y + _height)) AndAlso redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y - _height)) AndAlso redblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y - (_height * 2))) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y + _height)) AndAlso redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y - _height)) AndAlso redblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y - (_height * 2))) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X - (_width * 2), newRec.Y + (_height * 2))) AndAlso redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y + _height)) AndAlso redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y - _height)) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf redblockCoords.Contains(New Point(newRec.X + (_width * 2), newRec.Y + (_height * 2))) AndAlso redblockCoords.Contains(New Point(newRec.X + _width, newRec.Y + _height)) AndAlso redblockCoords.Contains(New Point(newRec.X - _width, newRec.Y - _height)) Then
MessageBox.Show("Spieler 2 gewinnt")
ElseIf playedBlocks.Count = 8 * 7 Then
MessageBox.Show("Kein Gewinner!")
Else
Exit Sub
End If
End If
Me.restart()
End Sub
Private Sub DrawStones(e As PaintEventArgs)
With e.Graphics
For i = 0 To playedBlocks.Count - 1
If Math.IEEERemainder(i, 2) = 0 Then
.DrawEllipse(Pens.Black, playedBlocks(i))
.FillEllipse(Brushes.Black, playedBlocks(i))
Else
.FillEllipse(Brushes.Red, playedBlocks(i))
.DrawEllipse(Pens.Red, playedBlocks(i))
End If
Next
End With
End Sub
Private Sub Spielfeld_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
ClickDrawingField(e)
End Sub
Private Sub Spielfeld_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
Me.DoubleBuffered = True
DrawField(e)
DrawStones(e)
End Sub
Public Sub restart()
playedBlocks.RemoveRange(0, playedBlocks.Count)
redblockCoords.RemoveRange(0, redblockCoords.Count)
blackblockCoords.RemoveRange(0, blackblockCoords.Count)
_nextPlayer = Playermove.Spieler2
Me.Invalidate()
End Sub
Private falling As Boolean = False
Private Sub animation_Tick(sender As Object, e As EventArgs)
If newRec.Y = moreBlock Then
RemoveHandler animation.Tick, AddressOf animation_Tick
animation.Stop()
falling = False
LookForWin()
Return
End If
newRec.Y += _height
playedBlocks.Add(newRec)
playedBlocks.RemoveAt(playedBlocks.Count - 2)
Me.Invalidate()
End Sub
End Class