diff --git a/ClassLib000/Walker/Appartment.cs b/ClassLib000/Walker/Appartment.cs new file mode 100644 index 0000000..8e93c4b --- /dev/null +++ b/ClassLib000/Walker/Appartment.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; + + + + +namespace ClassLib000.Walker +{ + public class Appartment + { + public List CleanSpaces; + public VacuumCleaner VC; + + public Appartment() + { + VC = new VacuumCleaner(); + CleanSpaces = new List(); + } + + #region public methods + + public void InitDoor(int x1, int y1, int x2, int y2) + { + foreach (var sp in CleanSpaces) + { + if (sp.X > x1 && sp.X > x2 && sp.Y > y1 && sp.Y < y2) + { + sp.WallEast = false; + sp.WallNorth = false; + sp.WallSouth = false; + sp.WallWest = false; + } + } + } + + public void InitRoom(int x1, int y1, int x2, int y2) + { + for (int iX = x1; iX <= x2; iX++) + { + for (int iY = y1; iY <= y2; iY++) + { + CleanSpace cs = new CleanSpace(x1, y1); + if (iX == x1) + { + cs.WallWest = true; + } + if (iX == x2) + { + cs.WallEast = true; + } + if (iY == y1) + { + cs.WallNorth = true; + } + if (iY == y2) + { + cs.WallSouth = true; + } + } + + } + } + + public void InitVC() + { + VC.X = CleanSpaces[0].X; + VC.Y = CleanSpaces[0].Y; + } + + public List GetDirtyCleanSpace(int iDayCount) + { + List result = new List(); + DateTime dtFrom = DateTime.Now.AddDays(-iDayCount); + foreach (var sp in CleanSpaces) + { + if (sp.DateClean < dtFrom) + { + result.Add(sp); + } + } + return result; + } + + public List FindRouteForVC(VacuumCleaner vc, int toX, int toY) + { + List result = new List(); + int fromX = vc.X; + int fromY = vc.Y; + // ... реализация алгоритма перебора путей (поиск кратчайшего) + var cleanSpaceFrom = CleanSpaces[0]; + var cleanSpaceTo = CleanSpaces[1]; + if (vc.CanGo(cleanSpaceFrom, cleanSpaceTo)) + { + //... + } + return result; + } + #endregion + } +} diff --git a/ClassLib000/Walker/CleanSpace.cs b/ClassLib000/Walker/CleanSpace.cs new file mode 100644 index 0000000..8ce0444 --- /dev/null +++ b/ClassLib000/Walker/CleanSpace.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ClassLib000.Walker +{ + /// + /// Квадрат уборки + ///- дата последней уборки + ///- стены(СЗЮВ) + ///- тип уборки(влажная / сухая / не убирать) + /// + public class CleanSpace + { + public DateTime DateClean; + public int X; + public int Y; + public bool WallEast; + public bool WallWest; + public bool WallSouth; + public bool WallNorth; + public ECleanType CleanType; + + public CleanSpace(int x1, int y1) + { + this.X = x1; + this.Y = y1; + DateClean = DateTime.Now.AddYears(-1); + } + } +} diff --git a/ClassLib000/Walker/ECleanType.cs b/ClassLib000/Walker/ECleanType.cs new file mode 100644 index 0000000..1183d71 --- /dev/null +++ b/ClassLib000/Walker/ECleanType.cs @@ -0,0 +1,13 @@ +namespace ClassLib000.Walker +{ + /// + /// (влажная / сухая / не убирать) + /// + public enum ECleanType + { + Unknown = 0, + Wet = 1, + Dry = 2, + DontCleanAtAll = 3 + } +} diff --git a/ClassLib000/Walker/VacuumCleaner.cs b/ClassLib000/Walker/VacuumCleaner.cs new file mode 100644 index 0000000..ba8d86c --- /dev/null +++ b/ClassLib000/Walker/VacuumCleaner.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ClassLib000.Walker +{ + /// + /// Пылесос + /// + public class VacuumCleaner + { + /// + /// координаты + /// + public int X; + public int Y; + public ECleanType Mode; + + internal bool CanGo(CleanSpace cleanSpaceFrom, CleanSpace cleanSpaceTo) + { + return true; + } + } +} diff --git a/ClassLib000/Walker/description.txt b/ClassLib000/Walker/description.txt index 3b6d39f..07057e8 100644 --- a/ClassLib000/Walker/description.txt +++ b/ClassLib000/Walker/description.txt @@ -1,62 +1,30 @@ -# Файл с описанием классов предметной области Шахматы (ПСБ-252) - -## Вариант 1 -Отображение шахматной доски и таймера времени - -### Что храним -- ход[] (история ходов) - - номер - - обозначение хода белых (строка) - - обозначение хода черных (строка) -- игрок белый - - фигуры активные - - фигуры срубленные - - таймер -- игрок черный - - фигуры активные - - фигуры срубленные - - таймер (осталось секунд) -- фигура - - тип - - цвет - - позиция -- позиция - - X (1-8) - - Y (1-8) - -### Сценарии -- отобразить текущее состояние доски -- отобразить текущее список ходов -- отобразить текущее список срубленных фигур -- отобразить время на таймерах -- добавить ход: откуда, куда -- убрать фигуру (срубить): где - - -## Вариант 2 -Отображение шахматной доски - -### Что храним -- игра - - игрок белый - - игрок черный -- игрок белый - - фигуры -- игрок черный - - фигуры -- фигура - - тип - - цвет - - позиция - - флаг срублена -- позиция - - X (1-8) - - Y (1-8) - -### Сценарии -- отобразить текущее состояние доски -- отобразить текущее список срубленных фигур -- добавить ход: откуда, куда -- убрать фигуру (срубить): где -- отобразить шахматную ситуацию: фигур[] +# Файл с описанием классов предметной области Информация о доме робота-пылесоса (ПСБ-251) +Помещения состоят из квадратов, у квадрата могут быть стены (СЗЮВ). Робот-пылесос знает карту. + +## Что хранить +Квадрат уборки + - дата последней уборки + - стены (СЗЮВ) + - тип уборки (влажная / сухая / не убирать) + +Квартира (приложение "умный дом") + - квадраты[] + - пылесос +- пылесос + - X + - Y + - текущий режим уборки + + +## Сценарии +- отобразить квартиру +- найти все давно не убранные квадраты +- найти путь до квадрата + + +__________ +| | +|0,0 | +| | +|___10;4_| diff --git a/ConsoleCore/Program.cs b/ConsoleCore/Program.cs index 3a23e56..cb2eedb 100644 --- a/ConsoleCore/Program.cs +++ b/ConsoleCore/Program.cs @@ -1,6 +1,7 @@ using System; using ClassLib000.Chess; using ClassLib000.TestModel; +using ClassLib000.Walker; namespace ConsoleCore { @@ -18,6 +19,16 @@ namespace ConsoleCore //ChessConsoler.ChessRedrawBoard(game); //ChessConsoler.ChessRedrawBrokenFigures(game); + + Appartment app = new Appartment(); + app.InitRoom(0, 0, 10, 4); + app.InitVC(); + + RobotConsoler.DrawRoom(app); + System.Collections.Generic.List arWeekDirty = + app.GetDirtyCleanSpace(7); + + } diff --git a/ConsoleCore/RobotConsoler.cs b/ConsoleCore/RobotConsoler.cs new file mode 100644 index 0000000..859665a --- /dev/null +++ b/ConsoleCore/RobotConsoler.cs @@ -0,0 +1,37 @@ +using ClassLib000.Walker; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ConsoleCore +{ + class RobotConsoler + { + internal static void DrawRoom(Appartment app) + { + const int width = 3; + const int height = 3; + foreach (CleanSpace space in app.CleanSpaces) + { + int cursorX = space.X * width; + int cursorY = space.Y * height; + Console.SetCursorPosition(cursorX, cursorY); + Console.Write("🌹"); + if (space.WallEast) + { + Console.SetCursorPosition(cursorX + 1, cursorY); + Console.Write("•"); + } + if (space.WallNorth) + { + Console.SetCursorPosition(cursorX, cursorY - 1); + Console.Write("•"); + } + // .. TODO: + + } + } + } +}