Exemplo n.º 1
0
        //проверка возможности смещения вниз
        public override bool CheckDown(Field field)
        {
            if (field.TetrisField[field.CurY + 2, field.CurX] == true || field.TetrisField[field.CurY + 2, field.CurX + 1] == true ||
                (field.CurY + 2) == field.Height - 1) return false;

            return false;
        }
Exemplo n.º 2
0
        //проверка возможности смещения вправо
        public override bool CheckRight(Field field)
        {
            if (_position == 1)
            {
                if (field.TetrisField[field.CurY, field.CurX + 2] == true || field.TetrisField[field.CurY + 1, field.CurX + 2] == true ||
                    field.TetrisField[field.CurY + 2, field.CurX + 1] == true || field.CurX == field.Width - 3) return false;
                else return true;
            }

            else
            {
                if (_position == 2)
                {
                    if (field.TetrisField[field.CurY + 1, field.CurX + 2] == true || field.TetrisField[field.CurY + 2, field.CurX + 3] == true ||
                        field.CurX == field.Width - 4) return false;
                    else return true;
                }

                if (_position == 3)
                {
                    if (field.TetrisField[field.CurY, field.CurX + 3] == true || field.TetrisField[field.CurY + 1, field.CurX + 3] == true ||
                        field.TetrisField[field.CurY + 2, field.CurX + 2] == true || field.CurX == field.Width - 4) return false;
                    else return true;
                }

                if (_position == 4)
                {
                    if (field.TetrisField[field.CurY, field.CurX + 2] == true || field.TetrisField[field.CurY + 1, field.CurX + 3] == true ||
                        field.CurX == field.Width - 4) return false;
                    else return true;
                }

            }
            return false;
        }
Exemplo n.º 3
0
        //проверка возможности смещения влево
        public override bool CheckLeft(Field field)
        {
            if (_position == 1)
            {
                if (field.TetrisField[field.CurY, field.CurX - 1] == true || field.TetrisField[field.CurY + 1, field.CurX + 1] == true || field.CurX == 1) return false;
                else return true;
            }
 
            else
            {
                if (_position == 2)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        if (field.TetrisField[field.CurY + i, field.CurX - 1] == true || field.CurX == 1) return false;
                    }
                    return true;
                }
 
                if (_position == 3)
                {
                    if (field.TetrisField[field.CurY + 1, field.CurX - 1] == true || field.TetrisField[field.CurY + 2, field.CurX - 1] == true || field.CurX == 1) return false;
                    else return true;
                }
 
                if (_position == 4)
                {
                    if (field.TetrisField[field.CurY + 2, field.CurX] == true || field.TetrisField[field.CurY + 1, field.CurX + 1] == true || field.TetrisField[field.CurY, field.CurX + 1] == true || field.CurX == 0) return false;
                    else return true;
                }
 
            }
             return false;
        }
Exemplo n.º 4
0
        //проверка возможности смещения влево
        public override bool CheckLeft(Field field)
        {

            if (field.TetrisField[field.CurY + 1, field.CurX - 1] || field.TetrisField[field.CurY + 1, field.CurX - 1] || field.CurX == 1)
                return false;
            return true;

        }
Exemplo n.º 5
0
 //проверка возможности смещения вправо
 public override bool CheckRight(Field field)
 {
     if (field.TetrisField[field.CurY, field.CurX + 2] == true || field.TetrisField[field.CurY + 1, field.CurX + 2] == true || field.CurX == field.Width - 3)
         return false;
     else 
         return true;
     return false;
 }
Exemplo n.º 6
0
        //проверка возможности смещения вправо
        public override bool CheckRight(Field field)
        {
            if (_position == 1 || _position == 3)
            {
                if (field.TetrisField[field.CurY, field.CurX + 4]  || field.CurX == field.Width - 5) return false;
                else return true;
            }

            else
            {
                if (_position == 2 || _position == 4)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        if (field.TetrisField[field.CurY + i, field.CurX + 2] || field.CurX == field.Width - 3) return false;
                    }
                    return true;
                }
            }
            return false;
        }
