//Метод, отвечающий за отрисовку информационной панели.
 public void DrawInfoArea(ITetramino nextFigure, GameData gd)
 {
     ClearInfoArea(InfoAreaCol + 4, 3);
     Console.SetCursorPosition(InfoAreaCol, 1);
     Console.Write("Следующая:");
     DrawTetra.Draw(InfoAreaCol + 4, 3, nextFigure);
     Console.SetCursorPosition(InfoAreaCol, 8);
     Console.Write("Очки: {0}", gd.Points);
     Console.SetCursorPosition(InfoAreaCol, 10);
     Console.Write("Линии: {0}", gd.CompletedLinesNumber);
     Console.SetCursorPosition(InfoAreaCol, 12);
     Console.Write("Время: {0:00}:{1:00}", gd.Time.Minutes, gd.Time.Seconds);
     Console.SetCursorPosition(InfoAreaCol, 15);
     Console.Write(Message[gd.LastStreak]);
 }
Exemple #2
0
        /// <summary>
        /// Метод старта игры.
        /// </summary>
        public void Play()
        {
            Console.Clear();
            //Строим игровую карту.
            var map = new MapBuilder().Build();

            //Рисуем первую фигуру.
            DrawTetra.Draw(map.CurrentFigure.CurrentCol, map.CurrentFigure.CurrentRow, map.CurrentFigure);

            //Подсчет времени игры.
            System.Diagnostics.Stopwatch CountTime = new System.Diagnostics.Stopwatch();

            while (true)
            {
                CountTime.Start();
                if (Console.KeyAvailable)
                {
                    FigureMoving.Moving(map);
                }

                /* Сначала проверяем на предмет столкновения фигуры с построенными блоками.
                 * Если было столкновение, то проверяем на предмет выполнения условий конца игры.
                 * Если игра не окончена, то размещаем фигуру среди блоков.
                 * Далее проверяем не заполнилась ли линия и подсчитываем очки.
                 * Генерируем следующую фигуру.
                 *
                 * Если столкновения не было, то смещаем фигуру на 1 клетку вниз.
                 */
                if (map.MapMechanics.IntersectionCheck(map.CurrentFigure, map.BuildingArea))
                {
                    if (map.MapMechanics.GameOver(map.CurrentFigure, map.BuildingArea))
                    {
                        break;
                    }
                    map.MapMechanics.PlaceCurrentFigure(map.CurrentFigure, map.BuildingArea);
                    map.GameData.PointsCount(map.MapMechanics.CompletedLines(map.BuildingArea));
                    map.CurrentFigure = map.NextFigure;
                    map.NextFigure    = map.NewFigureRng.GenerateFigure();
                }
                else
                {
                    map.CurrentFigure.CurrentRow++;
                }

                //Рисуем поле построенных блоков (двумерный массив из булевых переменных).
                map.MapMechanics.DrawBuildingArea(map.BuildingArea);

                CountTime.Stop();
                map.GameData.Time = CountTime.Elapsed;
                CountTime.Start();

                /* Рисуем панель информации, текущую фигуру и границы.
                 * Устанавливаем задержку перед следующим шагом фигуры.
                 */
                map.InfoArea.DrawInfoArea(map.NextFigure, map.GameData);
                DrawTetra.Draw(map.CurrentFigure.CurrentCol, map.CurrentFigure.CurrentRow, map.CurrentFigure);
                map.InfoArea.DrawBorders();
                Thread.Sleep(300);
            }
            //Результаты текущей игры.
            map.GameData.ShowCurrentResults();
            map.GameData.InsertIntoDB();
        }