예제 #1
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();

        }
예제 #2
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();
        }