Exemplo n.º 7
0
        //проверка возможности смещения влево
        public override bool CheckLeft(Field field)
        {
            if (_position == 1)
            {
                if (field.TetrisField[field.CurY, field.CurX] || field.TetrisField[field.CurY + 1, field.CurX - 1]  ||
                    field.TetrisField[field.CurY + 2, field.CurX - 1] || field.CurX == 1) return false;
                return true;
            }

            else
            {
                if (_position == 2)
                {
                    if (field.TetrisField[field.CurY + 1, field.CurX - 1]  || field.TetrisField[field.CurY + 2, field.CurX] || field.CurX == 1)
                        return false;
                    else
                        return true;
                }

                if (_position == 3)
                {
                    if (field.TetrisField[field.CurY, field.CurX + 1]  || field.TetrisField[field.CurY + 1, field.CurX]  ||
                        field.TetrisField[field.CurY + 2, field.CurX]  || field.CurX == 0) return false;
                    else 
                        return true;
                }

                if (_position == 4)
                {
                    if (field.TetrisField[field.CurY, field.CurX - 1]  || field.TetrisField[field.CurY + 1, field.CurX]  || field.CurX == 1)
                        return false;
                    else 
                        return true;
                }

            }

            return false;
        }
Exemplo n.º 8
0
 //проверка возможности смещения вниз
 public override bool CheckDown(Field field)
 {
     if (_position == 1 || _position == 3)
     {
         for (int i = 0; i < 4; i++)
         {
             if (field.TetrisField[field.CurY + 1, field.CurX + i] || (field.CurY + 1) == field.Height - 1) 
                 return false;
         }
         return true;
     }
     else
     {
         if (_position == 2 || _position == 4)
         {
             if (field.TetrisField[field.CurY + 4, field.CurX + 1] || (field.CurY + 4) == field.Height - 1) 
                 return false;
         }
         return true;
     }
     return false;
 }
Exemplo n.º 9
0
        //проверка возможности смещения вниз
        public override bool CheckDown(Field field)
        {
            if (_position == 1)
            {
                for (int i = 0; i < 3; i++)
                {
                    if (field.TetrisField[field.CurY + 2, field.CurX + i]  || (field.CurY + 2) == field.Height - 1) return false;
                }
                return true;
            }

            else
            {
                if (_position == 2)
                {
                    if (field.TetrisField[field.CurY + 2, field.CurX] || field.TetrisField[field.CurY + 3, field.CurX + 1] ||
                        (field.CurY + 3) == field.Height - 1) 
                        return false;
                    return true;
                }

                if (_position == 3)
                {
                    if (field.TetrisField[field.CurY + 2, field.CurX] || field.TetrisField[field.CurY + 3, field.CurX + 1] ||
                        field.TetrisField[field.CurY + 2, field.CurX + 2] || (field.CurY + 3) == field.Height - 1) 
                        return false;
                    return true;
                }

                if (_position == 4)
                {
                    if (field.TetrisField[field.CurY + 3, field.CurX + 1] || field.TetrisField[field.CurY + 2, field.CurX + 2] ||
                        (field.CurY + 3) == field.Height - 1) 
                        return false;
                    return true;
                }

            }
            return false;
        }
