//Метод, отвечающий за отрисовку информационной панели. 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]); }
/// <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(); }