Skip to content

Commit 8cb95e1

Browse files
committed
Yes
1 parent fc27686 commit 8cb95e1

18 files changed

+91
-47
lines changed

src/Lab1/Environments/HighDensity.cs

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using Itmo.ObjectOrientedProgramming.Lab1.Obstacles;
45
using Itmo.ObjectOrientedProgramming.Lab1.Obstacles.Interfaces;
56
using Itmo.ObjectOrientedProgramming.Lab1.Router;
67
using Itmo.ObjectOrientedProgramming.Lab1.Ships;
@@ -29,6 +30,8 @@ public TraversalResult TraverseEnvironment(IShip ship, int length)
2930

3031
foreach (IHighDensityObstacle highDensityObstacle in _obstacles)
3132
{
33+
if (highDensityObstacle is AntimatterFlare && !ship.PhotonDeflector)
34+
return new TraversalResult.DeathOfCrew();
3235
highDensityObstacle.GiveDamage(ship);
3336
}
3437

src/Lab1/Obstacles/CosmoWhale.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public CosmoWhale(int population)
1515

1616
public void GiveDamage(IShip ship)
1717
{
18-
ship.TakeDamage(Damage * _population);
18+
if (!ship.AntiNitrineEmitter)
19+
ship.TakeDamage(Damage * _population);
1920
}
2021
}

src/Lab1/Ships/ConcreteShips/Avgur.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@ public class Avgur : IShip
99
{
1010
private readonly IDamagable _hull;
1111

12-
public Avgur()
12+
public Avgur(bool photonDeflector = false, bool antiNitrineEmitter = false)
1313
{
14+
PhotonDeflector = photonDeflector;
15+
AntiNitrineEmitter = antiNitrineEmitter;
1416
DriveEngine = new ExponentialDriveEngine();
1517
JumpEngine = new AlphaJumpEngine();
1618
_hull = new DeflectorClass3(new HullClass3());
1719
}
1820

21+
public bool PhotonDeflector { get; }
22+
public bool AntiNitrineEmitter { get; }
1923
public IDriveEngine DriveEngine { get; }
2024
public IJumpEngine? JumpEngine { get; }
2125

src/Lab1/Ships/ConcreteShips/Meridian.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@ public class Meridian : IShip
99
{
1010
private readonly IDamagable _hull;
1111

12-
public Meridian()
12+
public Meridian(bool photonDeflector = false, bool antiNitrineEmitter = false)
1313
{
14+
PhotonDeflector = photonDeflector;
15+
AntiNitrineEmitter = antiNitrineEmitter;
1416
_hull = new DeflectorClass2(new HullClass2());
1517
DriveEngine = new ExponentialDriveEngine();
1618
JumpEngine = null;
1719
}
1820

21+
public bool PhotonDeflector { get; }
22+
public bool AntiNitrineEmitter { get; }
1923
public IDriveEngine DriveEngine { get; }
2024
public IJumpEngine? JumpEngine { get; }
2125

src/Lab1/Ships/ConcreteShips/PleasureShuttle.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ public class PleasureShuttle : IShip
88
{
99
private readonly IDamagable _hull;
1010

11-
public PleasureShuttle()
11+
public PleasureShuttle(bool photonDeflector = false, bool antiNitrineEmitter = false)
1212
{
13+
PhotonDeflector = photonDeflector;
14+
AntiNitrineEmitter = antiNitrineEmitter;
1315
_hull = new HullClass1();
1416
DriveEngine = new ConstantDriveEngine();
1517
JumpEngine = null;
1618
}
1719

20+
public bool PhotonDeflector { get; }
21+
public bool AntiNitrineEmitter { get; }
1822
public IDriveEngine DriveEngine { get; }
1923
public IJumpEngine? JumpEngine { get; }
2024

src/Lab1/Ships/ConcreteShips/Stella.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@ public class Stella : IShip
99
{
1010
private readonly IDamagable _hull;
1111

12-
public Stella()
12+
public Stella(bool photonDeflector = false, bool antiNitrineEmitter = false)
1313
{
14+
PhotonDeflector = photonDeflector;
15+
AntiNitrineEmitter = antiNitrineEmitter;
1416
_hull = new DeflectorClass1(new HullClass1());
1517
DriveEngine = new ConstantDriveEngine();
1618
JumpEngine = new OmegaJumpEngine();
1719
}
1820

21+
public bool PhotonDeflector { get; }
22+
public bool AntiNitrineEmitter { get; }
1923
public IDriveEngine DriveEngine { get; }
2024
public IJumpEngine? JumpEngine { get; }
2125

src/Lab1/Ships/ConcreteShips/Vaklass.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@ public class Vaklass : IShip
99
{
1010
private readonly IDamagable _hull;
1111

12-
public Vaklass()
12+
public Vaklass(bool photonDeflector = false, bool antiNitrineEmitter = false)
1313
{
14+
PhotonDeflector = photonDeflector;
15+
AntiNitrineEmitter = antiNitrineEmitter;
1416
_hull = new DeflectorClass2(new HullClass1());
1517
DriveEngine = new ExponentialDriveEngine();
1618
JumpEngine = new GammaJumpEngine();
1719
}
1820

21+
public bool PhotonDeflector { get; }
22+
public bool AntiNitrineEmitter { get; }
1923
public IDriveEngine DriveEngine { get; }
2024
public IJumpEngine? JumpEngine { get; }
2125

src/Lab1/Ships/Deflectors/DeflectorClass1.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace Itmo.ObjectOrientedProgramming.Lab1.Ships.Deflectors;
33
public class DeflectorClass1 : IDamagable
44
{
55
private readonly IDamagable _damagable;
6+
private double _hp = 200;
67

78
public DeflectorClass1(IDamagable damagable)
89
{
@@ -11,6 +12,9 @@ public DeflectorClass1(IDamagable damagable)
1112

1213
public double TakeDamage(double points)
1314
{
14-
return _damagable.TakeDamage(points);
15+
double diff = _hp - points;
16+
_hp -= points;
17+
18+
return diff > 0 ? _damagable.TakeDamage(diff) : _damagable.TakeDamage(0);
1519
}
1620
}

src/Lab1/Ships/Deflectors/DeflectorClass2.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace Itmo.ObjectOrientedProgramming.Lab1.Ships.Deflectors;
33
public class DeflectorClass2 : IDamagable
44
{
55
private readonly IDamagable _damagable;
6+
private double _hp = 400;
67

78
public DeflectorClass2(IDamagable damagable)
89
{
@@ -11,6 +12,9 @@ public DeflectorClass2(IDamagable damagable)
1112

1213
public double TakeDamage(double points)
1314
{
14-
return _damagable.TakeDamage(points);
15+
double diff = _hp - points;
16+
_hp -= points;
17+
18+
return diff > 0 ? _damagable.TakeDamage(diff) : _damagable.TakeDamage(0);
1519
}
1620
}

src/Lab1/Ships/Deflectors/DeflectorClass3.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace Itmo.ObjectOrientedProgramming.Lab1.Ships.Deflectors;
33
public class DeflectorClass3 : IDamagable
44
{
55
private readonly IDamagable _damagable;
6+
private double _hp = 600;
67

78
public DeflectorClass3(IDamagable damagable)
89
{
@@ -11,6 +12,9 @@ public DeflectorClass3(IDamagable damagable)
1112

1213
public double TakeDamage(double points)
1314
{
14-
return _damagable.TakeDamage(points);
15+
double diff = _hp - points;
16+
_hp -= points;
17+
18+
return diff > 0 ? _damagable.TakeDamage(diff) : _damagable.TakeDamage(0);
1519
}
1620
}

src/Lab1/Ships/Deflectors/PhotonDeflector.cs

-16
This file was deleted.

src/Lab1/Ships/IShip.cs

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ namespace Itmo.ObjectOrientedProgramming.Lab1.Ships;
55

66
public interface IShip
77
{
8+
bool PhotonDeflector { get; }
9+
bool AntiNitrineEmitter { get; }
10+
811
IDriveEngine DriveEngine { get; }
912
IJumpEngine? JumpEngine { get; }
1013
void TakeDamage(double points);

src/Lab1/Ships/ShipRepository.cs

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using Itmo.ObjectOrientedProgramming.Lab1.Ships.ConcreteShips;
3+
4+
namespace Itmo.ObjectOrientedProgramming.Lab1.Ships;
5+
6+
public static class ShipRepository
7+
{
8+
public static IShip CreateShip(string name, bool photonDeflector = false, bool antiNitrineEmitter = false)
9+
{
10+
return name switch
11+
{
12+
"Avgur" => new Avgur(photonDeflector, antiNitrineEmitter),
13+
"PleasureShuttle" => new PleasureShuttle(photonDeflector, antiNitrineEmitter),
14+
"Meridian" => new Meridian(photonDeflector, antiNitrineEmitter),
15+
"Stella" => new Stella(photonDeflector, antiNitrineEmitter),
16+
"Vaklass" => new Vaklass(photonDeflector, antiNitrineEmitter),
17+
_ => throw new ArgumentException($"Unknown ship type: {name}", nameof(name)),
18+
};
19+
}
20+
}

src/Lab2/Lab2.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
<PropertyGroup>
44
<RootNamespace>Itmo.ObjectOrientedProgramming.Lab2</RootNamespace>
5+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
56
</PropertyGroup>
67

78
</Project>

src/Lab4/Lab4.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
<PropertyGroup>
44
<RootNamespace>Itmo.ObjectOrientedProgramming.Lab4</RootNamespace>
5+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
56
</PropertyGroup>
67

78
</Project>

tests/Lab1.Tests/ShipsAndRoutesTest.cs

+19-22
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,20 @@
33
using Itmo.ObjectOrientedProgramming.Lab1.Obstacles;
44
using Itmo.ObjectOrientedProgramming.Lab1.Obstacles.Interfaces;
55
using Itmo.ObjectOrientedProgramming.Lab1.Router;
6-
using Itmo.ObjectOrientedProgramming.Lab1.Ships.ConcreteShips;
6+
using Itmo.ObjectOrientedProgramming.Lab1.Ships;
77
using Xunit;
88

99
namespace Itmo.ObjectOrientedProgramming.Lab1.Tests;
1010

1111
public class ShipsAndRoutesTest
1212
{
13-
[Fact]
14-
public void Ships_Should_Fail_WhenCantTraverseEnvironment()
13+
[Theory]
14+
[InlineData("Avgur")]
15+
[InlineData("PleasureShuttle")]
16+
public void Ships_Should_Fail_WhenCantTraverseEnvironment(string name)
1517
{
1618
// Arrange
17-
var shuttle = new PleasureShuttle();
19+
IShip shuttle = ShipRepository.CreateShip(name);
1820
var path = new Path(new HighDensity(), 100);
1921

2022
// Act
@@ -24,25 +26,13 @@ public void Ships_Should_Fail_WhenCantTraverseEnvironment()
2426
Assert.IsType<TraversalResult.LostShip>(result);
2527
}
2628

27-
[Fact]
28-
public void Ships2_Should_Fail_WhenCantTraverseEnvironment()
29+
[Theory]
30+
[InlineData(true)]
31+
[InlineData(false)]
32+
public void Ships_Should_Fail_WhenNoFlareProtection(bool antiNitrineEmitter)
2933
{
3034
// Arrange
31-
var shuttle = new Avgur();
32-
var path = new Path(new HighDensity(), 100);
33-
34-
// Act
35-
TraversalResult result = path.TraversePath(shuttle);
36-
37-
// Assert
38-
Assert.IsType<TraversalResult.LostShip>(result);
39-
}
40-
41-
[Fact]
42-
public void Ships2_Should_Fail_WhenNoFlareProtection()
43-
{
44-
// Arrange
45-
var shuttle = new Vaklass();
35+
IShip shuttle = ShipRepository.CreateShip("Vaklass", false, antiNitrineEmitter);
4636

4737
var obstacles = new List<IHighDensityObstacle>()
4838
{
@@ -55,6 +45,13 @@ public void Ships2_Should_Fail_WhenNoFlareProtection()
5545
TraversalResult result = path.TraversePath(shuttle);
5646

5747
// Assert
58-
Assert.IsType<TraversalResult.DeathOfCrew>(result);
48+
if (antiNitrineEmitter)
49+
{
50+
Assert.IsType<TraversalResult.Success>(result);
51+
}
52+
else
53+
{
54+
Assert.IsType<TraversalResult.DeathOfCrew>(result);
55+
}
5956
}
6057
}

tests/Lab2.Tests/Lab2.Tests.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<RootNamespace>Itmo.ObjectOrientedProgramming.Lab2.Tests</RootNamespace>
55
<IsPackable>false</IsPackable>
66
<IsTestProject>true</IsTestProject>
7+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
78
</PropertyGroup>
89

910
<ItemGroup>

tests/Lab4.Tests/Lab4.Tests.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<RootNamespace>Itmo.ObjectOrientedProgramming.Lab4.Tests</RootNamespace>
55
<IsPackable>false</IsPackable>
66
<IsTestProject>true</IsTestProject>
7+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
78
</PropertyGroup>
89

910
<ItemGroup>

0 commit comments

Comments
 (0)