This commit is contained in:
s434678 2019-04-10 11:54:39 +02:00
commit aece006b15
55 changed files with 640 additions and 657 deletions

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{10E77BBE-55E1-483D-A456-0E94EAC9B24A}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CzokoŚmieciarka.AI_Naive</RootNamespace>
<AssemblyName>CzokoŚmieciarka.AI_Naive</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="RoutePlanningEngine.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CzokoŚmieciarka.DataModels\CzokoŚmieciarka.DataModels.csproj">
<Project>{f2e11fee-c5ac-47d2-ba9c-819909b6dff7}</Project>
<Name>CzokoŚmieciarka.DataModels</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CzokoŚmieciarka.AI_Naive")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CzokoŚmieciarka.AI_Naive")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("10e77bbe-55e1-483d-a456-0e94eac9b24a")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -16,73 +16,72 @@ namespace Czoko_Smieciarka.AI_Naive
public IEnumerable<IGarbageLocalization> Cans { get; } public IEnumerable<IGarbageLocalization> Cans { get; }
public IEnumerable<ADump> Dumps { get; } public IEnumerable<ADump> Dumps { get; }
enum State { TravelToDump, TravelToCan, Wait, Finish } enum State { TravelToDump, TravelToCan, Wait, Finish }
public Coords Destination { get; set; } public Coords Destination { get; set; }
public object DestinationObject { get; set; } public object DestinationObject { get; set; }
private State CurrentState { get; set; } private State CurrentState { get; set; }
public IEnumerable<IStep> CalculateStep() public void PerformStep()
{ {
return PerformMove(); PerformMove();
} }
public RoutePlanningEngine(IGarbageCollector collector, IEnumerable<IGarbageLocalization> cans, IEnumerable<ADump> dumps) public RoutePlanningEngine(IGarbageCollector collector, IEnumerable<IGarbageLocalization> cans, IEnumerable<ADump> dumps)
{ {
this.Collector = collector.Clone() as IGarbageCollector; this.Collector = collector;
this.Cans = cans; this.Cans = cans;
this.Dumps = dumps; this.Dumps = dumps;
this.CurrentState = State.Wait; this.CurrentState = State.Wait;
} }
private IEnumerable<IStep> PerformMove() private bool PerformMove()
{ {
switch (CurrentState) switch (CurrentState)
{ {
case State.TravelToDump: case State.TravelToDump:
if (Destination == Collector.Position) if (Destination == Collector.Coords)
{ {
var dump = (DestinationObject as ADump); var dump = (DestinationObject as ADump);
var step = new SpillStep(Collector, dump, dump.TypeOfGarbage); var step = new SpillStep(Collector, dump, dump.TypeOfGarbage);
step.Invoke(); step.Invoke();
yield return step;
this.CurrentState = State.Wait; this.CurrentState = State.Wait;
} else }
else
{ {
var dif = Destination - Collector.Position; var dif = Destination - Collector.Coords;
Direction nextDirection = (dif.X == 0) ? Direction nextDirection = (dif.X == 0) ?
((dif.Y > 0) ? Direction.Up : Direction.Down) : ((dif.Y > 0) ? Direction.Up : Direction.Down) :
((dif.X > 0) ? Direction.Right : Direction.Left); ((dif.X > 0) ? Direction.Right : Direction.Left);
var step = new MoveStep(nextDirection, Collector); var step = new MoveStep(nextDirection, Collector);
step.Invoke(); step.Invoke();
yield return step;
} }
break; break;
case State.TravelToCan: case State.TravelToCan:
if (Destination == Collector.Position) if (Destination == Collector.Coords)
{ {
var garbage = (DestinationObject as IGarbageLocalization); var garbage = (DestinationObject as IGarbageLocalization);
foreach (var item in garbage.TrashCans) foreach (var item in garbage.TrashCans)
{ {
var step = new CollectStep(Collector, garbage, item.TypeOfGarbage); var step = new CollectStep(Collector, garbage, item.TypeOfGarbage);
step.Invoke(); step.Invoke();
yield return step;
} }
this.CurrentState = State.Wait; this.CurrentState = State.Wait;
} }
else else
{ {
var dif = Destination - Collector.Position; var dif = Destination - Collector.Coords;
Direction nextDirection = (dif.X == 0) ? Direction nextDirection = (dif.X == 0) ?
((dif.Y > 0) ? Direction.Up : Direction.Down) : ((dif.Y > 0) ? Direction.Up : Direction.Down) :
((dif.X > 0) ? Direction.Right : Direction.Left); ((dif.X > 0) ? Direction.Right : Direction.Left);
var step = new MoveStep(nextDirection, Collector); var step = new MoveStep(nextDirection, Collector);
step.Invoke(); step.Invoke();
yield return step;
} }
break; break;
case State.Wait: case State.Wait:
@ -90,28 +89,28 @@ namespace Czoko_Smieciarka.AI_Naive
if (notEmpty.Any()) if (notEmpty.Any())
{ {
var destDump = Dumps.First(i => i.TypeOfGarbage == notEmpty.First().TypeOfGarbage); var destDump = Dumps.First(i => i.TypeOfGarbage == notEmpty.First().TypeOfGarbage);
this.Destination = destDump.Localization; this.Destination = destDump.Coords;
this.CurrentState = State.TravelToDump; this.CurrentState = State.TravelToDump;
} else }
else
{ {
var notEmptyCans = Cans.Where(i => i.TrashCans.Any(j => j.FillPercent > 0)); var notEmptyCans = Cans.Where(i => i.TrashCans.Any(j => j.FillPercent > 0));
if (notEmptyCans.Any()) if (notEmptyCans.Any())
{ {
this.Destination = notEmptyCans.First().Coords; this.Destination = notEmptyCans.First().Coords;
this.CurrentState = State.TravelToCan; this.CurrentState = State.TravelToCan;
} else }
else
{ {
this.CurrentState = State.Finish; this.CurrentState = State.Finish;
} }
} }
break; break;
case State.Finish: case State.Finish:
yield break; return false;
}
foreach (var item in PerformMove())
{
yield return item;
} }
return true;
} }
} }
} }

