baaldor / conway

Conway's Game of Life
0 stars 0 forks source link

XML-Dateispeicherung Universum #5

Open baaldor opened 10 years ago

baaldor commented 10 years ago

Wenn wir ein Universum speichern, müssen folgende Informationen festgehalten werden:

  1. zu jeder Zelle ihren CellState
  2. zu jeder Zelle ihre Nachbarzellen Vorschlag: Wir verwenden folgendes XML-Schema
<Universe>
<UniverseClass name="theUniverseClassName"</UniverseClass>
<NeighbourhoodClass name="theNeighbourhoodClassName"</NeighbourhoodClass>
<CellClass name="theCellClassName"</CellClass>
<CellStateClass name="theCellStateClassName"</CellStateClass>
<Cells>
    <Cell id="someUniqueID">
        <CellState>
            <Value name="theValuesName">theValue</Value>
            <Value name="someOtherValuesName">theValue</Value>
            ...
            <Value name="theLastValuesName">theValue</Value>
        </CellState>
        <Neighbour cellID="theUniqueIDofTheFirstNeighbour"</Neighbour>
        <Neighbour cellID="theUniqueIDofTheSecondNeighbour"</Neighbour>
        ...
        <Neighbour cellID="theUniqueIDofTheLastNeighbour"</Neighbour>
    </Cell>
    ...
    <Cell id="someOtherUniqueID">
        <CellState>
            <Value name="theValuesName">theValue</Value>
            <Value name="someOtherValuesName">theValue</Value>
            ...
            <Value name="theLastValuesName">theValue</Value>
        </CellState>
        <Neighbour cellID="theUniqueIDofTheFirstNeighbour"</Neighbour>
        <Neighbour cellID="theUniqueIDofTheSecondNeighbour"</Neighbour>
        ...
        <Neighbour cellID="theUniqueIDofTheLastNeighbour"</Neighbour>
    </Cell>
</Cells>
</Universe>

Damit wären wir unabhängig von der Wahl der Nachbarschaftsbeziehung (z.B. 8er-, 6er- oder 4er-Nachbarschaft), der Wahl des CellState (muss ja nicht immer Boolscher Wert sein) usw.

Was sagt ihr dazu?

schnapper12 commented 10 years ago

Der Tag Value ist mir nicht ganz klar:

  1. Obige Darstellung erweckt den Eindruck, dass eine Zelle zu einem Zeitpunkt mehr als einen Zustand annehmen kann.
  2. Wozu dient das Attribut name, wenn ein Wert angegeben wird?

Warum geben wir zum einen alle verwendeten Klassen an, und zum andern alle Nachbarn? Ob eine Zelle zu einer anderen in einer Nachbarschaftsbeziehung steht sollte doch in einer der angegeben Klassen geregelt sein, weswegen es genügen sollte lediglich die Zellen zu speichern.

baaldor commented 10 years ago

Zum Thema "Value": Meine Überlegung war, dass sich ein CellState ja nicht nur aus einem Feld zusammensetzen muss so wie in unserem BooleanCellState aus einem boolschen Wert. Denkbar ist ja, dass ein CellState sich aus mehreren Feldern zusammensetzt - quasi CellState als Werte-Tupel. Das XML-Attribut "name" sollte dann die Zuweisung des Wertes zum jeweiligen Feld ermöglichen. Aber auf der anderen Seite hilft mein Ansatz auch nicht weiter, wenn die Struktur komplizierter als ein Tupel ist. Vermutlich muss man für jede CellState-Ableitung einen eigenen Serializer schreiben. Das überdenke ich nochmal.

Wir geben alle verwendeten Klassen an, damit wir sie wissen, wenn wir das Universum aus dem File bauen wollen. Wir brauchen eventuell die Information welche Ableitung von Universum benutzt wurde. Genau das gleiche gilt für Cell, CellState und Neighbourhood.

Gleiche Idee steckt dahinter, dass ich speicheren möchte, welche Nachbarn eine Zelle hat. Wenn ich das Universum aus dem File zusammenbauen möchte, muss ich das wissen. Sieh es aus der Sicht des Bauknechts. Der bekommt nur das File, in dem Informationene über ein Universum gespeichert sind. Dann soll er es rekonstruieren - nur mit den Informationen aus dem File. Alles was dort nicht steht, weiß er nicht. Ergo muss die Nachbarschaftsbeziehung gespeichert werden.