vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Schiebespiel in Vb.Net 
Autor: Kuno60
Datum: 06.09.14 17:27

Hallo Rostrot,
hier eine grafische Lösung des kleinen Spielchens.

Dies ist ein Control, dass du auf eine Form ziehen kannst.
Im Designer kannst du in der Kategorie "Darstellung", folgendes Einstellen:
BackColor, ForeColor, Font, FelderX, FelderY, FeldGröße und FeldFarbe.
Das Spiel wird gestartet mit dem Aufruf von "Spielstart".
Wenn das Spiel gewonnen ist, wird das Gewonnen-Ereignis ausgelöst und die Anzahl der Verschiebungen übergeben.
Das ist VB12 Code (VS 2013, FW 4.5). Wenn du eine ältere Version benutzt, musst du den Code entsprechend anpassen.

Da der Code hier nicht komplett rein passt, kommt er in Teilen und ohne Kommentare.

Imports System.ComponentModel
 
Class SpielfeldControl
  Inherits Control
 
  Event Gewonnen(schritte As Integer)
 
  Private Class Feld
    Friend Sub New()
      Belegt = True
    End Sub
    Friend Quadrat As Rectangle
    Friend Index As Integer
    Friend Nummer As Integer
    Friend Belegt As Boolean
    Friend Sub KopieIn(zf As Feld)
      zf.Nummer = Nummer
      zf.Belegt = True
      Nummer = 0
      Belegt = False
    End Sub
  End Class
 
  Dim Felder() As Feld
  Dim Quads() As Rectangle
  Dim Gestartet As Boolean
  Dim Zähler As Integer
  Dim ÜberFeld As Feld
  Dim AktFeld As Feld
 
  Public Sub New()
    SetStyle(ControlStyles.ResizeRedraw, True)
    Me.DoubleBuffered = True
    Me.ForeColor = Color.Black
    Me.BackColor = Color.Gray
    Me.Font = New Font(Me.Font.FontFamily, 20, FontStyle.Bold)
    ErstelleSpielfeld()
  End Sub
 
  Private Sub ErstelleSpielfeld()
    Gestartet = False
    ReDim Felder(pFelderX * pFelderY - 1)
    For i = 0 To Felder.Length - 1
      Felder(i) = New Feld
      Felder(i).Index = i
      Felder(i).Nummer = i + 1
      Felder(i).Quadrat = New Rectangle((i Mod pFelderX) * pFeldgröße, (i \ _
        pFelderX) * pFeldgröße, pFeldgröße, pFeldgröße)
    Next
    Felder.Last.Belegt = False
    Quads = Felder.Select(Function(x) x.Quadrat).ToArray
  End Sub
 
  Private Sub Größenanpassung()
    If Me.IsHandleCreated Then
      Me.Width = pFelderX * pFeldgröße + 1
      Me.Height = pFelderY * pFeldgröße + 1
    End If
  End Sub
 
  Protected Overrides Sub OnResize(e As EventArgs)
    Größenanpassung()
  End Sub
 
  Dim pFelderX As Integer = 6
  Dim pFelderY As Integer = 6
  Dim pFeldgröße As Integer = 70
  Dim pFeldFarbe As Color = Color.Silver
 
  <Description("Anzahl der waagerechten Felder.")>
  <Category("Darstellung"), DefaultValue(6)>
  Property FelderX As Integer
    Get
      Return pFelderX
    End Get
    Set(value As Integer)
      pFelderX = value
      ErstelleSpielfeld()
      Größenanpassung()
    End Set
  End Property
 
  <Description("Anzahl der senkrechten Felder.")>
  <Category("Darstellung"), DefaultValue(6)>
  Property FelderY As Integer
    Get
      Return pFelderY
    End Get
    Set(value As Integer)
      pFelderY = value
      ErstelleSpielfeld()
      Größenanpassung()
    End Set
  End Property
 
  <Description("Die Größe eines Feldes in Pixel.")>
  <Category("Darstellung"), DefaultValue(70)>
  Property FeldGröße As Integer
    Get
      Return pFeldgröße
    End Get
    Set(value As Integer)
      pFeldgröße = value
      ErstelleSpielfeld()
      Größenanpassung()
    End Set
  End Property
 
  <Description("Die Farbe eines Feldes.")>
  <Category("Darstellung")>
  Property FeldFarbe As Color
    Get
      Return pFeldFarbe
    End Get
    Set(value As Color)
      pFeldFarbe = value
      Me.Refresh()
    End Set
  End Property
 
  Sub Spielstart()
    ErstelleSpielfeld()
    Dim l = Felder.Length - 1
    Dim fn = Enumerable.Range(1, l).ToArray
    Dim zu = New Random
    For i = 1 To 1000
      Dim z1 = zu.Next(l)
      Dim z2 = zu.Next(l)
      Dim zw = fn(z1)
      fn(z1) = fn(z2)
      fn(z2) = zw
    Next
    For i = 0 To l - 1
      Felder(i).Nummer = fn(i)
    Next
    Zähler = 0
    Gestartet = True
    Me.Refresh()
  End Sub
 
End Class
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Schiebespiel in Vb.Net2.030Rostrot05.09.14 21:38
Re: Schiebespiel in Vb.Net1.223Manfred X06.09.14 11:03
Re: Schiebespiel in Vb.Net1.366Kuno6006.09.14 15:11
Re: Schiebespiel in Vb.Net1.408Kuno6006.09.14 17:27
Re: Schiebespiel in Vb.Net1.368Kuno6006.09.14 17:29
Re: Schiebespiel in Vb.Net1.372Rostrot06.09.14 18:58
Re: Schiebespiel in Vb.Net1.267ModeratorDaveS06.09.14 19:44
Re: Schiebespiel in Vb.Net1.116Kuno6007.09.14 20:47
Re: Schiebespiel in Vb.Net1.260Kuno6008.09.14 18:10
Re: Schiebespiel in Vb.Net1.177Rostrot08.09.14 19:13
Re: Schiebespiel in Vb.Net1.234Kuno6008.09.14 20:01
Re: Schiebespiel in Vb.Net1.160Rostrot09.09.14 15:48

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel