Пример #1
0
        public void Preview(Point pt, StructBlock structBlock)
        {
            // shows a preview of a block
            WindowRect wrBlockAdj = new WindowRect();

            bool[] arrData = GetBlockData(structBlock);

            //  retrieve the exact measurement of the block
            // so we can able to draw the block in correct position.
            Adjustment(ref wrBlockAdj, arrData);

            Console.ForegroundColor = Color(structBlock.type);
            for (int row = wrBlockAdj.top; row < wrBlockAdj.top + wrBlockAdj.height; row++)
            {
                for (int col = wrBlockAdj.left; col < wrBlockAdj.left + wrBlockAdj.width; col++)
                {
                    if (arrData[col + row * BLOCK_SIZE])
                    {
                        Console.SetCursorPosition(pt.x + col - wrBlockAdj.left - wrBlockAdj.width / 2,
                                                  pt.y + row - wrBlockAdj.top - wrBlockAdj.height / 2);
                        Console.Write("#");
                    }
                }
            }
            Console.ResetColor();
        }
Пример #2
0
 public void Assign(StructBlock sbNew)
 {
     Angle = sbNew.angle;
     Type  = sbNew.type;
 }
Пример #3
0
        public Boolean[] GetBlockData(StructBlock structBlock)
        {
            // 0123
            // 4567
            // 8901
            // 2345

            // data for 4v4 block shapes
            bool[] arrData = new bool[BLOCK_SIZE << 2];

            switch (structBlock.type)
            {
            case BlockTypeNum.block01:
                if (structBlock.angle.Equals(RotationEnum.deg0) ||
                    structBlock.angle.Equals(RotationEnum.deg180))
                {
                    arrData[2]  = true;     // ..#. 0123
                    arrData[6]  = true;     // ..#. 4567
                    arrData[10] = true;     // ..#. 8901
                    arrData[14] = true;     // ..#. 2345
                }
                else
                {
                    arrData[12] = true;     // .... 0123
                    arrData[13] = true;     // .... 4567
                    arrData[14] = true;     // .... 8901
                    arrData[15] = true;     // #### 2345
                }

                break;

            case BlockTypeNum.block02:
                arrData[0] = true;      // ##.. 0123
                arrData[1] = true;      // ##.. 4567
                arrData[4] = true;      // .... 8901
                arrData[5] = true;      // .... 2345
                break;

            case BlockTypeNum.block03:
                if (structBlock.angle.Equals(RotationEnum.deg0) ||
                    structBlock.angle.Equals(RotationEnum.deg180))
                {
                    arrData[5] = true;      // .... 0123
                    arrData[6] = true;      // .##. 4567
                    arrData[8] = true;      // ##.. 8901
                    arrData[9] = true;      // .... 2345
                }
                else
                {
                    arrData[1]  = true;     // .#.. 0123
                    arrData[5]  = true;     // .##. 4567
                    arrData[6]  = true;     // ..#. 8901
                    arrData[10] = true;     // .... 2345
                }
                break;

            case BlockTypeNum.block04:
                if (structBlock.angle.Equals(RotationEnum.deg0) ||
                    structBlock.angle.Equals(RotationEnum.deg180))
                {
                    arrData[4]  = true;     // .... 0123
                    arrData[5]  = true;     // ##.. 4567
                    arrData[9]  = true;     // .##. 8901
                    arrData[10] = true;     // .... 2345
                }
                else
                {
                    arrData[2] = true;      // ..#. 0123
                    arrData[5] = true;      // .##. 4567
                    arrData[6] = true;      // .#.. 8901
                    arrData[9] = true;      // .... 2345
                }
                break;

            case BlockTypeNum.block05:
                if (structBlock.angle.Equals(RotationEnum.deg0))
                {
                    arrData[4] = true;      // .... 0123
                    arrData[5] = true;      // ###. 4567
                    arrData[6] = true;      // .#.. 8901
                    arrData[9] = true;      // .... 2345
                }
                else if (structBlock.angle.Equals(RotationEnum.deg90))
                {
                    arrData[1] = true;      // .#.. 0123
                    arrData[4] = true;      // ##.. 4567
                    arrData[5] = true;      // .#.. 8901
                    arrData[9] = true;      // .... 2345
                }
                else if (structBlock.angle.Equals(RotationEnum.deg180))
                {
                    arrData[5]  = true;     // .... 0123
                    arrData[8]  = true;     // .#.. 4567
                    arrData[9]  = true;     // ###. 8901
                    arrData[10] = true;     // .... 2345
                }
                else
                {
                    arrData[1] = true;      // .#.. 0123
                    arrData[5] = true;      // .##. 4567
                    arrData[6] = true;      // .#.. 8901
                    arrData[9] = true;      // .... 2345
                }
                break;

            case BlockTypeNum.block06:
                if (structBlock.angle.Equals(RotationEnum.deg0))
                {
                    arrData[4] = true;      // .... 0123
                    arrData[5] = true;      // ###. 4567
                    arrData[6] = true;      // #... 8901
                    arrData[8] = true;      // .... 2345
                }
                else if (structBlock.angle.Equals(RotationEnum.deg90))
                {
                    arrData[0] = true;      // ##.. 0123
                    arrData[1] = true;      // .#.. 4567
                    arrData[5] = true;      // .#.. 8901
                    arrData[9] = true;      // .... 2345
                }
                else if (structBlock.angle.Equals(RotationEnum.deg180))
                {
                    arrData[6]  = true;     // .... 0123
                    arrData[8]  = true;     // ..#. 4567
                    arrData[9]  = true;     // ###. 8901
                    arrData[10] = true;     // .... 2345
                }
                else
                {
                    arrData[1]  = true;     // .#.. 0123
                    arrData[5]  = true;     // .#.. 4567
                    arrData[9]  = true;     // .##. 8901
                    arrData[10] = true;     // .... 2345
                }
                break;

            case BlockTypeNum.block07:
                if (structBlock.angle.Equals(RotationEnum.deg0))
                {
                    arrData[4]  = true;     // .... 0123
                    arrData[5]  = true;     // ###. 4567
                    arrData[6]  = true;     // ..#. 8901
                    arrData[10] = true;     // .... 2345
                }
                else if (structBlock.angle.Equals(RotationEnum.deg90))
                {
                    arrData[1] = true;      // .#.. 0123
                    arrData[5] = true;      // .#.. 4567
                    arrData[8] = true;      // ##.. 8901
                    arrData[9] = true;      // .... 2345
                }
                else if (structBlock.angle.Equals(RotationEnum.deg180))
                {
                    arrData[4]  = true;     // .... 0123
                    arrData[8]  = true;     // #... 4567
                    arrData[9]  = true;     // ###. 8901
                    arrData[10] = true;     // .... 2345
                }
                else
                {
                    arrData[1] = true;      // .##. 0123
                    arrData[2] = true;      // .#.. 4567
                    arrData[5] = true;      // .#.. 8901
                    arrData[9] = true;      // .... 2345
                }
                break;
            }

            return(arrData);
        }