finn
Legacy Member
Beste,
ik slaag er maar niet in om mijn partij te serialiseren/deserialiseren.
Er is dus partij dat bord en speler heeft. Speler heeft dan weer verschillende deeklassen. Speler is mustinherit en mustovveride en daar sukkel ik mee.
ik slaag er maar niet in om mijn partij te serialiseren/deserialiseren.
Er is dus partij dat bord en speler heeft. Speler heeft dan weer verschillende deeklassen. Speler is mustinherit en mustovveride en daar sukkel ik mee.
ublic MustInherit Class Speler
'Private mKleur As Kleur
Private mNaam As String
Public Sub New(ByVal naam As String) ', ByVal kleur As Kleur)
mNaam = naam
' mKleur = kleur
End Sub
Public MustOverride Sub Zet(ByVal partij As Partij)
Public ReadOnly Property Naam() As String
Get
Return mNaam
End Get
End Property
' Public Property Kleur() As Kleur
' Get
' Return mKleur
' End Get
' Set(ByVal value As Kleur)
' mKleur = Kleur
' End Set
'End Property
Public Overridable Function AutoZet() As Boolean
Return False
End Function
Public Overrides Function ToString() As String
Return String.Format("{0}", Naam)
End Function
End Class
Option Strict Off
Imports Othello.Domein
Public Class Form1
Implements Domein.IPartijController
Private pauzeren As Boolean = False
Private vertraging As Vertraging = vertraging.Geen
Private Sub nieuwePartij()
Dim settings As FormSettings = FormSettings.Instance
If settings.ShowDialog <> Windows.Forms.DialogResult.OK Then Return
Timer1.Enabled = False
' gegevens uit form halen
partij = New Partij(Me, New Bord(settings.BordGrootte), _
SpelerFabriek.Maak(settings.SpelerWitType, settings.NaamSpelerWit), _
SpelerFabriek.Maak(settings.SpelerZwartType, settings.NaamSpelerZwart))
vertraging = settings.Vertraging
pauzeren = vertraging <> GUI.Vertraging.Geen
BordViewer1.Bord = partij.Bord
Application.DoEvents()
If pauzeren Then
Timer1.Interval = vertraging
End If
partij.Start()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
nieuwePartij()
End Sub
Private Sub timerTick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Timer1.Stop()
If partij.Afgelopen Then Return
If partij.Pauze Then partij.Verder()
End Sub
Private Sub pauze()
If pauzeren AndAlso partij.AanBeurt.AutoZet Then
partij.Pauzeer()
Timer1.Start()
End If
End Sub
Private Sub BordViewer1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles BordViewer1.MouseDoubleClick
If partij.Afgelopen Then Return
If partij.AanBeurt.AutoZet Then Return
Dim positie As Positie = DirectCast(sender, BordViewer).PuntNaarPositie(e.Location)
If partij.Bord.IsGeldigeZetVoorKleur(positie.Rij, positie.Kol, partij.KleurAanBeurt) Then
partij.DoeZet(positie, partij.AanBeurt)
End If
End Sub
Private partij As Partij
Public Sub Afgelopen(ByVal sender As Domein.Partij) Implements Domein.IPartijController.Afgelopen
Text = String.Format("Afgelopen, Wit: {0} en Zwart: {1}", partij.Bord.AantalWit, partij.Bord.AantalZwart)
Label1.Text = Text
End Sub
Public Sub SpelerAanZet(ByVal sender As Domein.Partij, ByVal speler As Domein.Speler) Implements Domein.IPartijController.SpelerAanZet
Text = String.Format("{0} is aan zet", speler)
pauze()
End Sub
Public Sub SpelerGezet(ByVal sender As Domein.Partij, ByVal speler As Domein.Speler, ByVal positie As Domein.Positie) Implements Domein.IPartijController.SpelerGezet
Label1.Text = String.Format("Wit: {0} en Zwart: {1}", partij.Bord.AantalWit, partij.Bord.AantalZwart)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
serializeren
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
deSerializeren()
End Sub
Private Sub serializeren()
Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
'Using stream As New System.IO.FileStream("partij.dat", IO.FileMode.Create)
'End Using
Dim partij As New Partij(Bord, ByVal naam as Speler, ByVal naam as Speler)
Dim fs As IO.FileStream = Nothing
Try
fs = New IO.FileStream("partij.othello", IO.FileMode.Create)
formatter.Serialize(fs, partij)
MessageBox.Show("Hoera!")
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If fs IsNot Nothing Then
fs.Close()
End If
End Try
End Sub
Private Sub deSerializeren()
Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim partij As Partij = Nothing
Dim fs As IO.FileStream = Nothing
Try
fs = New IO.FileStream("partij.othello", IO.FileMode.Open)
partij = DirectCast(formatter.Deserialize(fs), Partij)
Bord = partij.Bord
Text = String.Format("Wit={0}, Zwart={1}", partij.SpelerWit.Naam, partij.SpelerZwart.Naam)
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If fs IsNot Nothing Then
fs.Close()
End If
End Try
End Sub
Protected Property Bord() As Bord
Get
Return mBord
End Get
Set(ByVal value As Bord)
If mBord IsNot Nothing Then
mBord.Detach(Me)
End If
mBord = value
If mBord IsNot Nothing Then
mBord.Attach(Me)
End If
Invalidate()
End Set
End Property
Private random As New Random
Private mBord As New Othello.Domein.Bord
End Class