005
08.10.2002, 12:30 Uhr
Bruder Leif
dances with systems (Operator)
|
Moin!
Hier meine Version, sehr simpel und in C# statt C++:
C++: |
using System;
class GameOfLife {
//------------------------------------------------------------------------------
private static int iSize = 0;
//------------------------------------------------------------------------------
private static void Matrix2Console(bool[,] bMatrix) { int iLiving = 0;
for(int x=1; x<iSize; x++) { for(int y=1; y<iSize; y++) { if(bMatrix[x,y]) { Console.Write("X"); iLiving++; } else Console.Write("."); } Console.WriteLine(); } Console.WriteLine("Anzahl lebender Individuen: {0}", iLiving); }
//------------------------------------------------------------------------------
private static void NextGen(bool[,] bCurrentMatrix, bool[,] bNextMatrix) { // Neue Belegung in der nächsten Generation ermitteln int iLivingNeighbors; bool bLiving;
for(int x=1; x<iSize; x++) { for(int y=1; y<iSize; y++) { bLiving = bCurrentMatrix[x,y]; iLivingNeighbors = 0;
// Erst mal zählen. Wie viele "lebende" Nachbarn hat die Zelle eigentlich? if(bCurrentMatrix[ x-1, y-1 ]) iLivingNeighbors++; if(bCurrentMatrix[ x-1, y ]) iLivingNeighbors++; if(bCurrentMatrix[ x-1, y+1 ]) iLivingNeighbors++; if(bCurrentMatrix[ x, y-1 ]) iLivingNeighbors++; if(bCurrentMatrix[ x, y+1 ]) iLivingNeighbors++; if(bCurrentMatrix[ x+1, y-1 ]) iLivingNeighbors++; if(bCurrentMatrix[ x+1, y ]) iLivingNeighbors++; if(bCurrentMatrix[ x+1, y+1 ]) iLivingNeighbors++;
if(iLivingNeighbors < 2 || iLivingNeighbors > 3) bLiving = false; else if(iLivingNeighbors == 3) bLiving = true;
bNextMatrix[x,y] = bLiving; } } }
//------------------------------------------------------------------------------
public static void Main() { Console.WriteLine("Game Of Life");
while(iSize>20 || iSize<2) // Sonst macht das bei der Ausgabe wenig Sinn { Console.WriteLine(); Console.Write("Seitenlänge des Spielfeldes? "); iSize = Int32.Parse(Console.ReadLine()); if(iSize>20 || iSize<2) Console.WriteLine("Zwischen 3 und 20 bitte!"); } Console.WriteLine();
// Zwei Arrays erstellen: Eins für die aktuelle Generation, eins für die nächste (jeweils abwechselnd) // Dabei einen "Rand" von 1 Punkt lassen (immer "tot", erspart uns einen Haufen Überprüfungen) iSize += 1; bool[,] bMatrix1 = new bool[iSize+1, iSize+1]; bool[,] bMatrix2 = new bool[iSize+1, iSize+1]; int iCurrentMatrix = 1;
// Startmatrix mit Zufallswerten füllen Random r = new Random(); for(int x=1; x<iSize; x++) for(int y=1; y<iSize; y++) bMatrix1[x,y] = (r.Next() % 100 > 80); // Anderer Wert für andere Startdichte
// Wir gehen 100 Generationen durch... for(int iGeneration=1; iGeneration<100; iGeneration++) { // Aktuellen Zustand ausgeben und neue Matrix ermitteln Console.WriteLine("Generation {0}", iGeneration);
if(iCurrentMatrix==1) { Matrix2Console(bMatrix1); NextGen(bMatrix1, bMatrix2); iCurrentMatrix = 2; } else { Matrix2Console(bMatrix2); NextGen(bMatrix2, bMatrix1); iCurrentMatrix = 1; }
Console.WriteLine(); } }
//------------------------------------------------------------------------------
}
|
Edit: Seh grad in der Aufgabenstellung... das Spielfeld soll eingelesen werden, statt zufällig erzeugt... *hups* -- Mit 40 Fieber sitzt man nicht mehr vor dem PC. Man liegt im Bett. Mit dem Notebook. Dieser Post wurde am 08.10.2002 um 12:31 Uhr von Leif editiert. |