add document strings

Limits are now initialized and private to each Lottery class
This commit is contained in:
onyx-and-iris 2024-09-27 19:28:32 +01:00
parent ff4d77283c
commit 3da6f66deb
3 changed files with 53 additions and 13 deletions

View File

@ -2,6 +2,11 @@
{
internal class Generator
{
/// <summary>
/// Simple algorithm for generating a list of unique numbers of Limits.Count size
/// </summary>
/// <param name="Limits">Defines the amount of numbers to generate, the max and min values</param>
/// <returns>The list of numbers is returned sorted in ascending order.</returns>
public static List<int> Generate(Limits Limits)
{
List<int> Candidates = Enumerable.Range(Limits.Lower, Limits.Upper).ToList();

View File

@ -1,14 +1,33 @@
namespace Lottery
{
internal class Lottery(Limits limits)
internal record Limits(int Count, int Lower, int Upper);
/// <summary>
/// Abstract base class for lotteries.
/// </summary>
internal class Lottery
{
protected Limits Limits => limits;
protected virtual Limits Limits => throw new NotImplementedException();
public virtual string Play() => $"Numbers: {string.Join(", ", Generator.Generate(Limits))}";
}
internal class LotteryWithSpecial(Limits limits, Limits specialLimits) : Lottery(limits)
/// <summary>
/// Concrete UKLotto Lottery class.
/// Generates six balls from 1 to 59.
/// </summary>
internal class UKLottoLottery : Lottery
{
protected Limits SpecialLimits => specialLimits;
protected override Limits Limits { get; } = new(Count: 6, Lower: 1, Upper: 59);
}
/// <summary>
/// Abstract base class for Lotteries with Special values.
/// It subclasses Lottery.
/// SpecialLimits and SpecialIdentifier properties must be overridden.
/// </summary>
internal class LotteryWithSpecial : Lottery
{
protected virtual Limits SpecialLimits => throw new NotImplementedException();
protected virtual string SpecialIdentifier => throw new NotImplementedException();
public override string Play()
@ -20,18 +39,36 @@
}
}
internal class EuroMillionsLottery(Limits limits, Limits specialLimits) : LotteryWithSpecial(limits, specialLimits)
/// <summary>
/// Concrete class for EuroMillions lottery.
/// Generates five balls from 1 to 50 and two lucky stars from 1 to 12.
/// </summary>
internal class EuroMillionsLottery : LotteryWithSpecial
{
protected override Limits Limits { get; } = new(Count: 5, Lower: 1, Upper: 50);
protected override Limits SpecialLimits { get; } = new(Count: 2, Lower: 1, Upper: 12);
protected override string SpecialIdentifier => "Lucky Stars";
}
internal class SetForLifeLottery(Limits limits, Limits specialLimits) : LotteryWithSpecial(limits, specialLimits)
/// <summary>
/// Concrete class for SetForLifeLottery lottery.
/// Generates five balls from 1 to 47 and one life ball from 1 to 10.
/// </summary>
internal class SetForLifeLottery : LotteryWithSpecial
{
protected override Limits Limits { get; } = new(Count: 5, Lower: 1, Upper: 47);
protected override Limits SpecialLimits { get; } = new(Count: 1, Lower: 1, Upper: 10);
protected override string SpecialIdentifier => "Life Ball";
}
internal class ThunderballLottery(Limits limits, Limits specialLimits) : LotteryWithSpecial(limits, specialLimits)
/// <summary>
/// Concrete class for ThunderballLottery lottery.
/// Generates fives balls from 1 to 39 and one thunderball from 1 to 14.
/// </summary>
internal class ThunderballLottery : LotteryWithSpecial
{
protected override Limits Limits { get; } = new(Count: 5, Lower: 1, Upper: 39);
protected override Limits SpecialLimits { get; } = new(Count: 1, Lower: 1, Upper: 14);
protected override string SpecialIdentifier => "Thunderball";
}
}

View File

@ -1,14 +1,12 @@
namespace Lottery
{
internal record Limits(int Count, int Lower, int Upper);
public partial class MainPage : ContentPage
{
readonly List<Lottery> Lotteries = [
new Lottery(limits: new Limits(6, 1, 59)),
new EuroMillionsLottery(limits: new Limits(5, 1, 50), specialLimits: new Limits(2, 1, 12)),
new SetForLifeLottery(limits: new Limits(5, 1, 47), specialLimits: new Limits(1, 1, 10)),
new ThunderballLottery(limits: new Limits(5, 1, 39), specialLimits: new Limits(1, 1, 14))
new UKLottoLottery(),
new EuroMillionsLottery(),
new SetForLifeLottery(),
new ThunderballLottery()
];
const KindOfLottery DefaultLottery = KindOfLottery.Uk;
Lottery Lottery;