示例#1
0
    /// <summary>Setzt den übergeben Zellenzustand und passt alles weiter entsprechend an</summary>
    /// <param name="_state">Der Zustand der gesetzt werden soll</param>
    /// <remarks>Setzt den übergeben Zellenzustand und passt dann die Zellenfarbe entsprechend dem Alter und Zustand an. Außerdem wird hier dann auch die aktuelle
    /// Altersgruppe festgelegt</remarks>
    public void SetCellState(STATES _state)
    {
        //Je nach übergeben Zustand die Zellenfarbe sowie die Altersgruppe anpassen
        switch (_state)
        {
        case STATES.NONE:
            m_Renderer.color = new Color(0, 0, 0, 0);
            break;

        case STATES.ALIVE:
            if (m_Age <= (ulong)m_Baby.Age)
            {
                m_Renderer.color = m_Baby.AgeColor;
                m_AgeGroup       = AGES.BABY;
            }
            else if (m_Age <= (ulong)m_Teenager.Age)
            {
                m_Renderer.color = m_Teenager.AgeColor;
                m_AgeGroup       = AGES.TEENAGER;
            }
            else if (m_Age <= (ulong)m_Adult.Age)
            {
                m_Renderer.color = m_Adult.AgeColor;
                m_AgeGroup       = AGES.ADULT;
            }
            else
            {
                m_Renderer.color = m_Grandparents.AgeColor;
                m_AgeGroup       = AGES.GRANDPARENTS;
            }

            //Ist der aktuelle Zellenzustand "Gestorben" und wird er jetzt auf "Lebendig" gesetzt wird dem Grid Manager mitgeteilt das es eine weitere Lebende
            //Zelle gibt.
            if (m_CurrentState == STATES.DEAD)
            {
                m_GridManager.LivingCells++;
            }

            break;

        case STATES.DEAD:
            m_Renderer.color = m_DeadColor;
            m_Age            = 0UL;
            m_AgeGroup       = AGES.NONE;

            //Ist der aktuelle Zellenzustand "Lebendig" und wird er jetzt auf "Gestorben" gesetzt wird dem Grid Manager mitgeteilt das es eine Lebende weniger
            //gibt.
            if (m_CurrentState == STATES.ALIVE)
            {
                m_GridManager.LivingCells--;
            }

            break;
        }

        //Den neuen Zellenzustand speichern, damit die Zelle ihren eigenen Zustand kennt
        m_CurrentState = _state;
    }
示例#2
0
    /// <summary>Zählt wie-viele Nachbarn um die Zelle aktuell Leben. Diese müssen sich aber in dem übergebenen Altersgruppenumfeld befinden</summary>
    /// <param name="_minAgeGroup">In welcher Altersgruppe müssen sich die Nachtbarzellen mindestens befinden damit sie gezählt werden</param>
    /// <param name="_maxAgeGroup">In welcher Altersgruppe dürfen sich die Nachtbarzellen maximal befinden damit sie gezählt werden</param>
    /// <returns>Anzahl der Lebenden Zellen um die Zelle</returns>
    /// <remarks>Zählt die Nachbarszellen die eine Reihe um die eigene Zelle deren aktueller Zellenzustand "Lebendig" ist. Diese müssen sich aber in dem #
    /// übergebenen Altersgruppenumfeld befinden</remarks>
    int AgeGroupNeighbors(AGES _minAgeGroup, AGES _maxAgeGroup)
    {
        int TempCounter = 0;

        //Startposition der Zählung festlegen -> oben Links
        int TempX = (int)m_CellPos.x - 1;
        int TempY = (int)m_CellPos.y - 1;

        //Die Nachbarszellen durchlaufen und überprüfen ob deren aktueller Zustand "Lebendig" ist
        for (int i = 0; i < 3; i++)
        {
            for (int a = 0; a < 3; a++)
            {
                //Überprüfen ob es sich um die eigene Zelle handelt
                if (TempX == (int)m_CellPos.x && TempY == (int)m_CellPos.y)
                {
                    TempY++; //Eine Zelle weiter nach rechts rutschen
                    continue;
                }

                //Überprüfen ob man am oberen oder unteren Spielfeldrand angekommen ist
                if (TempX < 0 || TempX > m_GridManager.FieldSize.x - 1)
                {
                    break;
                }

                //Überprüfen ob man am linken oder rechten Spielfeldrand angekommen ist. Wenn nicht wird die Nachbarszellen die sich an der TempX und TempY Position des Spielfeld
                //befindet überprüft ob diese den Zellenzustand "Lebendig" trägt und ob sie sich in dem entsprechenden Altersumfeld befindet.
                if (TempY >= 0 && TempY <= m_GridManager.FieldSize.y - 1)
                {
                    if (m_GridManager.Field[TempX, TempY].CurrentState == STATES.ALIVE && m_GridManager.Field[TempX, TempY].m_AgeGroup >= _minAgeGroup && m_GridManager.Field[TempX, TempY].m_AgeGroup <= _maxAgeGroup)
                    {
                        TempCounter++;
                    }
                }

                TempY++; //Eine Zelle nach unten rutschen
            }

            TempX++;                      //Eine Zelle weiter nach rechts rutschen
            TempY = (int)m_CellPos.y - 1; //Suchlauf wieder an der linken Zelle beginnen lassen
        }

        return(TempCounter);
    }