Archief - reversi/othello

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

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.
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
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan