mirror of
https://github.com/onyx-and-iris/Lottery.git
synced 2024-11-24 07:00:47 +00:00
get our ducks in order!
generating Output() is now the concern of each Lottery class.
This commit is contained in:
parent
34b99c1f52
commit
7b6e3f6419
@ -3,7 +3,5 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base Exception class for the Lottery app
|
/// Base Exception class for the Lottery app
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal class LotteryException(string message) : Exception(message)
|
internal class LotteryException(string message) : Exception(message) { }
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
public override Numbers Generate()
|
public override Numbers Generate()
|
||||||
{
|
{
|
||||||
Numbers Numbers = new(KindOfLottery.Uk, []);
|
Numbers Numbers = new([]);
|
||||||
Generator.FillNumbers(Numbers.Normal, Limits);
|
Generator.FillNumbers(Numbers.Normal, Limits);
|
||||||
return Numbers;
|
return Numbers;
|
||||||
}
|
}
|
||||||
@ -60,7 +60,7 @@
|
|||||||
|
|
||||||
public override Numbers Generate()
|
public override Numbers Generate()
|
||||||
{
|
{
|
||||||
NumbersWithSpecial Numbers = new(KindOfLottery.Euro, [], []);
|
NumbersWithSpecial Numbers = new([], []);
|
||||||
Generator.FillNumbers(Numbers.Normal, NormalLimits, Numbers.Special, SpecialLimits);
|
Generator.FillNumbers(Numbers.Normal, NormalLimits, Numbers.Special, SpecialLimits);
|
||||||
return Numbers;
|
return Numbers;
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
public override Numbers Generate()
|
public override Numbers Generate()
|
||||||
{
|
{
|
||||||
NumbersWithSpecial Numbers = new(KindOfLottery.SetForLife, [], []);
|
NumbersWithSpecial Numbers = new([], []);
|
||||||
Generator.FillNumbers(Numbers.Normal, NormalLimits, Numbers.Special, SpecialLimits);
|
Generator.FillNumbers(Numbers.Normal, NormalLimits, Numbers.Special, SpecialLimits);
|
||||||
return Numbers;
|
return Numbers;
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@
|
|||||||
|
|
||||||
public override Numbers Generate()
|
public override Numbers Generate()
|
||||||
{
|
{
|
||||||
NumbersWithSpecial Numbers = new(KindOfLottery.Thunderball, [], []);
|
NumbersWithSpecial Numbers = new([], []);
|
||||||
Generator.FillNumbers(Numbers.Normal, NormalLimits, Numbers.Special, SpecialLimits);
|
Generator.FillNumbers(Numbers.Normal, NormalLimits, Numbers.Special, SpecialLimits);
|
||||||
return Numbers;
|
return Numbers;
|
||||||
}
|
}
|
||||||
|
@ -1,31 +1,54 @@
|
|||||||
namespace Lottery
|
namespace Lottery
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base Lottery class, it accepts a Generator
|
/// Base Lottery class, use it for lotteries that generate a single set of numbers.
|
||||||
/// SpecialIdentifier may be overridden for Lotteries with Special values.
|
/// SpecialIdentifier may be overridden for Lotteries with Special values.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="Generator"></param>
|
/// <param name="Generator">A fully formed Generator</param>
|
||||||
internal class Lottery(IGenerator Generator)
|
internal class Lottery(IGenerator Generator)
|
||||||
{
|
{
|
||||||
public virtual string? SpecialIdentifier { get; }
|
protected Numbers GenerateNumbers() => Generator.Generate();
|
||||||
|
|
||||||
public Numbers GenerateNumbers() => Generator.Generate();
|
public virtual string Output()
|
||||||
}
|
|
||||||
|
|
||||||
internal class UKLottoLottery(IGenerator Generator) : Lottery(Generator) { };
|
|
||||||
|
|
||||||
internal class EuroMillionsLottery(IGenerator Generator) : Lottery(Generator)
|
|
||||||
{
|
{
|
||||||
public override string SpecialIdentifier { get; } = "Lucky Stars";
|
var numbers = GenerateNumbers();
|
||||||
|
return $"Numbers: {string.Join(", ", numbers.Normal)}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class SetForLifeLottery(IGenerator Generator) : Lottery(Generator)
|
/// <summary>
|
||||||
|
/// Abstract base class, for lotteries with special values.
|
||||||
|
/// It subclasses Lottery.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Generator">A fully formed Generator</param>
|
||||||
|
internal class LotteryWithSpecial(IGenerator Generator) : Lottery(Generator)
|
||||||
{
|
{
|
||||||
public override string SpecialIdentifier { get; } = "Life Ball";
|
protected virtual string SpecialIdentifier => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public override string Output()
|
||||||
|
{
|
||||||
|
var numbers = GenerateNumbers() as NumbersWithSpecial
|
||||||
|
?? throw new LotteryException($"Unable to generate numbers for {this}");
|
||||||
|
|
||||||
|
return string.Join("\t", [
|
||||||
|
$"Numbers: {string.Join(", ", numbers.Normal)}",
|
||||||
|
$"{SpecialIdentifier}: {string.Join(", ", numbers.Special)}",
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class ThunderballLottery(IGenerator Generator) : Lottery(Generator)
|
internal class EuroMillionsLotteryWithSpecial(IGenerator Generator) : LotteryWithSpecial(Generator)
|
||||||
{
|
{
|
||||||
public override string SpecialIdentifier { get; } = "Thunderball";
|
protected override string SpecialIdentifier => "Lucky Stars";
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class SetForLifeLotteryWithSpecial(IGenerator Generator) : LotteryWithSpecial(Generator)
|
||||||
|
{
|
||||||
|
protected override string SpecialIdentifier => "Life Ball";
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class ThunderballLotteryWithSpecial(IGenerator Generator) : LotteryWithSpecial(Generator)
|
||||||
|
{
|
||||||
|
protected override string SpecialIdentifier => "Thunderball";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
public partial class MainPage : ContentPage
|
public partial class MainPage : ContentPage
|
||||||
{
|
{
|
||||||
readonly List<Lottery> Lotteries = [
|
readonly List<Lottery> Lotteries = [
|
||||||
new UKLottoLottery(new UKLottoGenerator()),
|
new Lottery(new UKLottoGenerator()),
|
||||||
new EuroMillionsLottery(new EuroMillionsGenerator()),
|
new EuroMillionsLotteryWithSpecial(new EuroMillionsGenerator()),
|
||||||
new SetForLifeLottery(new SetForLifeGenerator()),
|
new SetForLifeLotteryWithSpecial(new SetForLifeGenerator()),
|
||||||
new ThunderballLottery(new ThunderBallGenerator())
|
new ThunderballLotteryWithSpecial(new ThunderBallGenerator())
|
||||||
];
|
];
|
||||||
const KindOfLottery DefaultLottery = KindOfLottery.Uk;
|
const KindOfLottery DefaultLottery = KindOfLottery.Uk;
|
||||||
Lottery Lottery;
|
Lottery Lottery;
|
||||||
@ -24,28 +24,7 @@
|
|||||||
|
|
||||||
private void SpinButton_Clicked(object sender, EventArgs e)
|
private void SpinButton_Clicked(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Numbers numbers = Lottery.GenerateNumbers();
|
NumbersLabel.Text = string.Join("\t", Lottery.Output());
|
||||||
List<string> output = [];
|
|
||||||
switch (numbers.Kind)
|
|
||||||
{
|
|
||||||
case KindOfLottery.Uk:
|
|
||||||
output.Add($"Numbers: {string.Join(", ", numbers.Normal)}");
|
|
||||||
break;
|
|
||||||
case KindOfLottery.Euro:
|
|
||||||
case KindOfLottery.SetForLife:
|
|
||||||
case KindOfLottery.Thunderball:
|
|
||||||
if (numbers is NumbersWithSpecial numbersWithSpecial)
|
|
||||||
{
|
|
||||||
output.AddRange([
|
|
||||||
$"Numbers: {string.Join(", ", numbersWithSpecial.Normal)}",
|
|
||||||
$"{Lottery.SpecialIdentifier}: {string.Join(", ", numbersWithSpecial.Special)}"
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new LotteryException($"no NumbersLabel output defined for {numbers.Kind}");
|
|
||||||
};
|
|
||||||
NumbersLabel.Text = string.Join("\t", output);
|
|
||||||
SemanticScreenReader.Announce(NumbersLabel.Text);
|
SemanticScreenReader.Announce(NumbersLabel.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
namespace Lottery
|
namespace Lottery
|
||||||
{
|
{
|
||||||
internal record Numbers(KindOfLottery Kind, List<int> Normal);
|
internal record Numbers(List<int> Normal);
|
||||||
|
|
||||||
internal record NumbersWithSpecial(KindOfLottery Kind, List<int> Normal, List<int> Special) : Numbers(Kind, Normal);
|
internal record NumbersWithSpecial(List<int> Normal, List<int> Special) : Numbers(Normal);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user