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) |
|||
|
|||
## Вариант 1 |
|||
Отображение шахматной доски и таймера времени |
|||
|
|||
### Что храним |
|||
- ход[] (история ходов) |
|||
- номер |
|||
- обозначение хода белых (строка) |
|||
- обозначение хода черных (строка) |
|||
- игрок белый |
|||
- фигуры активные |
|||
- фигуры срубленные |
|||
- таймер |
|||
- игрок черный |
|||
- фигуры активные |
|||
- фигуры срубленные |
|||
- таймер (осталось секунд) |
|||
- фигура |
|||
- тип |
|||
- цвет |
|||
- позиция |
|||
- позиция |
|||
- X (1-8) |
|||
- Y (1-8) |
|||
|
|||
### Сценарии |
|||
- отобразить текущее состояние доски |
|||
- отобразить текущее список ходов |
|||
- отобразить текущее список срубленных фигур |
|||
- отобразить время на таймерах |
|||
- добавить ход: откуда, куда |
|||
- убрать фигуру (срубить): где |
|||
|
|||
|
|||
## Вариант 2 |
|||
Отображение шахматной доски |
|||
|
|||
### Что храним |
|||
- игра |
|||
- игрок белый |
|||
- игрок черный |
|||
- игрок белый |
|||
- фигуры |
|||
- игрок черный |
|||
- фигуры |
|||
- фигура |
|||
- тип |
|||
- цвет |
|||
- позиция |
|||
- флаг срублена |
|||
- позиция |
|||
- X (1-8) |
|||
- Y (1-8) |
|||
|
|||
### Сценарии |
|||
- отобразить текущее состояние доски |
|||
- отобразить текущее список срубленных фигур |
|||
- добавить ход: откуда, куда |
|||
- убрать фигуру (срубить): где |
|||
- отобразить шахматную ситуацию: фигур[] |
|||
# Файл с описанием классов предметной области Информация о доме робота-пылесоса (ПСБ-251) |
|||
Помещения состоят из квадратов, у квадрата могут быть стены (СЗЮВ). Робот-пылесос знает карту. |
|||
|
|||
## Что хранить |
|||
Квадрат уборки |
|||
- дата последней уборки |
|||
- стены (СЗЮВ) |
|||
- тип уборки (влажная / сухая / не убирать) |
|||
|
|||
Квартира (приложение "умный дом") |
|||
- квадраты[] |
|||
- пылесос |
|||
- пылесос |
|||
- X |
|||
- Y |
|||
- текущий режим уборки |
|||
|
|||
|
|||
## Сценарии |
|||
- отобразить квартиру |
|||
- найти все давно не убранные квадраты |
|||
- найти путь до квадрата |
|||
|
|||
|
|||
__________ |
|||
| | |
|||
|0,0 | |
|||
| | |
|||
|___10;4_| |
|||
|
|||
|
|||
@ -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