コード例 #1
0
        /// <summary>
        /// Обновление 2/2 - дейстиве клетки.
        /// </summary>
        public void PostUpdate()
        {
            // ex GOL: 23/3

            switch (Status)
            {
            case LiveStatusEnum.Alive:
                // ex: Eсли у живой клетки есть N живые соседки, то эта клетка продолжает жить;
                // В противном случае клетка умирает

                if (!rule.RuleToStayLive[liveAround])
                {
                    Status        = DyingTimes == 0 ? LiveStatusEnum.Dead : LiveStatusEnum.Dying;
                    isAliveGetOne = 0;
                }
                break;

            case LiveStatusEnum.Dying:
                if (--DyingTimes <= 0)
                {
                    Status        = LiveStatusEnum.Dead;
                    isAliveGetOne = 0;
                }
                break;

            case LiveStatusEnum.Dead:
                // В пустой (мёртвой) клетке, рядом с которой N живые клетки, зарождается жизнь;

                if (rule.RuleToBorn[liveAround])     // any flags
                {
                    Alive();
                }
                break;
            }
        }
コード例 #2
0
        public Live(int x, int y, Rule rule)
        {
            this.x    = x;
            this.y    = y;
            this.rule = rule;

            Status     = LiveStatusEnum.Dead;
            DyingTimes = 0;
            Pos        = new Vector2(x * rule.PixelSize, y * rule.PixelSize);
        }
コード例 #3
0
 /// <summary>
 /// Убить клетку.
 /// </summary>
 public void Kill()
 {
     isAliveGetOne = 0;
     Status        = LiveStatusEnum.Dead;
 }
コード例 #4
0
 public void Alive()
 {
     Status        = LiveStatusEnum.Alive;
     DyingTimes    = rule.DyingTimes;
     isAliveGetOne = 1;
 }