7 changed files with 245 additions and 61 deletions
@ -0,0 +1,100 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
namespace ClassLib000.Walker |
||||
|
{ |
||||
|
public class Appartment |
||||
|
{ |
||||
|
public List<CleanSpace> CleanSpaces; |
||||
|
public VacuumCleaner VC; |
||||
|
|
||||
|
public Appartment() |
||||
|
{ |
||||
|
VC = new VacuumCleaner(); |
||||
|
CleanSpaces = new List<CleanSpace>(); |
||||
|
} |
||||
|
|
||||
|
#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<CleanSpace> GetDirtyCleanSpace(int iDayCount) |
||||
|
{ |
||||
|
List<CleanSpace> result = new List<CleanSpace>(); |
||||
|
DateTime dtFrom = DateTime.Now.AddDays(-iDayCount); |
||||
|
foreach (var sp in CleanSpaces) |
||||
|
{ |
||||
|
if (sp.DateClean < dtFrom) |
||||
|
{ |
||||
|
result.Add(sp); |
||||
|
} |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
public List<CleanSpace> FindRouteForVC(VacuumCleaner vc, int toX, int toY) |
||||
|
{ |
||||
|
List<CleanSpace> result = new List<CleanSpace>(); |
||||
|
int fromX = vc.X; |
||||
|
int fromY = vc.Y; |
||||
|
// ... реализация алгоритма перебора путей (поиск кратчайшего)
|
||||
|
var cleanSpaceFrom = CleanSpaces[0]; |
||||
|
var cleanSpaceTo = CleanSpaces[1]; |
||||
|
if (vc.CanGo(cleanSpaceFrom, cleanSpaceTo)) |
||||
|
{ |
||||
|
//...
|
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
#endregion
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,31 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace ClassLib000.Walker |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Квадрат уборки
|
||||
|
///- дата последней уборки
|
||||
|
///- стены(СЗЮВ)
|
||||
|
///- тип уборки(влажная / сухая / не убирать)
|
||||
|
/// </summary>
|
||||
|
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); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
namespace ClassLib000.Walker |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// (влажная / сухая / не убирать)
|
||||
|
/// </summary>
|
||||
|
public enum ECleanType |
||||
|
{ |
||||
|
Unknown = 0, |
||||
|
Wet = 1, |
||||
|
Dry = 2, |
||||
|
DontCleanAtAll = 3 |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace ClassLib000.Walker |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Пылесос
|
||||
|
/// </summary>
|
||||
|
public class VacuumCleaner |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// координаты
|
||||
|
/// </summary>
|
||||
|
public int X; |
||||
|
public int Y; |
||||
|
public ECleanType Mode; |
||||
|
|
||||
|
internal bool CanGo(CleanSpace cleanSpaceFrom, CleanSpace cleanSpaceTo) |
||||
|
{ |
||||
|
return true; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,62 +1,30 @@ |
|||||
# Файл с описанием классов предметной области Шахматы (ПСБ-252) |
# Файл с описанием классов предметной области Информация о доме робота-пылесоса (ПСБ-251) |
||||
|
Помещения состоят из квадратов, у квадрата могут быть стены (СЗЮВ). Робот-пылесос знает карту. |
||||
## Вариант 1 |
|
||||
Отображение шахматной доски и таймера времени |
## Что хранить |
||||
|
Квадрат уборки |
||||
### Что храним |
- дата последней уборки |
||||
- ход[] (история ходов) |
- стены (СЗЮВ) |
||||
- номер |
- тип уборки (влажная / сухая / не убирать) |
||||
- обозначение хода белых (строка) |
|
||||
- обозначение хода черных (строка) |
Квартира (приложение "умный дом") |
||||
- игрок белый |
- квадраты[] |
||||
- фигуры активные |
- пылесос |
||||
- фигуры срубленные |
- пылесос |
||||
- таймер |
- X |
||||
- игрок черный |
- Y |
||||
- фигуры активные |
- текущий режим уборки |
||||
- фигуры срубленные |
|
||||
- таймер (осталось секунд) |
|
||||
- фигура |
## Сценарии |
||||
- тип |
- отобразить квартиру |
||||
- цвет |
- найти все давно не убранные квадраты |
||||
- позиция |
- найти путь до квадрата |
||||
- позиция |
|
||||
- X (1-8) |
|
||||
- Y (1-8) |
__________ |
||||
|
| | |
||||
### Сценарии |
|0,0 | |
||||
- отобразить текущее состояние доски |
| | |
||||
- отобразить текущее список ходов |
|___10;4_| |
||||
- отобразить текущее список срубленных фигур |
|
||||
- отобразить время на таймерах |
|
||||
- добавить ход: откуда, куда |
|
||||
- убрать фигуру (срубить): где |
|
||||
|
|
||||
|
|
||||
## Вариант 2 |
|
||||
Отображение шахматной доски |
|
||||
|
|
||||
### Что храним |
|
||||
- игра |
|
||||
- игрок белый |
|
||||
- игрок черный |
|
||||
- игрок белый |
|
||||
- фигуры |
|
||||
- игрок черный |
|
||||
- фигуры |
|
||||
- фигура |
|
||||
- тип |
|
||||
- цвет |
|
||||
- позиция |
|
||||
- флаг срублена |
|
||||
- позиция |
|
||||
- X (1-8) |
|
||||
- Y (1-8) |
|
||||
|
|
||||
### Сценарии |
|
||||
- отобразить текущее состояние доски |
|
||||
- отобразить текущее список срубленных фигур |
|
||||
- добавить ход: откуда, куда |
|
||||
- убрать фигуру (срубить): где |
|
||||
- отобразить шахматную ситуацию: фигур[] |
|
||||
|
|
||||
|
|||||
@ -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:
|
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue