Esempio n. 1
0
            public void Turn(int amount)
            {
                amount = amount % 4; // Unnecessary turns
                if (Math.Abs(amount) == 3)
                {
                    amount /= -3;                        // 3 turns = 1 turn in opposite direction
                }
                stickers.Shift(-2 * amount);

                var sideStickers  = new Sticker[12];
                var adjacentFaces = connections.Keys.ToArray();

                for (int i = 0; i < adjacentFaces.Length; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        Face face  = adjacentFaces[i];
                        int  index = stickers.LoopedIndex((int)connections[face] + j);
                        sideStickers[i * 3 + j] = face.stickers[index];
                    }
                }

                sideStickers.Shift(3 * amount);

                for (int i = 0; i < adjacentFaces.Length; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        Face face  = adjacentFaces[i];
                        int  index = stickers.LoopedIndex((int)connections[face] + j);
                        face.stickers[index] = sideStickers[i * 3 + j];
                    }
                }
            }