00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <e32math.h>
00017
00018 #include "CLifeEngine.h"
00019
00020 CLifeEngine::CLifeEngine(const TInt64& aSeed)
00021 : iSeed(aSeed)
00022 {
00023 Reset();
00024 }
00025
00026
00027 void CLifeEngine::Reset()
00028 {
00029 for (TInt y=0; y < DIM_Y_ARRAY; y++)
00030 for (TInt x=0; x < DIM_X_ARRAY; x++)
00031 iCellArray[x][y] = (Math::Rand(iSeed) > KMaxTInt/2) ? (TBool)ETrue : (TBool)EFalse;
00032 }
00033
00034
00035
00036 void CLifeEngine::AddGeneration()
00037 {
00038 TInt numNeighbours;
00039
00040 for (TInt y=0; y < DIM_Y_ARRAY; y++)
00041 {
00042 for (TInt x=0; x < DIM_X_ARRAY; x++)
00043 {
00044 numNeighbours=NumNeighbors(x,y);
00045
00046 if (iCellArray[x][y])
00047
00048 {
00049 if ((numNeighbours == 2) || (numNeighbours == 3))
00050 iTempCellArray[x][y]=ETrue;
00051 else
00052 iTempCellArray[x][y]=EFalse;
00053 }
00054 else
00055
00056 {
00057 if (numNeighbours == 3)
00058 iTempCellArray[x][y]=ETrue;
00059 else
00060 iTempCellArray[x][y]=EFalse;
00061 }
00062 }
00063 }
00064
00065 for (TInt y2 =0; y2 < DIM_Y_ARRAY; y2++)
00066 for (TInt x2=0; x2 < DIM_X_ARRAY; x2++)
00067 iCellArray[x2][y2]=iTempCellArray[x2][y2];
00068 }
00069
00070
00071
00072 TInt CLifeEngine::NumNeighbors(TInt x, TInt y)
00073 {
00074 TInt numNeighbors=0;
00075 TInt i =0;
00076
00077
00078 if ((x-1) >= 0)
00079 for (i=y-1; i <= y+1; i++)
00080 if ((i >= 0) && (i < DIM_Y_ARRAY))
00081 if (iCellArray[x-1][i])
00082 numNeighbors++;
00083
00084
00085 if (x+1 < DIM_X_ARRAY)
00086 for (i=y-1; i <= y+1; i++)
00087 if ((i >= 0) && (i < DIM_Y_ARRAY))
00088 if (iCellArray[x+1][i])
00089 numNeighbors++;
00090
00091
00092 if ((y-1) >= 0)
00093 if (iCellArray[x][y-1])
00094 numNeighbors++;
00095
00096
00097 if ((y+1) < DIM_Y_ARRAY)
00098 if (iCellArray[x][y+1])
00099 numNeighbors++;
00100
00101 return numNeighbors;
00102 }