Exemplo n.º 10
0
        private static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.White;
            for (int i = 0; i < 20; i++)
            {
                Console.CursorLeft = 0;
                Console.CursorTop = i;
                Console.WriteLine("0");
            }

            for (int i = 1; i < 12; i++)
            {
                Console.CursorLeft = i;
                Console.CursorTop = 19;
                Console.WriteLine("0");
            }

            for (int i = 0; i < 20; i++)
            {
                Console.CursorLeft = 11;
                Console.CursorTop = i;
                Console.WriteLine("0");
            }

            Console.BackgroundColor = ConsoleColor.Black;

            Field f = new Field(12, 20);

            f.NewFig();

            f.DrawField();

            //создание объектов событий нажатия клавиш
            EventUp up = new EventUp(); //вверх
            EventDown down = new EventDown(); //вниз
            EventLeft left = new EventLeft(); // влево
            EventRight right = new EventRight(); //вправо

            up.UpEvent += f.UpFig;
            down.DownEvent += f.DownFig;
            left.LeftEvent += f.LeftFig;
            right.RightEvent += f.RightFig;

            ConsoleKeyInfo cki;
            //Скорее всего это можно поднять наверх, логика не идеально
            while (true)
            {
                if (f.Fig.CheckDown(f))
                {
                    f.Move();
                }
                else
                {
                    while (true)
                    {
                        bool flag = f.CheckLine();
                        if (flag == false) 
                            break;
                    }
                    f.NewFig();
                    if (f.Fig.IsAtBottom(f) == true) 
                        break;
                }


                for (int i = 0; i < 10 - f.Level; i++) //количество итераций цикла имитирует скорость
                {
                    System.Threading.Thread.Sleep(50);
                    if (Console.KeyAvailable)
                    {
                        cki = Console.ReadKey();


                        switch (cki.Key)
                        {
                            case ConsoleKey.UpArrow: //стрелка вверх
                            {
                                if (!f.Fig.IsCanRotate(f)) 
                                    break;
                                up.UpUserEvent(); //обработчик события
                                f.DrawField(); //перерисовка поля
                                break;
                            }

                            case ConsoleKey.DownArrow:
                            {
                                down.DownUserEvent();
                                break;
                            }

                            case ConsoleKey.LeftArrow:
                            {
                                left.LeftUserEvent();
                                f.DrawField(); //перерисовка поля
                                break;
                            }

                            case ConsoleKey.RightArrow:
                            {
                                right.RightUserEvent();
                                f.DrawField();
                                break;
                            }

                            default:
                            {
                                break;
                            }
                        }
                    }
                }
            }

            Console.Clear();

            Console.WriteLine("\n\n\n      GAME OVER");
            Console.WriteLine("\n   TOTAL SCORES " + (f.Level*1000 + f.Scores) + "\n\n\n\n\n\n\n\n\n");
            Console.ReadLine();

        }
Exemplo n.º 11
0
 //проверка достижения "потолка"
 public override bool IsAtBottom(Field field)
 {
     for (int i = 0; i < 4; i++)
     {
         if (field.TetrisField[1, field.CurX + i] ) return true;
     }
     return false;
 }
Exemplo n.º 12
0
 public override bool IsCanRotate(Field field)
 {
     return true;
 }
Exemplo n.º 13
0
 public abstract bool IsAtBottom(Field field);
Exemplo n.º 14
0
 public abstract bool IsCanRotate(Field field);
Exemplo n.º 15
0
 public abstract bool CheckDown(Field field);
Exemplo n.º 16
0
 public abstract bool CheckRight(Field field);
Exemplo n.º 17
0
 public abstract bool CheckLeft(Field field);
Exemplo n.º 18
0
        //проверка возможности смещения вниз
        public override bool CheckDown(Field field)
        {
            if (_position == 1)
            {
                if (field.TetrisField[field.CurY + 3, field.CurX] || field.TetrisField[field.CurY + 2, field.CurX + 1] ||
                    field.CurY + 3 == field.Height - 1)
                    return false;
                else
                    return true;
            }

            else
            {
                if (_position == 2)
                {
                    if (field.TetrisField[field.CurY + 2, field.CurX] ||
                        field.TetrisField[field.CurY + 3, field.CurX + 1] ||
                        field.TetrisField[field.CurY + 3, field.CurX + 2] || field.CurY + 3 == field.Height - 1)
                        return false;
                    else
                        return true;
                }

                if (_position == 3)
                {
                    if (field.TetrisField[field.CurY + 3, field.CurX + 1] == true ||
                        field.TetrisField[field.CurY + 2, field.CurX + 2] == true ||
                        field.CurY + 3 == field.Height - 1)
                        return false;
                    else 
                        return true;
                }

                if (_position == 4)
                {
                    if (field.TetrisField[field.CurY + 1, field.CurX]  ||
                        field.TetrisField[field.CurY + 2, field.CurX + 1]  ||
                        field.TetrisField[field.CurY + 2, field.CurX + 2]  || field.CurY + 2 == field.Height - 1)
                        return false;
                    else 
                        return true;
                }

            }
            return false;
        }
Exemplo n.º 19
0
        //проверка достижения "потолка"
        public override bool IsAtBottom(Field field)
        {
            if (field.TetrisField[3, field.CurX] == true || field.TetrisField[2, field.CurX + 1] )
                return true;

            return false;
        }