View File

@ -8,5 +8,8 @@ namespace CzokoŚmieciarka.DataModels.GeneralModels.Models
public TrashCan(ITypeOfGarbage typeOfGarbage, int maxVolume) : base(typeOfGarbage, maxVolume) public TrashCan(ITypeOfGarbage typeOfGarbage, int maxVolume) : base(typeOfGarbage, maxVolume)
{ {
} }
public TrashCan(ITypeOfGarbage typeOfGarbage, int maxVolume, Garbage garbage) : base(typeOfGarbage, maxVolume, garbage)
{
}
} }
} }

View File

@ -1,17 +1,18 @@
using CzokoŚmieciarka.DataModels.Interfaces; using CzokoŚmieciarka.DataModels.Enums;
using CzokoŚmieciarka.DataModels.Interfaces;
namespace CzokoŚmieciarka.DataModels.GeneralModels.Models namespace CzokoŚmieciarka.DataModels.GeneralModels.Models
{ {
public class TypeOfGarbage : ITypeOfGarbage public class TypeOfGarbage : ITypeOfGarbage
{ {
public TypeOfGarbage(string garbageType, int density, int processingTimePerUnit = 0) public TypeOfGarbage(GarbageType garbageType, int density, int processingTimePerUnit = 0)
{ {
this.GarbageType = garbageType; this.GarbageType = garbageType;
this.Density = density; this.Density = density;
this.ProcessingTimePerUnit = processingTimePerUnit; this.ProcessingTimePerUnit = processingTimePerUnit;
} }
public string GarbageType { get; } public GarbageType GarbageType { get; }
public int ProcessingTimePerUnit { get; } public int ProcessingTimePerUnit { get; }
public int Density { get; } public int Density { get; }
} }

View File

@ -12,29 +12,29 @@ namespace CzokoŚmieciarka.DataModels.Interfaces.GarbageCollector
{ {
public AGarbageCollector(Coords startPosition, IEnumerable<AGarbageCollectorContainer> trashContainers) public AGarbageCollector(Coords startPosition, IEnumerable<AGarbageCollectorContainer> trashContainers)
{ {
this.Position = startPosition; this.Coords = startPosition;
this.TrashContainers = trashContainers; this.TrashContainers = trashContainers;
} }
public Coords Position { get; set; } public Coords Coords { get; set; }
public Coords MoveUp() public Coords MoveUp()
{ {
return new Coords(Position.X,Position.Y+1); return new Coords(Coords.X,Coords.Y+1);
} }
public Coords MoveDown() public Coords MoveDown()
{ {
return new Coords(Position.X, Position.Y - 1); return new Coords(Coords.X, Coords.Y - 1);
} }
public Coords MoveLeft() public Coords MoveLeft()
{ {
return new Coords(Position.X-1, Position.Y); return new Coords(Coords.X-1, Coords.Y);
} }
public Coords MoveRight() public Coords MoveRight()
{ {
return new Coords(Position.X+1, Position.Y); return new Coords(Coords.X+1, Coords.Y);
} }
public object Clone() public object Clone()

View File

@ -10,7 +10,7 @@ namespace CzokoŚmieciarka.DataModels.Interfaces
{ {
public interface IGarbageCollector : ICloneable public interface IGarbageCollector : ICloneable
{ {
Coords Position { get; } Coords Coords { get; }
Coords MoveUp(); Coords MoveUp();
Coords MoveDown(); Coords MoveDown();
Coords MoveLeft(); Coords MoveLeft();

View File

@ -3,12 +3,13 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using CzokoŚmieciarka.DataModels.Enums;
namespace CzokoŚmieciarka.DataModels.Interfaces namespace CzokoŚmieciarka.DataModels.Interfaces
{ {
public interface ITypeOfGarbage public interface ITypeOfGarbage
{ {
string GarbageType { get; } GarbageType GarbageType { get; }
int ProcessingTimePerUnit { get; } int ProcessingTimePerUnit { get; }

View File

@ -9,6 +9,6 @@ namespace CzokoŚmieciarka.DataModels.Interfaces.RoutePlanningEngine
{ {
public interface IRoutePlanningEngine public interface IRoutePlanningEngine
{ {
IEnumerable<IStep> CalculateStep(); void PerformStep();
} }
} }

View File

@ -6,9 +6,9 @@ namespace CzokoŚmieciarka.DataModels.Interfaces.TrashCans
{ {
protected ADump(ITypeOfGarbage typeOfGarbage, int maxVolume, Coords localization) : base(typeOfGarbage, maxVolume) protected ADump(ITypeOfGarbage typeOfGarbage, int maxVolume, Coords localization) : base(typeOfGarbage, maxVolume)
{ {
this.Localization = localization; this.Coords = localization;
} }
public Coords Localization { get; } public Coords Coords { get; set; }
} }
} }

View File

@ -9,6 +9,12 @@ namespace CzokoŚmieciarka.DataModels.Interfaces.TrashCans
this.MaxVolume = maxVolume; this.MaxVolume = maxVolume;
this.TypeOfGarbage = typeOfGarbage; this.TypeOfGarbage = typeOfGarbage;
} }
protected ATrashCan(ITypeOfGarbage typeOfGarbage, int maxVolume, AGarbage garbage)
{
this.MaxVolume = maxVolume;
this.TypeOfGarbage = typeOfGarbage;
this.Garbage = garbage;
}
public ITypeOfGarbage TypeOfGarbage { get; } public ITypeOfGarbage TypeOfGarbage { get; }

View File

@ -23,7 +23,7 @@ namespace CzokoŚmieciarka.DataModels.Models.Steps
public void Invoke() public void Invoke()
{ {
if(_garbageCollector.Position != _garbageLocalization.Coords) if(_garbageCollector.Coords != _garbageLocalization.Coords)
throw new WrongPositionException("Śmieciarka nie jest w miejscu oderbania śmieci"); throw new WrongPositionException("Śmieciarka nie jest w miejscu oderbania śmieci");
var trashCans = _garbageLocalization.TrashCans.Where(t => t.TypeOfGarbage == _typeOfGarbage); var trashCans = _garbageLocalization.TrashCans.Where(t => t.TypeOfGarbage == _typeOfGarbage);

View File

@ -23,7 +23,7 @@ namespace CzokoŚmieciarka.DataModels.Models.Steps
public void Invoke() public void Invoke()
{ {
if(_garbageCollector.Position != _dump.Localization) if(_garbageCollector.Coords != _dump.Coords)
throw new WrongPositionException("Śmieciarka nie na terenie podanego wyspiska"); throw new WrongPositionException("Śmieciarka nie na terenie podanego wyspiska");
if(_dump.TypeOfGarbage != _typeOfGarbage) if(_dump.TypeOfGarbage != _typeOfGarbage)

View File

@ -1,11 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Components\CzokoŚmieciarka.DataModels\CzokoŚmieciarka.DataModels.csproj" />
</ItemGroup>
</Project>

View File

@ -7,11 +7,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CzokoŚmieciarka.DataModels
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CzokoŚmieciarka.DataModels.GeneralModels", "Components\CzokoŚmieciarka.DataModels.GeneralModels\CzokoŚmieciarka.DataModels.GeneralModels.csproj", "{A3D5DA96-69D7-463F-B1EE-6FC70716E3B2}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CzokoŚmieciarka.DataModels.GeneralModels", "Components\CzokoŚmieciarka.DataModels.GeneralModels\CzokoŚmieciarka.DataModels.GeneralModels.csproj", "{A3D5DA96-69D7-463F-B1EE-6FC70716E3B2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CzokoŚmieciarka.WPF", "Interface\CzokoŚmieciarka.WPF\CzokoŚmieciarka.WPF.csproj", "{06937DFB-242D-46BD-9A4B-486D156B62A9}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CzokoŚmieciarka.WPFv2", "Interface\CzokoŚmieciarka.WPFv2\CzokoŚmieciarka.WPFv2.csproj", "{2BADDDA9-A77C-4FB2-9F28-4DAE712E8947}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Czoko_Smieciarka.AI_Naive", "Czoko_Smieciarka.AI_Naive\Czoko_Smieciarka.AI_Naive.csproj", "{A1F1D99A-4E5B-4389-B776-321D8A5976EE}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CzokoŚmieciarka.AI_Naive", "Components\CzokoŚmieciarka.AI_Naive\CzokoŚmieciarka.AI_Naive.csproj", "{10E77BBE-55E1-483D-A456-0E94EAC9B24A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CzokoŚmierciarka.WPF2.0", "Interface\CzokoŚmierciarka.WPF2.0\CzokoŚmierciarka.WPF2.0.csproj", "{6EE3CBC0-CD10-41D8-9282-FF91DCFB9D67}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -27,18 +25,14 @@ Global
{A3D5DA96-69D7-463F-B1EE-6FC70716E3B2}.Debug|Any CPU.Build.0 = Debug|Any CPU {A3D5DA96-69D7-463F-B1EE-6FC70716E3B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A3D5DA96-69D7-463F-B1EE-6FC70716E3B2}.Release|Any CPU.ActiveCfg = Release|Any CPU {A3D5DA96-69D7-463F-B1EE-6FC70716E3B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A3D5DA96-69D7-463F-B1EE-6FC70716E3B2}.Release|Any CPU.Build.0 = Release|Any CPU {A3D5DA96-69D7-463F-B1EE-6FC70716E3B2}.Release|Any CPU.Build.0 = Release|Any CPU
{06937DFB-242D-46BD-9A4B-486D156B62A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BADDDA9-A77C-4FB2-9F28-4DAE712E8947}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06937DFB-242D-46BD-9A4B-486D156B62A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {2BADDDA9-A77C-4FB2-9F28-4DAE712E8947}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06937DFB-242D-46BD-9A4B-486D156B62A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {2BADDDA9-A77C-4FB2-9F28-4DAE712E8947}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06937DFB-242D-46BD-9A4B-486D156B62A9}.Release|Any CPU.Build.0 = Release|Any CPU {2BADDDA9-A77C-4FB2-9F28-4DAE712E8947}.Release|Any CPU.Build.0 = Release|Any CPU
{A1F1D99A-4E5B-4389-B776-321D8A5976EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {10E77BBE-55E1-483D-A456-0E94EAC9B24A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1F1D99A-4E5B-4389-B776-321D8A5976EE}.Debug|Any CPU.Build.0 = Debug|Any CPU {10E77BBE-55E1-483D-A456-0E94EAC9B24A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1F1D99A-4E5B-4389-B776-321D8A5976EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {10E77BBE-55E1-483D-A456-0E94EAC9B24A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1F1D99A-4E5B-4389-B776-321D8A5976EE}.Release|Any CPU.Build.0 = Release|Any CPU {10E77BBE-55E1-483D-A456-0E94EAC9B24A}.Release|Any CPU.Build.0 = Release|Any CPU
{6EE3CBC0-CD10-41D8-9282-FF91DCFB9D67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6EE3CBC0-CD10-41D8-9282-FF91DCFB9D67}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6EE3CBC0-CD10-41D8-9282-FF91DCFB9D67}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6EE3CBC0-CD10-41D8-9282-FF91DCFB9D67}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -1,2 +1,3 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=Czoko_015Amieciarka_002EWPFv2_002EAnnotations/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=Czoko_015Amieciarka_002EWPF_002EAnnotations/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> <s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=Czoko_015Amieciarka_002EWPF_002EAnnotations/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

View File

@ -1,25 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPF.Models;
namespace CzokoŚmieciarka.WPF.Interfaces
{
public abstract class AObject : IObject
{
public Coords Location { get; set; }
public string ImagePath { get; set; }
public string Data { get; set; }
public ImageBrush Image { get; set; }
public void RefreshImage()
{
Image = new ImageBrush(new BitmapImage(new Uri(ImagePath)));
}
}
}

View File

@ -1,17 +0,0 @@
using CzokoŚmieciarka.DataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace CzokoŚmieciarka.WPF.Models
{
public interface IObject
{
string ImagePath { get; set; }
string Data { get; set; }
ImageBrush Image { get; set; }
}
}

View File

@ -1,26 +0,0 @@
<Window x:Class="CzokoŚmieciarka.WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CzokoŚmieciarka.WPF"
xmlns:models="clr-namespace:CzokoŚmieciarka.WPF.Models"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="1000"
KeyDown="MainWindow_OnKeyDown">
<ItemsControl ItemsSource="{Binding Tiles}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type models:Tile}">
<Grid Background="{Binding Object.Image}">
<TextBlock Text="{Binding Object.Data}" Foreground="White"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding Rows}" Columns="{Binding Columns}"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Window>

View File

@ -1,107 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using CzokoŚmieciarka.DataModels.Enums;
using CzokoŚmieciarka.DataModels.GeneralModels.Models;
using CzokoŚmieciarka.DataModels.Interfaces;
using CzokoŚmieciarka.DataModels.Interfaces.TrashCans;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPF.Interfaces;
using CzokoŚmieciarka.WPF.Models;
namespace CzokoŚmieciarka.WPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
//public Board board;
private static int rows = 9;
private static int columns = 9;
private GarbageCollectorWPF garbageCollector = new GarbageCollectorWPF(columns, rows, new Coords(0, 0), AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\garbageCollector.png", new List<AGarbageCollectorContainer>());
private List<AObject> Objects = new List<AObject>();
public MainWindow()
{
InitializeComponent();
for (int y = 0; y < rows; y++)
{
for (int x = 0; x < columns; x++)
{
Road road = new Road(columns, new Coords(x, y), AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\intersection.png");
Objects.Add(road);
}
}
List<Trash> trashes = new List<Trash>();
Trash glass = new Trash(GarbageType.Glass, 100);
Trash plasticMetal = new Trash(GarbageType.PlasticMetal, 100);
Trash organic = new Trash(GarbageType.Organic, 100);
Trash paper = new Trash(GarbageType.Paper, 100);
trashes.Add(glass);
trashes.Add(plasticMetal);
trashes.Add(organic);
trashes.Add(paper);
House house = new House(columns, new Coords(0, 0), trashes);
Objects[house.Location.X + house.Location.Y] = house;
house = new House(columns, new Coords(1, 0), trashes);
Objects[house.Location.X + house.Location.Y] = house;
house = new House(columns, new Coords(2, 0), trashes);
Objects[house.Location.X + house.Location.Y] = house;
DumpWPF dump = new DumpWPF(columns, new Coords(2, 4), glass);
Objects[dump.Location.X + dump.Location.Y] = dump;
dump = new DumpWPF(columns, new Coords(2, 5), paper);
Objects[dump.Location.X + dump.Location.Y] = dump;
dump = new DumpWPF(columns, new Coords(3, 4), organic);
Objects[dump.Location.X + dump.Location.Y] = dump;
dump = new DumpWPF(columns, new Coords(3, 5), plasticMetal);
Objects[dump.Location.X + dump.Location.Y] = dump;
Board board = new Board(Objects, garbageCollector);
this.DataContext = board;
}
private void MainWindow_OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Up)
{
garbageCollector.Move(Direction.Up);
}
if (e.Key == Key.Down)
{
garbageCollector.Move(Direction.Down);
}
if (e.Key == Key.Left)
{
garbageCollector.Move(Direction.Left);
}
if (e.Key == Key.Right)
{
garbageCollector.Move(Direction.Right);
}
Board board = new Board(Objects, garbageCollector);
board.BoardRefresh(Objects, garbageCollector);
this.DataContext = board;
}
}
}

View File

@ -1,87 +0,0 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.GeneralModels.Models;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPF.Interfaces;
namespace CzokoŚmieciarka.WPF.Models
{
public class Board
{
static int _rows = 9;
static int _columns = 9;
List<Tile> _tiles = new List<Tile>();
public Board(List<AObject> objects, GarbageCollectorWPF garbageCollector)
{
foreach (var item in objects)
{
Tile tile = new Tile()
{
Data = item.Data,
Object = item
};
_tiles.Add(tile);
}
_tiles[garbageCollector.Location.X + garbageCollector.Location.Y].Object.Image = MergedBitmaps(
new Bitmap(_tiles[garbageCollector.Location.X + garbageCollector.Location.Y].Object.ImagePath),
new Bitmap(garbageCollector.ImagePath));
}
public void BoardRefresh(List<AObject> objects, GarbageCollectorWPF garbageCollector)
{
foreach (var item in objects)
{
_tiles[item.Location.X + item.Location.Y].Object = item;
_tiles[item.Location.X + item.Location.Y].Object.RefreshImage();
}
_tiles[garbageCollector.Location.X + garbageCollector.Location.Y].Object.Image = MergedBitmaps(
new Bitmap(_tiles[garbageCollector.Location.X + garbageCollector.Location.Y].Object.ImagePath),
new Bitmap(garbageCollector.ImagePath));
}
public int Rows
{
get { return _rows; }
set { _rows = value; }
}
public int Columns
{
get { return _columns; }
set { _columns = value; }
}
public List<Tile> Tiles
{
get { return _tiles; }
set { _tiles = value; }
}
private ImageBrush MergedBitmaps(Bitmap bmp1, Bitmap bmp2)
{
using (Graphics g = Graphics.FromImage(bmp1))
{
g.DrawImage(bmp2, new Point(0, 0));
}
MemoryStream ms = new MemoryStream();
((System.Drawing.Bitmap)bmp1).Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
BitmapImage image = new BitmapImage();
image.BeginInit();
ms.Seek(0, SeekOrigin.Begin);
image.StreamSource = ms;
image.EndInit();
ImageBrush result = new ImageBrush(image);
return result;
}
}
}

View File

@ -1,49 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Enums;
using CzokoŚmieciarka.DataModels.Interfaces;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPF.Interfaces;
namespace CzokoŚmieciarka.WPF.Models
{
class DumpWPF : AObject, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public Trash Trash;
public DumpWPF(int columns, Coords location, Trash trash)
{
Location = new Coords(location.X, location.Y * columns);
Trash = trash;
switch (Trash.Type)
{
case GarbageType.Glass:
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\Dumps\glass.png";
Image = new ImageBrush(new BitmapImage(new Uri(ImagePath)));
Data = String.Format("House\n{0}: {1}", Trash.Type.ToString(), Trash.Weight);
break;
case GarbageType.PlasticMetal:
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\Dumps\plasticmetal.png";
Image = new ImageBrush(new BitmapImage(new Uri(ImagePath)));
Data = String.Format("House\n{0}: {1}", Trash.Type.ToString(), Trash.Weight);
break;
case GarbageType.Organic:
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\Dumps\organic.png";
Image = new ImageBrush(new BitmapImage(new Uri(ImagePath)));
Data = String.Format("House\n{0}: {1}", Trash.Type.ToString(), Trash.Weight);
break;
case GarbageType.Paper:
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\Dumps\paper.png";
Image = new ImageBrush(new BitmapImage(new Uri(ImagePath)));
Data = String.Format("House\n{0}: {1}", Trash.Type.ToString(), Trash.Weight);
break;
}
}
}
}

View File

@ -1,73 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Enums;
using CzokoŚmieciarka.DataModels.GeneralModels.Models;
using CzokoŚmieciarka.DataModels.Interfaces.GarbageCollector;
using CzokoŚmieciarka.DataModels.Interfaces.TrashCans;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPF.Annotations;
using CzokoŚmieciarka.WPF.Interfaces;
namespace CzokoŚmieciarka.WPF.Models
{
public class GarbageCollectorWPF : AGarbageCollector, IObject, INotifyPropertyChanged
{
public Coords Location { get; set; }
public string ImagePath { get; set; }
public string Data { get; set; }
public ImageBrush Image { get; set; }
public int _columns { get; set; }
public int _rows { get; set; }
public void Move(Direction direction)
{
switch (direction)
{
case (Direction.Up):
Location.Y = Location.Y + (-1 * _columns);
Position = this.MoveUp();
break;
case (Direction.Down):
Location.Y = Location.Y + (1 * _columns);
Position = this.MoveDown();
break;
case (Direction.Left):
Location.X = Location.X + (-1);
Position = this.MoveLeft();
break;
case (Direction.Right):
Location.X = Location.X + (1);
Position = this.MoveRight();
break;
}
}
public GarbageCollectorWPF(int columns, int rows, Coords location, string imagePath, IEnumerable<AGarbageCollectorContainer> trashContainers) : base(location, trashContainers)
{
_columns = columns;
_rows = rows;
Location = new Coords(location.X, location.Y * columns);
ImagePath = imagePath;
Image = new ImageBrush(new BitmapImage(new Uri(ImagePath)));
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}

View File

@ -1,25 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPF.Interfaces;
namespace CzokoŚmieciarka.WPF.Models
{
public class House : AObject
{
public List<Trash> Trashes = new List<Trash>();
public House(int columns, Coords location, List<Trash> trashes)
{
Trashes = trashes;
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\house.png";
Image = new ImageBrush(new BitmapImage(new Uri(ImagePath)));
Location = new Coords(location.X, location.Y*columns);
Data = String.Format("House\n{0}: {1}\n{2}: {3}\n{4}: {5}\n{6}: {7}", Trashes[0].Type.ToString(), Trashes[0].Weight, Trashes[1].Type.ToString(), Trashes[1].Weight, Trashes[2].Type.ToString(), Trashes[2].Weight, Trashes[3].Type.ToString(), Trashes[3].Weight);
}
}
}

View File

@ -1,22 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPF.Interfaces;
namespace CzokoŚmieciarka.WPF.Models
{
public class Road: AObject
{
public Road(int columns, Coords location, string imagePath)
{
Location = new Coords(location.X, location.Y * columns);
ImagePath = imagePath;
Image = new ImageBrush(new BitmapImage(new Uri(ImagePath)));
}
}
}

View File

@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using CzokoŚmieciarka.WPF.Interfaces;
namespace CzokoŚmieciarka.WPF.Models
{
public class Tile
{
public string Data { get; set; }
public AObject Object { get; set; }
}
}

View File

@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CzokoŚmieciarka.DataModels.Enums;
namespace CzokoŚmieciarka.WPF.Models
{
public class Trash
{
public GarbageType Type { get; set; }
public int Weight { get; set; }
public Trash(GarbageType type, int weight)
{
Type = type;
Weight = weight;
}
}
}

View File

@ -1,7 +1,7 @@
<Application x:Class="CzokoŚmieciarka.WPF.App" <Application x:Class="CzokoŚmieciarka.WPFv2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CzokoŚmieciarka.WPF" xmlns:local="clr-namespace:CzokoŚmieciarka.WPFv2"
StartupUri="MainWindow.xaml"> StartupUri="MainWindow.xaml">
<Application.Resources> <Application.Resources>

View File

@ -6,13 +6,12 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
namespace CzokoŚmieciarka.WPF namespace CzokoŚmieciarka.WPFv2
{ {
/// <summary> /// <summary>
/// Interaction logic for App.xaml /// Interaction logic for App.xaml
/// </summary> /// </summary>
public partial class App : Application public partial class App : Application
{ {
} }
} }

View File

@ -4,10 +4,10 @@
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{06937DFB-242D-46BD-9A4B-486D156B62A9}</ProjectGuid> <ProjectGuid>{2BADDDA9-A77C-4FB2-9F28-4DAE712E8947}</ProjectGuid>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<RootNamespace>CzokoŚmieciarka.WPF</RootNamespace> <RootNamespace>CzokoŚmieciarka.WPFv2</RootNamespace>
<AssemblyName>CzokoŚmieciarka.WPF</AssemblyName> <AssemblyName>CzokoŚmieciarka.WPFv2</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
@ -37,7 +37,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
@ -64,21 +63,18 @@
<DependentUpon>App.xaml</DependentUpon> <DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Interfaces\AObject.cs" /> <Compile Include="Interfaces\IWPFObject.cs" />
<Compile Include="MainWindow.xaml.cs"> <Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon> <DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Models\Board.cs" /> <Compile Include="Models\Dump.cs" />
<Compile Include="Interfaces\IObject.cs" /> <Compile Include="Models\GarbageCollector.cs" />
<Compile Include="Models\DumpWPF.cs" />
<Compile Include="Models\GarbageCollectorWPF.cs" />
<Compile Include="Models\House.cs" /> <Compile Include="Models\House.cs" />
<Compile Include="Models\Road.cs" /> <Compile Include="Models\Road.cs" />
<Compile Include="Models\Tile.cs" /> <Compile Include="Models\Road2.cs" />
<Compile Include="Models\Trash.cs" />
<Compile Include="Properties\Annotations.cs" /> <Compile Include="Properties\Annotations.cs" />
<Compile Include="Properties\AssemblyInfo.cs"> <Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
@ -106,6 +102,10 @@
<None Include="App.config" /> <None Include="App.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Components\CzokoŚmieciarka.AI_Naive\CzokoŚmieciarka.AI_Naive.csproj">
<Project>{10e77bbe-55e1-483d-a456-0e94eac9b24a}</Project>
<Name>CzokoŚmieciarka.AI_Naive</Name>
</ProjectReference>
<ProjectReference Include="..\..\Components\CzokoŚmieciarka.DataModels.GeneralModels\CzokoŚmieciarka.DataModels.GeneralModels.csproj"> <ProjectReference Include="..\..\Components\CzokoŚmieciarka.DataModels.GeneralModels\CzokoŚmieciarka.DataModels.GeneralModels.csproj">
<Project>{a3d5da96-69d7-463f-b1ee-6fc70716e3b2}</Project> <Project>{a3d5da96-69d7-463f-b1ee-6fc70716e3b2}</Project>
<Name>CzokoŚmieciarka.DataModels.GeneralModels</Name> <Name>CzokoŚmieciarka.DataModels.GeneralModels</Name>
@ -115,5 +115,6 @@
<Name>CzokoŚmieciarka.DataModels</Name> <Name>CzokoŚmieciarka.DataModels</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

View File

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 85 KiB

View File

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media;
using CzokoŚmieciarka.DataModels.Models;
namespace CzokoŚmieciarka.WPFv2.Interfaces
{
public interface IWPFObject
{
string ImagePath { get; set; }
Image Image { get; set; }
Coords Coords { get; set; }
}
}

View File

@ -0,0 +1,16 @@
<Window x:Class="CzokoŚmieciarka.WPFv2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CzokoŚmieciarka.WPFv2"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="1000"
KeyDown="MainWindow_OnKeyDown">
<Grid>
<Grid Name="Board" Margin="0,0,200,0"/>
<DataGrid Name="CollectorInfo" HorizontalAlignment="Right" Width="192"/>
<Grid Name="CollectorBoard" Margin="0,0,200,0"/>
</Grid>
</Window>

View File

@ -0,0 +1,151 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Czoko_Smieciarka.AI_Naive;
using CzokoŚmieciarka.DataModels.Enums;
using CzokoŚmieciarka.DataModels.GeneralModels.Models;
using CzokoŚmieciarka.DataModels.Interfaces;
using CzokoŚmieciarka.DataModels.Interfaces.TrashCans;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPFv2.Interfaces;
using CzokoŚmieciarka.WPFv2.Models;
namespace CzokoŚmieciarka.WPFv2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public static int Columns = 9;
public static int Rows = 9;
IWPFObject[,] Objects = new IWPFObject[Columns,Rows];
private IEnumerable<AGarbageCollectorContainer> GarbageCollectorContainers;
private WPFGarbageCollector garbageCollector;
private RoutePlanningEngine routePlanningEngine;
public MainWindow()
{
InitializeComponent();
BoardInitialize();
}
private void MainWindow_OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Space)
{
routePlanningEngine.PerformStep();
}
CollectorBoard.Children.Clear();
Grid.SetColumn(garbageCollector.Image, garbageCollector.Coords.X);
Grid.SetRow(garbageCollector.Image, garbageCollector.Coords.Y);
CollectorBoard.Children.Add(garbageCollector.Image);
Board.Children.Clear();
foreach (var item in Objects)
{
Grid.SetColumn(item.Image, item.Coords.X);
Grid.SetRow(item.Image, item.Coords.Y);
Board.Children.Add(item.Image);
}
}
private void BoardInitialize()
{
ColumnDefinition column;
RowDefinition row;
for (int i = 0; i < Rows; i++)
{
column = new ColumnDefinition();
row = new RowDefinition();
Board.ColumnDefinitions.Add(column);
Board.RowDefinitions.Add(row);
column = new ColumnDefinition();
row = new RowDefinition();
CollectorBoard.ColumnDefinitions.Add(column);
CollectorBoard.RowDefinitions.Add(row);
for (int j = 0; j < Columns; j++)
{
Road road = new Road();
Objects[i, j] = road;
Grid.SetRow(Objects[i, j].Image, i);
Grid.SetColumn(Objects[i, j].Image, j);
Board.Children.Add(Objects[i, j].Image);
}
}
Objects[2,7] = new WPFDump(new TypeOfGarbage(GarbageType.Glass,1,1), 10000,new Coords(2,7));
Grid.SetColumn(Objects[2, 7].Image, 2);
Grid.SetRow(Objects[2, 7].Image, 7);
Board.Children.Add(Objects[2, 7].Image);
Objects[3,7] = new WPFDump(new TypeOfGarbage(GarbageType.Organic,1,1),10000, new Coords(3,7));
Grid.SetColumn(Objects[3, 7].Image, 3);
Grid.SetRow(Objects[3, 7].Image, 7);
Board.Children.Add(Objects[3, 7].Image);
Objects[2,8] = new WPFDump(new TypeOfGarbage(GarbageType.Paper,1,1), 10000, new Coords(2,8));
Grid.SetColumn(Objects[2, 8].Image, 2);
Grid.SetRow(Objects[2, 8].Image, 8);
Board.Children.Add(Objects[2, 8].Image);
Objects[3,8] = new WPFDump(new TypeOfGarbage(GarbageType.PlasticMetal, 1,1), 10000, new Coords(3,8));
Grid.SetColumn(Objects[3, 8].Image, 3);
Grid.SetRow(Objects[3, 8].Image, 8);
Board.Children.Add(Objects[3, 8].Image);
GarbageCollectorContainers = new List<AGarbageCollectorContainer>()
{
new GarbageCollectorContainer(new TypeOfGarbage(GarbageType.Glass,1,1), 500),
new GarbageCollectorContainer(new TypeOfGarbage(GarbageType.Organic,1,1), 500),
new GarbageCollectorContainer(new TypeOfGarbage(GarbageType.PlasticMetal, 1,1),500),
new GarbageCollectorContainer(new TypeOfGarbage(GarbageType.Paper, 1,1), 500)
};
garbageCollector = new WPFGarbageCollector(new Coords(2, 1), GarbageCollectorContainers);
Grid.SetRow(garbageCollector.Image, garbageCollector.Coords.Y);
Grid.SetColumn(garbageCollector.Image, garbageCollector.Coords.X);
CollectorBoard.Children.Add(garbageCollector.Image);
CollectorBoard.ShowGridLines = true;
//CollectorInfo.ItemsSource = garbageCollector.TrashContainers;
//CollectorInfo.Items.Add(garbageCollector);
//CollectorInfo.Columns.Add(new DataGridTextColumn {Header="X", Binding = new Binding("Coords.X")});
//CollectorInfo.Columns.Add(new DataGridTextColumn { Header = "Y", Binding = new Binding("Coords.Y") });
IEnumerable<TrashCan> trashCans = new List<TrashCan>()
{
new TrashCan(new TypeOfGarbage(GarbageType.Glass,1,1), 500, new Garbage(new TypeOfGarbage(GarbageType.Glass,1,1), 100)),
new TrashCan(new TypeOfGarbage(GarbageType.Organic,1,1), 500, new Garbage(new TypeOfGarbage(GarbageType.Organic,1,1), 100)),
new TrashCan(new TypeOfGarbage(GarbageType.Paper,1,1), 500, new Garbage(new TypeOfGarbage(GarbageType.Paper,1,1), 100)),
new TrashCan(new TypeOfGarbage(GarbageType.PlasticMetal,1,1), 500, new Garbage(new TypeOfGarbage(GarbageType.PlasticMetal,1,1), 100))
};
WPFHouse house = new WPFHouse(new Coords(1, 3), trashCans);
Objects[1, 3] = house;
Grid.SetRow(Objects[1, 3].Image, 1);
Grid.SetColumn(Objects[1, 3].Image, 3);
Board.Children.Add(Objects[1, 3].Image);
routePlanningEngine = new RoutePlanningEngine(garbageCollector,
new List<IGarbageLocalization>()
{
new GarbageLocalization(house.Coords,house.TrashCans)
},
new List<ADump>()
{
});
}
}
}

View File

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Enums;
using CzokoŚmieciarka.DataModels.GeneralModels.Models;
using CzokoŚmieciarka.DataModels.Interfaces;
using CzokoŚmieciarka.DataModels.Interfaces.TrashCans;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPFv2.Interfaces;
namespace CzokoŚmieciarka.WPFv2.Models
{
class WPFDump : ADump, IWPFObject
{
public string ImagePath { get; set; }
public Image Image { get; set; }
public WPFDump(ITypeOfGarbage typeofGarbage, int maxVolume, Coords localization) : base ( typeofGarbage, maxVolume, localization)
{
Image = new Image();
switch (typeofGarbage.GarbageType)
{
case GarbageType.Glass:
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\Dumps\glass.png";
Image.Source = new BitmapImage(new Uri(ImagePath));
break;
case GarbageType.PlasticMetal:
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\Dumps\plasticmetal.png";
Image.Source = new BitmapImage(new Uri(ImagePath));
break;
case GarbageType.Organic:
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\Dumps\organic.png";
Image.Source = new BitmapImage(new Uri(ImagePath));
break;
case GarbageType.Paper:
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\Dumps\paper.png";
Image.Source = new BitmapImage(new Uri(ImagePath));
break;
}
}
}
}

View File

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Interfaces.GarbageCollector;
using CzokoŚmieciarka.DataModels.Interfaces.TrashCans;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPFv2.Annotations;
using CzokoŚmieciarka.WPFv2.Interfaces;
namespace CzokoŚmieciarka.WPFv2.Models
{
class WPFGarbageCollector : AGarbageCollector, IWPFObject, INotifyPropertyChanged
{
public string ImagePath { get; set; }
public Image Image { get; set; }
public WPFGarbageCollector(Coords startPosition, IEnumerable<AGarbageCollectorContainer> trashContainers) : base(startPosition, trashContainers)
{
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\garbageCollector.png";
Image = new Image
{
Source = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory +
@"..\..\Images\garbageCollector.png"))
};
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}

View File

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Interfaces;
using CzokoŚmieciarka.DataModels.Interfaces.TrashCans;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPFv2.Interfaces;
namespace CzokoŚmieciarka.WPFv2.Models
{
class WPFHouse : IGarbageLocalization, IWPFObject
{
public Coords Coords { get; set; }
public IEnumerable<ATrashCan> TrashCans { get; set; }
public string ImagePath { get; set; }
public Image Image { get; set; }
public WPFHouse(Coords coords, IEnumerable<ATrashCan> trashCans)
{
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\house.png";
Image = new Image
{
Source = new BitmapImage(new Uri(ImagePath))
};
TrashCans = trashCans;
Coords = coords;
}
}
}

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPFv2.Interfaces;
namespace CzokoŚmieciarka.WPFv2.Models
{
class Road : IWPFObject
{
public string ImagePath { get; set; }
public Image Image { get; set; }
public Coords Coords { get; set; }
public Road()
{
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\intersection.png";
Image = new Image
{
Source = new BitmapImage(new Uri(ImagePath))
};
}
}
}

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
using CzokoŚmieciarka.DataModels.Models;
using CzokoŚmieciarka.WPFv2.Interfaces;
namespace CzokoŚmieciarka.WPFv2.Models
{
class Road2 : IWPFObject
{
public string ImagePath { get; set; }
public Image Image { get; set; }
public Coords Coords { get; set; }
public Road2()
{
ImagePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\Images\intersectionRED.png";
Image = new Image
{
Source = new BitmapImage(new Uri(ImagePath))
};
}
}
}

View File

@ -30,7 +30,7 @@ using System;
// ReSharper disable MemberCanBeProtected.Global // ReSharper disable MemberCanBeProtected.Global
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace CzokoŚmieciarka.WPF.Annotations namespace CzokoŚmieciarka.WPFv2.Annotations
{ {
/// <summary> /// <summary>
/// Indicates that the value of the marked element could be <c>null</c> sometimes, /// Indicates that the value of the marked element could be <c>null</c> sometimes,

View File

@ -7,11 +7,11 @@ using System.Windows;
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("CzokoŚmieciarka.WPF")] [assembly: AssemblyTitle("CzokoŚmieciarka.WPFv2")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CzokoŚmieciarka.WPF")] [assembly: AssemblyProduct("CzokoŚmieciarka.WPFv2")]
[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]

View File

@ -8,7 +8,7 @@
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace CzokoŚmieciarka.WPF.Properties namespace CzokoŚmieciarka.WPFv2.Properties
{ {
@ -44,7 +44,7 @@ namespace CzokoŚmieciarka.WPF.Properties
{ {
if ((resourceMan == null)) if ((resourceMan == null))
{ {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CzokoŚmieciarka.WPF.Properties.Resources", typeof(Resources).Assembly); global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CzokoŚmieciarka.WPFv2.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp; resourceMan = temp;
} }
return resourceMan; return resourceMan;

View File

@ -8,7 +8,7 @@
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace CzokoŚmieciarka.WPF.Properties namespace CzokoŚmieciarka.WPFv2.Properties
{ {